text:
/*! SPDX-License-Identifier: MIT */
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */

/**
 * 1. Set default font family to sans-serif.
 * 2. Prevent iOS text size adjust after orientation change, without disabling
 *    user zoom.
 */

html {
  font-family: sans-serif; /* 1 */
  -ms-text-size-adjust: 100%; /* 2 */
  -webkit-text-size-adjust: 100%; /* 2 */
}

/**
 * Remove default margin.
 */

body {
  margin: 0;
}

#cover {
	  background: url(https://github.com/Hackers-To-Engineers/ghdata-sprint1team-2/blob/master/ghdata/static/subtle_lake.jpg) no-repeat center center fixed;
	  -webkit-background-size: cover;
	  -moz-background-size: cover;
	  -o-background-size: cover;
	  background-size: cover;
}
/* HTML5 display definitions
   ========================================================================== */

/**
 * Correct `block` display not defined for any HTML5 element in IE 8/9.
 * Correct `block` display not defined for `details` or `summary` in IE 10/11
 * and Firefox.
 * Correct `block` display not defined for `main` in IE 11.
 */

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}

/**
 * 1. Correct `inline-block` display not defined in IE 8/9.
 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
 */

audio,
canvas,
progress,
video {
  display: inline-block; /* 1 */
  vertical-align: baseline; /* 2 */
}

/**
 * Prevent modern browsers from displaying `audio` without controls.
 * Remove excess height in iOS 5 devices.
 */

audio:not([controls]) {
  display: none;
  height: 0;
}

/**
 * Address `[hidden]` styling not present in IE 8/9/10.
 * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
 */

[hidden],
template {
  display: none;
}

/* Links
   ========================================================================== */

/**
 * Remove the gray background color from active links in IE 10.
 */

a {
  background-color: transparent;
}

/**
 * Improve readability when focused and also mouse hovered in all browsers.
 */

a:active,
a:hover {
  outline: 0;
}

/* Text-level semantics
   ========================================================================== */

/**
 * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
 */

abbr[title] {
  border-bottom: 1px dotted;
}

/**
 * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
 */

b,
strong {
  font-weight: bold;
}

/**
 * Address styling not present in Safari and Chrome.
 */

dfn {
  font-style: italic;
}

/**
 * Address variable `h1` font-size and margin within `section` and `article`
 * contexts in Firefox 4+, Safari, and Chrome.
 */

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

/**
 * Address styling not present in IE 8/9.
 */

mark {
  background: #ff0;
  color: #000;
}

/**
 * Address inconsistent and variable font size in all browsers.
 */

small {
  font-size: 80%;
}

/**
 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
 */

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

/* Embedded content
   ========================================================================== */

/**
 * Remove border when inside `a` element in IE 8/9/10.
 */

img {
  border: 0;
}

/**
 * Correct overflow not hidden in IE 9/10/11.
 */

svg:not(:root) {
  overflow: hidden;
}

/* Grouping content
   ========================================================================== */

/**
 * Address margin not present in IE 8/9 and Safari.
 */

figure {
  margin: 1em 40px;
}

/**
 * Address differences between Firefox and other browsers.
 */

hr {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  height: 0;
}

/**
 * Contain overflow in all browsers.
 */

pre {
  overflow: auto;
}

/**
 * Address odd `em`-unit font size rendering in all browsers.
 */

code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}

/* Forms
   ========================================================================== */

/**
 * Known limitation: by default, Chrome and Safari on OS X allow very limited
 * styling of `select`, unless a `border` property is set.
 */

/**
 * 1. Correct color not being inherited.
 *    Known issue: affects color of disabled elements.
 * 2. Correct font properties not being inherited.
 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
 */

button,
input,
optgroup,
select,
textarea {
  color: inherit; /* 1 */
  font: inherit; /* 2 */
  margin: 0; /* 3 */
}

/**
 * Address `overflow` set to `hidden` in IE 8/9/10/11.
 */

button {
  overflow: visible;
}

/**
 * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * All other form control elements do not inherit `text-transform` values.
 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
 * Correct `select` style inheritance in Firefox.
 */

button,
select {
  text-transform: none;
}

/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */

button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button; /* 2 */
  cursor: pointer; /* 3 */
}

/**
 * Re-set default cursor for disabled elements.
 */

button[disabled],
html input[disabled] {
  cursor: default;
}

/**
 * Remove inner padding and border in Firefox 4+.
 */

button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}

/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */

input {
  line-height: normal;
}

/**
 * It's recommended that you don't attempt to style these elements.
 * Firefox's implementation doesn't respect box-sizing, padding, or width.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10.
 * 2. Remove excess padding in IE 8/9/10.
 */

input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */

input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}

/**
 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
 *    (include `-moz` to future-proof).
 */

input[type="search"] {
  -webkit-appearance: textfield; /* 1 */
  -moz-box-sizing: content-box;
  -webkit-box-sizing: content-box; /* 2 */
  box-sizing: content-box;
}

/**
 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
 * Safari (but not Chrome) clips the cancel button when the search input has
 * padding (and `textfield` appearance).
 */

input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

/**
 * Define consistent border, margin, and padding.
 */

fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}

/**
 * 1. Correct `color` not being inherited in IE 8/9/10/11.
 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
 */

legend {
  border: 0; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Remove default vertical scrollbar in IE 8/9/10/11.
 */

textarea {
  overflow: auto;
}

/**
 * Don't inherit the `font-weight` (applied by a rule above).
 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
 */

optgroup {
  font-weight: bold;
}

/* Tables
   ========================================================================== */

/**
 * Remove most spacing between table cells.
 */

table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

/* MetricsGraphics.js CSS */

.mg-active-datapoint {
    fill: black;
    font-size: 0.9rem;
    font-weight: 400;
    opacity: 0.8;
}

.mg-area1-color {
    fill: #0000ff;
}

.mg-area2-color {
    fill: #05b378;
}

.mg-area3-color {
    fill: #db4437;
}

.mg-area4-color {
    fill: #f8b128;
}

.mg-area5-color {
    fill: #5c5c5c;
}

text.mg-barplot-group-label {
    font-weight:900;
}

.mg-barplot rect.mg-bar {
    shape-rendering: auto;
}

.mg-barplot rect.mg-bar.default-bar {
    fill: #b6b6fc;
}

.mg-barplot rect.mg-bar.default-active {
    fill: #9e9efc;
}

.mg-barplot .mg-bar-prediction {
    fill: #5b5b5b;
}

.mg-barplot .mg-bar-baseline {
    stroke: #5b5b5b;
    stroke-width: 2;
}

.mg-bar-target-element {
    font-size:11px;
    padding-left:5px;
    padding-right:5px;
    font-weight:300;
}

.mg-baselines line {
    opacity: 1;
    shape-rendering: auto;
    stroke: #b3b2b2;
    stroke-width: 1px;
}

.mg-baselines text {
    fill: black;
    font-size: 0.9rem;
    opacity: 0.6;
    stroke: none;
}

.mg-baselines-small text {
    font-size: 0.6rem;
}

.mg-category-guides line {
    stroke: #b3b2b2;
}

.mg-header {
    cursor: default;
    font-size: 1.2rem;
}

.mg-header .mg-chart-description {
    fill: #ccc;
    font-family: FontAwesome;
    font-size: 1.2rem;
}

.mg-header .mg-warning {
    fill: #ccc;
    font-family: FontAwesome;
    font-size: 1.2rem;
}

.mg-points circle {
    opacity: 0.65;
}

.mg-popover {
    font-size: 0.95rem;
}

.mg-popover-content {
    cursor: auto;
    line-height: 17px;
}

.mg-data-table {
    margin-top: 30px;
}

.mg-data-table thead tr th {
    border-bottom: 1px solid darkgray;
    cursor: default;
    font-size: 1.1rem;
    font-weight: normal;
    padding: 5px 5px 8px 5px;
    text-align: right;
}

.mg-data-table thead tr th .fa {
    color: #ccc;
    padding-left: 4px;
}

.mg-data-table thead tr th .popover {
    font-size: 1rem;
    font-weight: normal;
}

.mg-data-table .secondary-title {
    color: darkgray;
}

.mg-data-table tbody tr td {
    margin: 2px;
    padding: 5px;
    vertical-align: top;
}

.mg-data-table  tbody tr td.table-text {
    opacity: 0.8;
    padding-left: 30px;
}

.mg-y-axis line.mg-extended-yax-ticks {
    opacity: 0.4;
}

.mg-x-axis line.mg-extended-xax-ticks {
    opacity: 0.4;
}

.mg-histogram .axis path,
.mg-histogram .axis line {
    fill: none;
    opacity: 0.7;
    shape-rendering: auto;
    stroke: #ccc;
}

tspan.hist-symbol {
    fill: #9e9efc;
}

.mg-histogram .mg-bar rect {
    fill: #b6b6fc;
    shape-rendering: auto;
}

.mg-histogram .mg-bar rect.active {
    fill: #9e9efc;
}

.mg-least-squares-line {
    stroke: red;
    stroke-width: 1px;
}

.mg-lowess-line {
    fill: none;
    stroke: red;
}

.mg-line1-color {
    stroke: #4040e8;
}

.mg-hover-line1-color {
    fill: #4040e8;
}

.mg-line2-color {
    stroke: #05b378;
}

.mg-hover-line2-color {
    fill: #05b378;
}

.mg-line3-color {
    stroke: #db4437;
}

.mg-hover-line3-color {
    fill: #db4437;
}

.mg-line4-color {
    stroke: #f8b128;
}

.mg-hover-line4-color {
    fill: #f8b128;
}

.mg-line5-color {
    stroke: #5c5c5c;
}

.mg-hover-line5-color {
    fill: #5c5c5c;
}

.mg-line-legend text {
    font-size: 0.9rem;
    font-weight: 300;
    stroke: none;
}

.mg-line1-legend-color {
    color: #4040e8;
    fill: #4040e8;
}

.mg-line2-legend-color {
    color: #05b378;
    fill: #05b378;
}

.mg-line3-legend-color {
    color: #db4437;
    fill: #db4437;
}

.mg-line4-legend-color {
    color: #f8b128;
    fill: #f8b128;
}

.mg-line5-legend-color {
    color: #5c5c5c;
    fill: #5c5c5c;
}

.mg-main-area-solid svg .mg-main-area {
    fill: #ccccff;
    opacity: 1;
}

.mg-markers line {
    opacity: 1;
    shape-rendering: auto;
    stroke: #b3b2b2;
    stroke-width: 1px;
}

.mg-markers text {
    fill: black;
    font-size: 0.8rem;
    opacity: 0.6;
}

.mg-missing-text {
    opacity: 0.9;
}

.mg-missing-background {
    stroke: blue;
    fill: none;
    stroke-dasharray: 10,5;
    stroke-opacity: 0.05;
    stroke-width: 2;
}

.mg-missing .mg-main-line {
    opacity: 0.1;
}

.mg-missing .mg-main-area {
    opacity: 0.03;
}

path.mg-main-area {
    opacity: 0.2;
    stroke: none;
}

path.mg-confidence-band {
    fill: #ccc;
    opacity: 0.4;
    stroke: none;
}

path.mg-main-line {
    fill: none;
    opacity: 0.8;
    stroke-width: 1.1px;
}

.mg-points circle {
    fill-opacity: 0.4;
    stroke-opacity: 1;
}

circle.mg-points-mono {
    fill: #00f;
    stroke: #00f;
}

tspan.mg-points-mono {
    fill: #00f;
    stroke: #00f;
}

/* a selected point in a scatterplot */
.mg-points circle.selected {
    fill-opacity: 1;
    stroke-opacity: 1;
}

.mg-voronoi path {
    fill: none;
    pointer-events: all;
    stroke: none;
    stroke-opacity: 0.1;
}

.mg-x-rug-mono,
.mg-y-rug-mono {
    stroke: black;
}

.mg-x-axis line,
.mg-y-axis line {
    opacity: 1;
    shape-rendering: auto;
    stroke: #b3b2b2;
    stroke-width: 1px;
}

.mg-x-axis text,
.mg-y-axis text,
.mg-histogram .axis text {
    fill: black;
    font-size: 0.9rem;
    opacity: 0.6;
}

.mg-x-axis .label,
.mg-y-axis .label,
.mg-axis .label {
    font-size: 0.8rem;
    text-transform: uppercase;
    font-weight: 400;
}

.mg-x-axis-small text,
.mg-y-axis-small text,
.mg-active-datapoint-small {
    font-size: 0.6rem;
}

.mg-x-axis-small .label,
.mg-y-axis-small .label {
    font-size: 0.65rem;
}

.mg-european-hours {
}

.mg-year-marker text {
    fill: black;
    font-size: 0.7rem;
    opacity: 0.6;
}

.mg-year-marker line {
    opacity: 1;
    shape-rendering: auto;
    stroke: #b3b2b2;
    stroke-width: 1px;
}

.mg-year-marker-small text {
    font-size: 0.6rem;
}

/*
* GHData Dashboard - (c) 2017 Curators of the University of Missouri and University of Nebraska-Omaha
* Free to use under the MIT license.
* Designed by Derek Howard
*
* Built on:
*
* Skeleton V2.0.4
* Copyright 2014, Dave Gamache
* www.getskeleton.com
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
* 12/29/2014
*/

/* Grid
–––––––––––––––––––––––––––––––––––––––––––––––––– */
.container {
  position: relative;
  width: 100%;
  max-width: 960px;
  margin: 0 auto;
  padding: 0 20px;
  box-sizing: border-box; }
.column,
.columns {
  width: 100%;
  float: left;
  box-sizing: border-box; }

/* For devices larger than 400px */
@media (min-width: 400px) {
  .container {
    width: 85%;
    padding: 0; }
}

/* For devices larger than 550px */
@media (min-width: 550px) {
  .container {
    width: 80%; }
  .column,
  .columns {
    margin-left: 4%; }
  .column:first-child,
  .columns:first-child {
    margin-left: 0; }

  .one.column,
  .one.columns                    { width: 4.66666666667%; }
  .two.columns                    { width: 13.3333333333%; }
  .three.columns                  { width: 22%;            }
  .four.columns                   { width: 30.6666666667%; }
  .five.columns                   { width: 39.3333333333%; }
  .six.columns                    { width: 48%;            }
  .seven.columns                  { width: 56.6666666667%; }
  .eight.columns                  { width: 65.3333333333%; }
  .nine.columns                   { width: 74.0%;          }
  .ten.columns                    { width: 82.6666666667%; }
  .eleven.columns                 { width: 91.3333333333%; }
  .twelve.columns                 { width: 100%; margin-left: 0; }

  .one-third.column               { width: 30.6666666667%; }
  .two-thirds.column              { width: 65.3333333333%; }

  .one-half.column                { width: 48%; }

  /* Offsets */
  .offset-by-one.column,
  .offset-by-one.columns          { margin-left: 8.66666666667%; }
  .offset-by-two.column,
  .offset-by-two.columns          { margin-left: 17.3333333333%; }
  .offset-by-three.column,
  .offset-by-three.columns        { margin-left: 26%;            }
  .offset-by-four.column,
  .offset-by-four.columns         { margin-left: 34.6666666667%; }
  .offset-by-five.column,
  .offset-by-five.columns         { margin-left: 43.3333333333%; }
  .offset-by-six.column,
  .offset-by-six.columns          { margin-left: 52%;            }
  .offset-by-seven.column,
  .offset-by-seven.columns        { margin-left: 60.6666666667%; }
  .offset-by-eight.column,
  .offset-by-eight.columns        { margin-left: 69.3333333333%; }
  .offset-by-nine.column,
  .offset-by-nine.columns         { margin-left: 78.0%;          }
  .offset-by-ten.column,
  .offset-by-ten.columns          { margin-left: 86.6666666667%; }
  .offset-by-eleven.column,
  .offset-by-eleven.columns       { margin-left: 95.3333333333%; }

  .offset-by-one-third.column,
  .offset-by-one-third.columns    { margin-left: 34.6666666667%; }
  .offset-by-two-thirds.column,
  .offset-by-two-thirds.columns   { margin-left: 69.3333333333%; }

  .offset-by-one-half.column,
  .offset-by-one-half.columns     { margin-left: 52%; }

}

/* Base Styles
–––––––––––––––––––––––––––––––––––––––––––––––––– */
/* NOTE
html is set to 62.5% so that all the REM measurements throughout Skeleton
are based on 10px sizing. So basically 1.5rem = 15px :) */
html {
  font-size: 14px; }
body {
  font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
  line-height: 1.6;
  font-weight: 400;
  font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
  color: #222; }

/* Typography
–––––––––––––––––––––––––––––––––––––––––––––––––– */
h1, h2, h3, h4, h5, h6 {
  margin-top: 0;
  margin-bottom: 2rem;
  font-weight: 300; }
h1 { font-size: 4.0rem; line-height: 1.2;  letter-spacing: -.1rem;}
h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
h3 { font-size: 3.0rem; line-height: 1.3;  letter-spacing: -.1rem; }
h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
h5 { font-size: 1.8rem; line-height: 1.5;  letter-spacing: -.05rem; }
h6 { font-size: 1.5rem; line-height: 1.6;  letter-spacing: 0; }

/* Larger than phablet */
@media (min-width: 550px) {
  h1 { font-size: 5.0rem; }
  h2 { font-size: 4.2rem; }
  h3 { font-size: 3.6rem; }
  h4 { font-size: 3.0rem; }
  h5 { font-size: 2.4rem; }
  h6 { font-size: 1.5rem; }
}

p {
  margin-top: 0; }

/* Links
–––––––––––––––––––––––––––––––––––––––––––––––––– */
a {
  color: #1EAEDB; }
a:hover {
  color: #0FA0CE; }

/* Buttons
–––––––––––––––––––––––––––––––––––––––––––––––––– */
.button,
button,
input[type="submit"],
input[type="reset"],
input[type="button"] {
  display: inline-block;
  height: 38px;
  padding: 0 30px;
  color: #555;
  text-align: center;
  font-size: 11px;
  font-weight: 600;
  line-height: 38px;
  letter-spacing: .1rem;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  background-color: transparent;
  border-radius: 4px;
  border: 1px solid #bbb;
  cursor: pointer;
  box-sizing: border-box; }
.button:hover,
button:hover,
input[type="submit"]:hover,
input[type="reset"]:hover,
input[type="button"]:hover,
.button:focus,
button:focus,
input[type="submit"]:focus,
input[type="reset"]:focus,
input[type="button"]:focus {
  color: #333;
  border-color: #888;
  outline: 0; }
.button.button-primary,
button.button-primary,
input[type="submit"].button-primary,
input[type="reset"].button-primary,
input[type="button"].button-primary {
  color: #FFF;
  background-color: #33C3F0;
  border-color: #33C3F0; }
.button.button-primary:hover,
button.button-primary:hover,
input[type="submit"].button-primary:hover,
input[type="reset"].button-primary:hover,
input[type="button"].button-primary:hover,
.button.button-primary:focus,
button.button-primary:focus,
input[type="submit"].button-primary:focus,
input[type="reset"].button-primary:focus,
input[type="button"].button-primary:focus {
  color: #FFF;
  background-color: #1EAEDB;
  border-color: #1EAEDB; }

/* Forms
–––––––––––––––––––––––––––––––––––––––––––––––––– */
input[type="email"],
input[type="number"],
input[type="search"],
input[type="text"],
input[type="tel"],
input[type="url"],
input[type="password"],
textarea,
select {
  height: 38px;
  padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
  background-color: #fff;
  border: 1px solid #D1D1D1;
  border-radius: 4px;
  box-shadow: none;
  box-sizing: border-box; }
/* Removes awkward default styles on some inputs for iOS */
input[type="email"],
input[type="number"],
input[type="search"],
input[type="text"],
input[type="tel"],
input[type="url"],
input[type="password"],
textarea {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none; }
textarea {
  min-height: 65px;
  padding-top: 6px;
  padding-bottom: 6px; }
input[type="email"]:focus,
input[type="number"]:focus,
input[type="search"]:focus,
input[type="text"]:focus,
input[type="tel"]:focus,
input[type="url"]:focus,
input[type="password"]:focus,
textarea:focus,
select:focus {
  border: 1px solid #33C3F0;
  outline: 0; }
label,
legend {
  display: block;
  margin-bottom: .5rem;
  font-weight: 600; }
fieldset {
  padding: 0;
  border-width: 0; }
input[type="checkbox"],
input[type="radio"] {
  display: inline; }
label > .label-body {
  display: inline-block;
  margin-left: .5rem;
  font-weight: normal; }

/* Lists
–––––––––––––––––––––––––––––––––––––––––––––––––– */
ul {
  list-style: circle inside; }
ol {
  list-style: decimal inside; }
ol, ul {
  padding-left: 0;
  margin-top: 0; }
ul ul,
ul ol,
ol ol,
ol ul {
  margin: 1.5rem 0 1.5rem 3rem;
  font-size: 90%; }
li {
  margin-bottom: 1rem; }

/* Code
–––––––––––––––––––––––––––––––––––––––––––––––––– */
code {
  padding: .2rem .5rem;
  margin: 0 .2rem;
  font-size: 90%;
  white-space: nowrap;
  background: #F1F1F1;
  border: 1px solid #E1E1E1;
  border-radius: 4px; }
pre > code {
  display: block;
  padding: 1rem 1.5rem;
  white-space: pre; }

/* Tables
–––––––––––––––––––––––––––––––––––––––––––––––––– */
th,
td {
  padding: 12px 15px;
  text-align: left;
  border-bottom: 1px solid #E1E1E1; }
th:first-child,
td:first-child {
  padding-left: 0; }
th:last-child,
td:last-child {
  padding-right: 0; }

/* Spacing
–––––––––––––––––––––––––––––––––––––––––––––––––– */
button,
.button {
  margin-bottom: 1rem; }
input,
textarea,
select,
fieldset {
  margin-bottom: 1.5rem; }
pre,
blockquote,
dl,
figure,
table,
p,
ul,
ol,
form {
  margin-bottom: 2.5rem; }

/* Utilities
–––––––––––––––––––––––––––––––––––––––––––––––––– */
.u-full-width {
  width: 100%;
  box-sizing: border-box; }
.u-max-full-width {
  max-width: 100%;
  box-sizing: border-box; }
.u-pull-right {
  float: right; }
.u-pull-left {
  float: left; }

/* Misc
–––––––––––––––––––––––––––––––––––––––––––––––––– */
hr {
  margin-top: 3rem;
  margin-bottom: 3.5rem;
  border-width: 0;
  border-top: 1px solid #E1E1E1; }

/* Clearing
–––––––––––––––––––––––––––––––––––––––––––––––––– */

/* Self Clearing Goodness */
.container:after,
.row:after,
.u-cf {
  content: "";
  display: table;
  clear: both; }

/* Media Queries
–––––––––––––––––––––––––––––––––––––––––––––––––– */
/*
Note: The best way to structure the use of media queries is to create the queries
near the relevant code. For example, if you wanted to change the styles for buttons
on small devices, paste the mobile query code up in the buttons section and style it
there.
*/

/* Larger than mobile */
@media (min-width: 400px) {}

/* Larger than phablet (also point when grid becomes active) */
@media (min-width: 550px) {}

/* Larger than tablet */
@media (min-width: 750px) {}

/* Larger than desktop */
@media (min-width: 1000px) {}

/* Larger than Desktop HD */
@media (min-width: 1200px) {}

/* Report Specific Styles
–––––––––––––––––––––––––––––––––––––––––––––––––– */

.report {
  margin-top: 5%;
}

.report h1, h2, h3, h4 {
  font-weight: bold;
}

.report h2 {
  font-size: 2.5rem;
}

.report .badge {
  margin-top: 1.5rem;
  padding: 0.5rem;
  text-align: center;
  border-radius: 5px;
  color: #fff;
  background-color: #777;
}

.badge.healthy {
  background-color: #595;
}

.report section {
  margin-bottom: 3rem;
}

.trends circle.mg-points-mono {
    fill: #ccc;
    stroke: #ccc;
}

.trends tspan.mg-points-mono {
    fill: #ccc;
    stroke: #ccc;
}


text:
import React from "react";
import { DatasetEditionsController } from "./DatasetEditionsController";
import { shallow } from "enzyme";
import datasets from "../../../utilities/api-clients/datasets";

console.error = () => {};

jest.mock("../../../utilities/logging/log", () => {
    return {
        event: function () {},
    };
});

jest.mock("../../../utilities/notifications", () => {
    return {
        add: jest.fn(notification => {
            mockNotifications.push(notification);
        }),
        remove: () => {},
    };
});

jest.mock("../../../utilities/api-clients/datasets", () => {
    return {
        getEditionsList: jest.fn(() => {
            return Promise.resolve(mockedResponse);
        }),
    };
});

const mockedResponse = {
    dataset_name: "test-dataset-1",
    editions: [
        {
            id: "edition-001",
            title: "edition-001",
            release_date: "15 March 2021",
        },
        {
            id: "edition-002",
            title: "edition-002",
            release_date: "11 March 2021",
        },
    ],
};

let dispatchedActions,
    mockNotifications = [];

const defaultProps = {
    dispatch: event => {
        dispatchedActions.push(event);
    },
    rootPath: "/florence",
    location: {
        pathname: "florence/collections/12345/datasets/6789",
    },
    params: {
        datasetID: "1234",
    },
};

const component = shallow(<DatasetEditionsController {...defaultProps} />);

beforeEach(() => {
    mockNotifications = [];
});

describe("Calling getEditionsList", () => {
    it("updates isFetchingDataset state to show it's fetching data for all datasets", () => {
        expect(component.state("isFetchingData")).toBe(false);

        component.instance().getAllEditions(mockedResponse.dataset_name);
        expect(component.state("isFetchingData")).toBe(true);
    });

    it("updates isFetchingDatasets state to show it has fetched data for all datasets", async () => {
        await component.instance().getAllEditions(mockedResponse.dataset_name);
        expect(component.state("isFetchingData")).toBe(false);
    });

    it("updates isFetchingDatasets state correctly on failure to fetch data for all datasets", async () => {
        datasets.getEditionsList.mockImplementationOnce(() => Promise.reject({ status: 500 }));
        await component.instance().getAllEditions(mockedResponse.dataset_name);
        expect(component.state("isFetchingData")).toBe(false);
    });

    it("Errors cause notification", async () => {
        datasets.getEditionsList.mockImplementationOnce(() => Promise.reject({ status: 404 }));
        await component.instance().getAllEditions(mockedResponse.dataset_name);
        expect(mockNotifications.length).toBe(1);
    });
});

test("Mapping editions to state", () => {
    const mapped = component.instance().mapEditionsToState(mockedResponse.editions);
    expect(mapped[0]).toMatchObject({
        id: mockedResponse.editions[0].id,
        title: mockedResponse.editions[0].title,
        url: "florence/collections/12345/datasets/6789/editions/" + mockedResponse.editions[0].id,
        details: ["Release date: " + mockedResponse.editions[0].release_date],
    });
    expect(mapped[1]).toMatchObject({
        id: mockedResponse.editions[1].id,
        title: mockedResponse.editions[1].title,
        url: "florence/collections/12345/datasets/6789/editions/" + mockedResponse.editions[1].id,
        details: ["Release date: " + mockedResponse.editions[1].release_date],
    });
});

redpajama_set_name: RedPajamaGithub


text:
package org.eclipse.collections.impl.map.immutable.primitive;

import org.eclipse.collections.impl.map.mutable.primitive.CharDoubleHashMap;
import org.eclipse.collections.impl.test.Verify;
import org.junit.Test;

public class ImmutableCharDoubleHashMapSerializationTest
{
    @Test
    public void serializedForm()
    {
        Verify.assertSerializedForm(
                1L,
                "rO0ABXNyAHhvcmcuZWNsaXBzZS5jb2xsZWN0aW9ucy5pbXBsLm1hcC5pbW11dGFibGUucHJpbWl0\n"
                        + "aXZlLkltbXV0YWJsZUNoYXJEb3VibGVIYXNoTWFwJEltbXV0YWJsZUNoYXJEb3VibGVNYXBTZXJp\n"
                        + "YWxpemF0aW9uUHJveHkAAAAAAAAAAQwAAHhwdxgAAAACAAE/8AAAAAAAAAACQAAAAAAAAAB4",
                new ImmutableCharDoubleHashMap(CharDoubleHashMap.newWithKeysValues((char) 1, 1.0, (char) 2, 2.0)));
    }
}


text:
package distribution;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Properties;

/**
 * Created by rabbiddog on 6/14/16.
 */

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.*;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
import  pft.file_operation.PftFileManager;

public class FileDistributionApplication {

    private static String fileName;
    public static String mainFolder;
    public static String logFilePath;
    private static Logger _log;

    private static LinkedList<String> hostList = new LinkedList<String>();
    private static String duplicateFileMessage = "";
    public static void main(String args[])

    {
        loadLogFile();
        setuplogging();
        _log = LogManager.getRootLogger();

        if(args.length < 2){
            //Check if atleast one host and filename is added
            _log.error("Invalid command.");
            System.exit(0);
        }
        parse(args);
        _log.info("FileName:" + fileName);
        _log.info("HostNames"+ hostList);
        _log.info(duplicateFileMessage);

        FileDistributionHandler fileDistributionHandler = null;
        try {
            fileDistributionHandler = new FileDistributionHandler(fileName,hostList);
            fileDistributionHandler.setDistributionParameters();
            fileDistributionHandler.generateTorrentFile();
            fileDistributionHandler.startDistribution();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void parse(String[] args) {
        boolean fileParsed = false;
        for(int i=0;i<args.length;i++) {
            if(isHost(args[i])) {
                String trimmedHost = trimHost(args[i]);
                hostList.add(trimmedHost);
            }
            else {
                if(fileParsed == true){
                    //Print a message at the end that ignoring second file
                    duplicateFileMessage += "Duplicate file" + args[i] + " will be ignored. \n";
                }
                //Store Filename
                //Set file parsed to true
                else{
                    fileParsed = true;
                    fileName = args[i];
                }
            }
        }
    }
    private static String trimHost(String arg) {
        // System.out.println("Substring: " + arg.substring(0,(arg.length() -1)));
        if(arg.substring(0,9).equals("localhost")) return "localhost:" + arg.substring(10, arg.length());
        return arg;
    }
    private static boolean isHost(String arg) {
        String delimiter = ":";
        String tokens[] = arg.split(delimiter);
        if(tokens.length == 1) return false;
        return true;
    }
    private static void loadLogFile()
    {
        File configFile = new File("config.properties");

        try {
            FileReader reader = new FileReader(configFile);
            Properties props = new Properties();
            props.load(reader);
            logFilePath= props.getProperty("logfile");
            mainFolder = props.getProperty("pathServer");
            reader.close();

        } catch (FileNotFoundException ex) {
            System.out.print("Error in reading Configuration file while searching for path to Log file");
        } catch (IOException ex) {
            System.out.print("Error in reading Configuration file while searching for path to Log file");
        }
    }

    private static void setuplogging()
    {
        ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();

        builder.setStatusLevel( Level.ERROR);
        builder.setConfigurationName("RollingBuilder");
// create a console appender
        AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target",
                ConsoleAppender.Target.SYSTEM_OUT);
        appenderBuilder.add(builder.newLayout("PatternLayout")
                .addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
        builder.add( appenderBuilder );
// create a rolling file appender
        LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout")
                .addAttribute("pattern", "%d [%t] %-5level: %msg%n");
        ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
                .addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule", "0 0 0 * * ?"))
                .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M"));
        appenderBuilder = builder.newAppender("rolling", "RollingFile")
                .addAttribute("fileName", logFilePath)
                .addAttribute("filePattern", logFilePath+".gz")
                .add(layoutBuilder)
                .addComponent(triggeringPolicy);
        builder.add(appenderBuilder);
        builder.add( builder.newLogger( "TestLogger", Level.DEBUG )
                .add( builder.newAppenderRef( "rolling" ) )
                .addAttribute( "additivity", false ) );

        builder.add( builder.newRootLogger( Level.DEBUG )
                .add( builder.newAppenderRef( "rolling" ) ) );
        LoggerContext ctx = Configurator.initialize(builder.build());
    }
}


text:
	<title>[[Application title]]</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

[[Title]]

[[This is a simple way of translating an application without much trouble]]

	<button>[[Ok]]</button>
	<button>[[Cancel]]</button>

		[[Now is time to test, with commas]]


text:
/*
 * DebugImporter.java
 */
package org.ngbw.utils;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.InputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.ngbw.sdk.Workbench;
import org.ngbw.sdk.api.core.GenericDataRecordCollection;
import org.ngbw.sdk.core.shared.IndexedDataRecord;
import org.ngbw.sdk.core.types.DataFormat;
import org.ngbw.sdk.core.types.DataType;
import org.ngbw.sdk.core.types.EntityType;
import org.ngbw.sdk.database.Folder;
import org.ngbw.sdk.database.User;
import org.ngbw.sdk.database.UserDataItem;
import org.ngbw.sdk.database.UserItemDataRecord;

/**
 *
 * @author Paul Hoover
 *
 */
class DebugImporter {

	private static class SessionDirFilter implements FilenameFilter {

		public boolean accept(File dir, String name)
		{
			return name.matches(SESSION_DIR_PREFIX + "\\S+$");
		}
	}

	private static final String TARGET_FOLDER_LABEL = "Imported from BWB";
	private static final String BWB_ROOT_DIR = "/misc/workbench/3.2/";
	private static final String SESSION_DIR_PREFIX = "^S\\.[0-9]\\.[0-9]_[0-9]+_";
	private static final int MAX_LABEL_LENGTH = 1023;

	private final Workbench m_workbench;

	/**
	 * Constructs an instance of the class.
	 *
	 * @param workbench
	 */
	DebugImporter(Workbench workbench)
	{
		m_workbench = workbench;
	}

	/**
	 * Imports data from the Biology Workbench to the Next Generation Biology Workbench.
	 *
	 * @param username a BWB user name
	 * @param parentFolder a Folder object that will contain the imported data items
	 * @return the number of data items imported
	 * @throws Exception
	 */
	public int importBwbData(String username, Folder parentFolder) throws Exception
	{
		if (!authenticateUser(username))
			throw new Exception("Authentication failed for user " + username);

		File dataDir = new File(BWB_ROOT_DIR + "USER/" + username);

		// users who haven't logged in to BWB recently might have had their data erased by the BWB
		// administrator, so having an account doesn't guarantee that there's anything to import
		if (!dataDir.exists() || !dataDir.isDirectory())
			return 0;

		int numItems = 0;
		String[] sessionDirNames = dataDir.list(new SessionDirFilter());
		List<Folder> subFolders = parentFolder.findSubFolders();

		for (int i = 0 ; i < sessionDirNames.length ; i += 1) {
			File sessionFile = new File(dataDir.getAbsolutePath() + "/" + sessionDirNames[i] + "/Session_File");

			if (!sessionFile.exists() || sessionFile.length() < 1)
				continue;

			Folder newFolder = new Folder(parentFolder);
			String folderLabel = createUniqueLabel(subFolders, sessionDirNames[i].replaceFirst(SESSION_DIR_PREFIX, "").replaceAll("_+", " ").trim());

			newFolder.setLabel(folderLabel);

			newFolder.save();

			BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(sessionFile));

			try {
				while (true) {
					String typeSection = readSection(inputStream);

					// this will only occur if we've reached EOF
					if (typeSection == null)
						break;

					String fromSection = readSection(inputStream);
					String labelSection = readSection(inputStream);
					String sequenceSection = readSection(inputStream);
					DataType dataType;
					EntityType entityType;

					if(typeSection.equalsIgnoreCase("Alignment")) {
						dataType = DataType.SEQUENCE_ALIGNMENT;

						if(fromSection.matches(".+\\sProtein$"))
							entityType = EntityType.PROTEIN;
						else if (fromSection.matches(".+\\sNucleic$"))
							entityType = EntityType.NUCLEIC_ACID;
						else
							entityType = EntityType.UNKNOWN;
					}
					else {
						dataType = DataType.SEQUENCE;

						if(typeSection.equals("Protein"))
							entityType = EntityType.PROTEIN;
						else if (typeSection.equals("Nucleic"))
							entityType = EntityType.NUCLEIC_ACID;
						else
							entityType = EntityType.UNKNOWN;
					}

					if (labelSection.length() > MAX_LABEL_LENGTH) {
						System.err.println("Truncating a label in session " + folderLabel + " for BWB user " + username + " from " + labelSection.length() + " characters to " + String.valueOf(MAX_LABEL_LENGTH));

						labelSection = labelSection.substring(0, MAX_LABEL_LENGTH);
					}

					UserDataItem newItem = new UserDataItem(newFolder);

					newItem.setLabel(labelSection);
					newItem.setDataFormat(DataFormat.FASTA);
					newItem.setDataType(dataType);
					newItem.setEntityType(entityType);
					newItem.setData(sequenceSection);

					try {
						GenericDataRecordCollection<IndexedDataRecord> records = m_workbench.extractDataRecords(newItem);

						for (Iterator<IndexedDataRecord> elements = records.toList().iterator() ; elements.hasNext() ; )
							newItem.dataRecords().add(new UserItemDataRecord(elements.next(), newItem));
					}
					catch (Exception err) {
						// torpedoed by one of Hannes' RuntimeExceptions. We have no way of knowing
						// if this indicates something serious or not, so we just ignore it
						System.err.println("Caught an exception while extracting data records:");

						err.printStackTrace(System.err);
					}

					newItem.metaData().put("importedFrom", "BWB");

					newItem.save();

					numItems += 1;
				}
			}
			finally {
				inputStream.close();
			}
		}

		return numItems;
	}

	/**
	 * Authenticates a BWB user using the given name and password. These credentials are compared to
	 * entries in an Apache htpasswd file that the BWB uses.
	 *
	 * @param username a BWB user name
	 * @return true if the user name was found, and the password matches the stored password
	 * @throws Exception
	 */
	private boolean authenticateUser(String username) throws Exception
	{
		BufferedReader htpasswdReader = new BufferedReader(new FileReader(BWB_ROOT_DIR + "CONF/htpasswd"));

		try {
			String line;

			while ((line = htpasswdReader.readLine()) != null) {
				int colonChar = line.indexOf(':');

				if (colonChar == -1)
					continue;

				String name = line.substring(0, colonChar);

				if (!name.equals(username))
					continue;

				return true;
			}
		}
		finally {
			htpasswdReader.close();
		}

		return false;
	}

	/**
	 * Ensures that a given label is unique with respect to a given list of folders. If the label is
	 * unique, the unaltered label is returned. If not, a unique version of the label is produced by
	 * appending a numeric value to the original label.
	 *
	 * @param folders a List object containing the folders to search
	 * @param label a String object which is the original label
	 * @return
	 */
	private String createUniqueLabel(List<Folder> folders, String label)
	{
		int suffix = 1;
		String newLabel = label;

		while (labelIsDuplicate(folders, newLabel)) {
			suffix += 1;
			newLabel = label + ' ' + String.valueOf(suffix);
		}

		return newLabel;
	}

	/**
	 * Searches a list of folders for the given label.
	 *
	 * @param folders a List object containing the folders to search
	 * @param label a String object which is the label to search for
	 * @return true if the given label was found in the list of folders
	 */
	private boolean labelIsDuplicate(List<Folder> folders, String label)
	{
		for (Iterator<Folder> elements = folders.iterator() ; elements.hasNext() ; ) {
			if (elements.next().getLabel().equals(label))
				return true;
		}

		return false;
	}

	/**
	 * Reads the data from a section of a BWB session file. Each data item stored in a session file has
	 * four sections associated with it, TYPE, FROM, LABEL, and SEQ. Sections are written in the file
	 * in this order. Each section is preceded by the length of the section, in characters. The data
	 * for each section is written as a key / value pair, with the following format:
	 *
	 * 		KEY[ n ]=[ data... ]
	 *
	 * where KEY is one of the section names and n is the ordinal of the data item. There can be any
	 * number of data items stored in a particular session file.
	 *
	 * @param input an InputStream object opened on the session file
	 * @return a String object containing the characters from this section
	 * @throws IOException
	 */
	private String readSection(InputStream input) throws IOException
	{
		int length = 0;

		// the length of a section is a 4-byte value written in network byte order, which is big-endian.
		// The following operations reverse the byte order to little-endian, so hopefully we're running
		// on that sort of architecture
		length |= input.read() << 24;
		length |= input.read() << 16;
		length |= input.read() << 8;
		length |= input.read();

		// we've reached EOF
		if (length < 0)
			return null;

		byte[] buffer = new byte[length];

		input.read(buffer, 0, length);

		int offset = 0;

		// skip over the section key
		while ((char) buffer[offset] != '=')
			offset += 1;

		// skip over the equals sign
		offset += 1;

		return new String(buffer, offset, length - offset);
	}

	public static void main(String[] args)
	{
		try {
			if (args.length != 2)
				throw new Exception("usage: DebugImporter ngbw_account bwb_account");

			Workbench workbench = Workbench.getInstance();
			User owner = User.findUserByUsername(args[0]);
			Folder target = null;

			for (Iterator<Folder> folders = owner.findFolders().iterator() ; folders.hasNext() ; ) {
				Folder folder = folders.next();

				if (folder.getLabel().equals(TARGET_FOLDER_LABEL)) {
					target = folder;

					break;
				}
			}

			if (target == null) {
				target = new Folder(owner);

				target.setLabel(TARGET_FOLDER_LABEL);

				target.save();
			}

			int numItems = (new DebugImporter(workbench)).importBwbData(args[1], target);

			System.out.println("Imported " + numItems + " items");
		}
		catch (Exception err) {
			err.printStackTrace(System.err);

			System.exit(-1);
		}
	}
}


text:
using namespace std;

class NetSock
{
private:
  unsigned int    ip;
  unsigned short  port;

  unsigned int    bindip;
  unsigned int    bindport;

  int   mode;
  int   socket;
  char  str_ip[16], str_bindip[16];

  bool  isUDP;
  bool  UDPCanBroadcast;

public:
  NetSock();
  ~NetSock();

  static const int SYNCHRONIC;
  static const int ASYNCHRONIC;

  bool ListenUDP(unsigned short bindport, const char *bindhost);
  bool ListenAllUDP(unsigned short bindport);

  bool Connect(const char* host, unsigned short port);
  bool Connect(unsigned int ip, unsigned short port);
  bool SetMode(int mode);
  bool Disconnect();
  bool Listen(unsigned short port, const char *bindip);
  bool ListenAll(unsigned short port);
  NetSock *Accept();
  int Read(void *Buffer, int Size);

  // Reads exactly Size bytes. Does not return until then,
  // unless an error has occured.
  // If it's used on a non-blocking socket, it switches the
  // socket to blocking mode until all the data is read,
  // and switches it back to non-blocking mode after that.
  int ReadAll(void *Buffer, int Size);

  // Write and WriteAll work the same in blocking sockets.
  // In non-blocking, Write writes only so much data that does
  // not cause a block. WriteAll on the other hand makes sure
  // all the data is transmited.
  int Write(const void *Buffer, int Size);
  int WriteAll(const void *Buffer, int Size);

  // Use BroadcastUDP to send packets to broadcast addresses.
  // Due to some change in Windows 7 BroadcastUDP cannot use 255.255.255.255 as source address,
  // currently you need to use an interface specific broadcast address (e.g. 192.168.1.255).
  int WriteUDP(const char* host, unsigned short port, const void *buffer, int size);
  int BroadcastUDP(const char* broadcast, unsigned short port, const void *buffer, int size);
  int ReadUDP(void *buffer, int size, char *srchost, unsigned short *srcport);

  unsigned short GetPort() const;
  unsigned int GetIP() const;
  const char *GetStrIP();

  unsigned short GetBindPort() const;
  unsigned int GetBindIP() const;
  const char *GetStrBindIP();

  // Inits winsock on Windows
  static bool InitNetworking(void);
};


text:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using GithubAPI;
using MonoTouch.ObjCRuntime;

namespace GithubDashboard
{
	public partial class GithubDashboardViewController : UIViewController
	{
		private UIPopoverController _popover;
		private RepoSelectorViewControllerController _repoSelectorVC;
		private string _githubUserName;
		private DashboardPageOneView _pageOne;
		private DashboardPageTwoView _pageTwo;

		public GithubDashboardViewController (IntPtr handle) : base (handle)
		{

		}

		#region View lifecycle

		public override void ViewDidLoad ()
		{
			base.ViewDidLoad ();

			// make the main content area scroll over two pages
			this.scrollView.ContentSize = new SizeF (this.scrollView.Bounds.Width * 2, this.scrollView.Bounds.Height);
			this.scrollView.PagingEnabled = true;

			// add page one
			var nibObjects = NSBundle.MainBundle.LoadNib("DashboardPageOneView", this, null);
			_pageOne = (DashboardPageOneView)Runtime.GetNSObject(nibObjects.ValueAt(0));
			_pageOne.Frame = this.scrollView.Bounds;
			this.scrollView.Add(_pageOne);

			// add page two
			nibObjects = NSBundle.MainBundle.LoadNib("DashboardPageTwoView", this, null);
			_pageTwo = (DashboardPageTwoView)Runtime.GetNSObject(nibObjects.ValueAt(0));
			_pageTwo.Frame = new RectangleF (new PointF(this.scrollView.Bounds.Width, 0), this.scrollView.Bounds.Size);
			this.scrollView.Add(_pageTwo);

			// Need to set the repo for our views
			FetchDataForRepo ("tastejs", "PropertyCross");

			// Add the touch handler to the repo summary
			this.repoSummary.SetTapHandler ( nameLabelFrame => {
				if(_repoSelectorVC == null) {
					_repoSelectorVC = new RepoSelectorViewControllerController (_githubUserName, repoName => {
						InvokeOnMainThread(() => {
							_popover.Dismiss(true);
							FetchDataForRepo (_githubUserName, repoName);
						});
					});
				}
				_popover = new UIPopoverController(_repoSelectorVC);
				_popover.PresentFromRect (nameLabelFrame, this.repoSummary, UIPopoverArrowDirection.Up, true);
			});

		}
		#endregion

		private void FetchDataForRepo(string owner, string repo)
		{
			GithubDataProvider.Instance.LanguageStatsForRepo (owner, repo, data => {
				InvokeOnMainThread (() => {
					this._pageOne.LanguageStats.RenderData(data);
				});
			});

			GithubDataProvider.Instance.PunchCardEntries (owner, repo, data => {
				InvokeOnMainThread (() => {
					this._pageOne.PunchCard.RenderData(data);
				});
			});

			GithubDataProvider.Instance.WeeklyCommitForRepo (owner, repo, data => {
				InvokeOnMainThread (() => {
					this._pageOne.WeeklyCommits.RenderData(data);
				});
			});

			GithubDataProvider.Instance.CodeFrequencyEntries (owner, repo, data => {
				InvokeOnMainThread (() => {
					this._pageOne.CodeFrequency.RenderData(data);
				});
			});

			GithubDataProvider.Instance.SummmaryForRepo (owner, repo, data => {
				InvokeOnMainThread (() => {
					this.repoSummary.RenderData(data);
				});
			});

			GithubDataProvider.Instance.Issues (owner, repo, data => {
				InvokeOnMainThread (() => {
					this._pageTwo.IssuesDataGrid.RenderData(data);
				});
			});

			GithubDataProvider.Instance.OpenMilestones (owner, repo, data => {
				InvokeOnMainThread (() => {
					this._pageTwo.MilestoneProgress.RenderData(data);
				});
			});

			// Check whether we need a new repo selector
			if (owner != _githubUserName) {
				_repoSelectorVC = null;
				_githubUserName = owner;
			}
		}

		public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations ()
		{
			return UIInterfaceOrientationMask.Landscape;
		}

	}
}


text:
package com.intellij.openapi.wm.impl.status;

import com.intellij.ide.util.GotoLineNumberDialog;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.editor.SelectionModel;
import com.intellij.openapi.editor.event.*;
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.StatusBar;
import com.intellij.openapi.wm.StatusBarWidget;
import com.intellij.ui.UIBundle;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;

import java.awt.*;
import java.awt.event.MouseEvent;

public class PositionPanel extends EditorBasedWidget implements StatusBarWidget.Multiframe, StatusBarWidget.TextPresentation, CaretListener, SelectionListener {
  private String myText;

  public PositionPanel(@NotNull final Project project) {
    super(project);
  }

  @Override
  public void selectionChanged(@NotNull FileEditorManagerEvent event) {
    updatePosition(getEditor());
  }

  @NotNull
  public String ID() {
    return "Position";
  }

  @Override
  public StatusBarWidget copy() {
    return new PositionPanel(getProject());
  }

  public WidgetPresentation getPresentation(@NotNull final PlatformType type) {
    return this;
  }

  @NotNull
  public String getText() {
    return myText == null ? "" : myText;
  }

  @NotNull
  public String getMaxPossibleText() {
    return "0000000000000";
  }

  @Override
  public float getAlignment() {
    return Component.CENTER_ALIGNMENT;
  }

  public String getTooltipText() {
    return UIBundle.message("go.to.line.command.double.click");
  }

  public Consumer<MouseEvent> getClickConsumer() {
    return new Consumer<MouseEvent>() {
      public void consume(MouseEvent mouseEvent) {
        final Project project = getProject();
        if (project == null) return;
        final Editor editor = getEditor();
        if (editor == null) return;
        final CommandProcessor processor = CommandProcessor.getInstance();
        processor.executeCommand(
                project, new Runnable() {
          public void run() {
            final GotoLineNumberDialog dialog = new GotoLineNumberDialog(project, editor);
            dialog.show();
            IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation();
          }
        },
                UIBundle.message("go.to.line.command.name"),
                null
        );
      }
    };
  }

  public void install(@NotNull StatusBar statusBar) {
    super.install(statusBar);
    final EditorEventMulticaster multicaster = EditorFactory.getInstance().getEventMulticaster();
    multicaster.addCaretListener(this, this);
    multicaster.addSelectionListener(this, this);
  }

  private static void appendLogicalPosition(LogicalPosition caret, StringBuilder message) {
    message.append(caret.line + 1);
    message.append(":");
    message.append(caret.column + 1);
  }

  @Override
  public void selectionChanged(final SelectionEvent e) {
    updatePosition(e.getEditor());
  }

  public void caretPositionChanged(final CaretEvent e) {
    updatePosition(e.getEditor());
  }

  @Override
  public void caretAdded(CaretEvent e) {
  }

  @Override
  public void caretRemoved(CaretEvent e) {
  }

  private void updatePosition(final Editor editor) {
    if (editor == null) {
      myText = "";
    }
    else {
      if (!isOurEditor(editor)) return;
      myText = getPositionText(editor);
    }
    myStatusBar.updateWidget(ID());
  }

  private String getPositionText(Editor editor) {
    if (!editor.isDisposed() && myStatusBar != null) {
      StringBuilder message = new StringBuilder();

      SelectionModel selectionModel = editor.getSelectionModel();
      if (selectionModel.hasBlockSelection()) {
        LogicalPosition start = selectionModel.getBlockStart();
        LogicalPosition end = selectionModel.getBlockEnd();
        if (start == null || end == null) {
          throw new IllegalStateException(String.format(
                  "Invalid selection model state detected: 'blockSelection' property is 'true' but selection start position (%s) or "
                  + "selection end position (%s) is undefined", start, end
          ));
        }
        appendLogicalPosition(start, message);
        message.append("-");
        appendLogicalPosition(
                new LogicalPosition(Math.abs(end.line - start.line), Math.max(0, Math.abs(end.column - start.column) - 1)),
                message
        );
      }
      else {
        LogicalPosition caret = editor.getCaretModel().getLogicalPosition();

        appendLogicalPosition(caret, message);
        if (selectionModel.hasSelection()) {
          int len = Math.abs(selectionModel.getSelectionStart() - selectionModel.getSelectionEnd());
          if (len != 0) message.append("/").append(len);
        }
      }

      return message.toString();
    }
    else {
      return "";
    }
  }
}


text:
<?php /** MicroRBAC */

namespace Micro\Auth\Drivers;

use Micro\Db\Adapter;
use Micro\Db\Drivers\IDriver;
use Micro\Mvc\Models\Query;

/**
 * Abstract RBAC class file.
 *
 * @author Oleg Lunegov <testuser@mail.linpax.org>
 * @link https://github.com/linpax/microphp-framework
 * @copyright Copyright (c) 2013 Oleg Lunegov
 * @license https://github.com/linpax/microphp-framework/blob/master/LICENSE
 * @package Micro
 * @subpackage Auth\Drivers
 * @version 1.0
 * @since 1.0
 */
abstract class Rbac implements Adapter
{
    /** @const integer TYPE_ROLE */
    const TYPE_ROLE = 0;
    /** @const integer TYPE_PERMISSION */
    const TYPE_PERMISSION = 1;
    /** @const integer TYPE_OPERATION */
    const TYPE_OPERATION = 2;

    /** @var IDriver $db */
    protected $db;

    /**
     * Based constructor for RBAC rules
     *
     * @access public
     *
     * @param Adapter $connection
     *
     * @result void
     */
    public function __construct(Adapter $connection)
    {
        $this->db = $connection->getDriver();

        if (!$this->db->tableExists('rbac_user')) {
            $this->db->createTable('rbac_user', [
                '`role` varchar(127) NOT NULL',
                '`user` int(10) unsigned NOT NULL',
                'UNIQUE KEY `name` (`name`,`user`)'
            ], 'ENGINE=MyISAM DEFAULT CHARSET=utf8');
        }
    }

    /**
     * Assign RBAC element into user
     *
     * @access public
     *
     * @param integer $userId user id
     * @param string $name element name
     *
     * @return bool
     */
    abstract public function assign($userId, $name);

    /**
     * Check privileges to operation
     *
     * @access public
     *
     * @param integer $userId user id
     * @param string $permission permission name
     * @param array $data action params
     *
     * @return boolean
     * @throws \Micro\Base\Exception
     */
    public function check($userId, $permission, array $data = [])
    {
        $rawRoles = $this->rawRoles();
        $tree = $this->tree($rawRoles);

        /** @var array $roles */
        $roles = $this->assigned($userId);
        if (!$roles) {
            return false;
        }

        foreach ($roles AS $role) {

            $actionRole = $this->searchRoleRecursive($tree, $role['name']);
            if ($actionRole) {
                /** @var array $trustRole */
                $trustRole = $this->searchRoleRecursive($actionRole, $permission);
                if ($trustRole) {
                    return $this->execute($trustRole[$permission], $data);
                }
            }
        }

        return false;
    }

    /**
     * Get raw roles
     *
     * @access public
     * @return mixed
     */
    abstract public function rawRoles();

    /**
     * Build tree from RBAC rules
     *
     * @access public
     *
     * @param array $elements elements array
     * @param string $parentId parent ID
     *
     * @return array
     */
    public function tree(&$elements, $parentId = '0')
    {
        $branch = [];
        foreach ($elements AS $key => $element) {
            if ($element['based'] === (string)$parentId) {
                $children = $this->tree($elements, $element['name']);

                if ($children) {
                    $element['childs'] = $children;
                }

                $branch[$element['name']] = $element;
                unset($elements[$key]);
            }
        }

        return $branch;
    }

    /**
     * Get assigned to user RBAC elements
     *
     * @access public
     *
     * @param integer $userId user ID
     *
     * @return mixed
     * @throws \Micro\Base\Exception
     */
    public function assigned($userId)
    {
        $query = new Query($this->db);
        $query->distinct = true;
        $query->select = $this->db->getDriverType() === 'pgsql' ? '"role" AS "name"' : '`role` AS `name`';
        $query->table = $this->db->getDriverType() === 'pgsql' ? '"rbac_user"' : '`rbac_user`';
        $query->addWhere(($this->db->getDriverType() === 'pgsql' ? '"user"=' : '`user`=').$userId);
        $query->single = false;

        return $query->run(\PDO::FETCH_ASSOC);
    }

    /**
     * Recursive search in roles array
     *
     * @access public
     *
     * @param array $roles elements
     * @param string $finder element name to search
     *
     * @return array|false
     */
    protected function searchRoleRecursive($roles, $finder)
    {
        $result = false;
        foreach ($roles AS $id => $role) {
            if ($id === $finder) {
                $result = [$id => $role];
                break;
            } else {
                if (!empty($role['childs'])) {
                    $result = $this->searchRoleRecursive($role['childs'], $finder);
                    break;
                }
            }
        }

        return $result;
    }

    /**
     * Execute rule
     *
     * @access public
     *
     * @param array $role element
     * @param array $data action params
     *
     * @return bool
     */
    public function execute(array $role, array $data)
    {
        if (!$role['data']) {
            return true;
        } else {
            extract($data, EXTR_OVERWRITE);

            return eval('return '.$role['data']);
        }
    }

    /**
     * Revoke RBAC element from user
     *
     * @access public
     *
     * @param integer $userId user id
     * @param string $name element name
     *
     * @return bool
     */
    public function revoke($userId, $name)
    {
        return $this->db->delete('rbac_user', 'name=:name AND user=:user',
            ['name' => $name, 'user' => $userId]);
    }
}


text:
package com.outworkers.phantom.builder.query

import scala.concurrent.ExecutionContext

package object execution {

  implicit class FunctorOps[F[_], T](val in: F[T])(implicit fMonad: FutureMonad[F]) {
    def zipWith[O, R](other: F[O])(fn: (T, O) => R)(
      implicit ctx: ExecutionContext
    ): F[R] = {
      for (r1 <- in; r2 <- other) yield fn(r1, r2)
    }

    def map[A](fn: T => A)(
      implicit ctx: ExecutionContext
    ): F[A] = fMonad.map(in)(fn)

    def flatMap[A](fn: T => F[A])(
      implicit ctx: ExecutionContext
    ): F[A] = fMonad.flatMap(in)(fn)
  }
}


text:
package com.amazonaws.services.macie2.model;

import java.io.Serializable;
import javax.annotation.Generated;

import com.amazonaws.AmazonWebServiceRequest;

/**
 *
 * @see AWS API
 *      Documentation
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class DescribeBucketsRequest extends com.amazonaws.AmazonWebServiceRequest implements Serializable, Cloneable {

    /**
     *

     * The criteria to use to filter the query results.
     *

     */
    private java.util.Map<String, BucketCriteriaAdditionalProperties> criteria;
    /**
     *

     * The maximum number of items to include in each page of the response. The default value is 50.
     *

     */
    private Integer maxResults;
    /**
     *

     * The nextToken string that specifies which page of results to return in a paginated response.
     *

     */
    private String nextToken;
    /**
     *

     * The criteria to use to sort the query results.
     *

     */
    private BucketSortCriteria sortCriteria;

    /**
     *

     * The criteria to use to filter the query results.
     *

     *
     * @return The criteria to use to filter the query results.
     */

    public java.util.Map<String, BucketCriteriaAdditionalProperties> getCriteria() {
        return criteria;
    }

    /**
     *

     * The criteria to use to filter the query results.
     *

     *
     * @param criteria
     *        The criteria to use to filter the query results.
     */

    public void setCriteria(java.util.Map<String, BucketCriteriaAdditionalProperties> criteria) {
        this.criteria = criteria;
    }

    /**
     *

     * The criteria to use to filter the query results.
     *

     *
     * @param criteria
     *        The criteria to use to filter the query results.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DescribeBucketsRequest withCriteria(java.util.Map<String, BucketCriteriaAdditionalProperties> criteria) {
        setCriteria(criteria);
        return this;
    }

    /**
     * Add a single Criteria entry
     *
     * @see DescribeBucketsRequest#withCriteria
     * @returns a reference to this object so that method calls can be chained together.
     */

    public DescribeBucketsRequest addCriteriaEntry(String key, BucketCriteriaAdditionalProperties value) {
        if (null == this.criteria) {
            this.criteria = new java.util.HashMap<String, BucketCriteriaAdditionalProperties>();
        }
        if (this.criteria.containsKey(key))
            throw new IllegalArgumentException("Duplicated keys (" + key.toString() + ") are provided.");
        this.criteria.put(key, value);
        return this;
    }

    /**
     * Removes all the entries added into Criteria.
     *
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DescribeBucketsRequest clearCriteriaEntries() {
        this.criteria = null;
        return this;
    }

    /**
     *

     * The maximum number of items to include in each page of the response. The default value is 50.
     *

     *
     * @param maxResults
     *        The maximum number of items to include in each page of the response. The default value is 50.
     */

    public void setMaxResults(Integer maxResults) {
        this.maxResults = maxResults;
    }

    /**
     *

     * The maximum number of items to include in each page of the response. The default value is 50.
     *

     *
     * @return The maximum number of items to include in each page of the response. The default value is 50.
     */

    public Integer getMaxResults() {
        return this.maxResults;
    }

    /**
     *

     * The maximum number of items to include in each page of the response. The default value is 50.
     *

     *
     * @param maxResults
     *        The maximum number of items to include in each page of the response. The default value is 50.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DescribeBucketsRequest withMaxResults(Integer maxResults) {
        setMaxResults(maxResults);
        return this;
    }

    /**
     *

     * The nextToken string that specifies which page of results to return in a paginated response.
     *

     *
     * @param nextToken
     *        The nextToken string that specifies which page of results to return in a paginated response.
     */

    public void setNextToken(String nextToken) {
        this.nextToken = nextToken;
    }

    /**
     *

     * The nextToken string that specifies which page of results to return in a paginated response.
     *

     *
     * @return The nextToken string that specifies which page of results to return in a paginated response.
     */

    public String getNextToken() {
        return this.nextToken;
    }

    /**
     *

     * The nextToken string that specifies which page of results to return in a paginated response.
     *

     *
     * @param nextToken
     *        The nextToken string that specifies which page of results to return in a paginated response.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DescribeBucketsRequest withNextToken(String nextToken) {
        setNextToken(nextToken);
        return this;
    }

    /**
     *

     * The criteria to use to sort the query results.
     *

     *
     * @param sortCriteria
     *        The criteria to use to sort the query results.
     */

    public void setSortCriteria(BucketSortCriteria sortCriteria) {
        this.sortCriteria = sortCriteria;
    }

    /**
     *

     * The criteria to use to sort the query results.
     *

     *
     * @return The criteria to use to sort the query results.
     */

    public BucketSortCriteria getSortCriteria() {
        return this.sortCriteria;
    }

    /**
     *

     * The criteria to use to sort the query results.
     *

     *
     * @param sortCriteria
     *        The criteria to use to sort the query results.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public DescribeBucketsRequest withSortCriteria(BucketSortCriteria sortCriteria) {
        setSortCriteria(sortCriteria);
        return this;
    }

    /**
     * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
     * redacted from this string using a placeholder value.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getCriteria() != null)
            sb.append("Criteria: ").append(getCriteria()).append(",");
        if (getMaxResults() != null)
            sb.append("MaxResults: ").append(getMaxResults()).append(",");
        if (getNextToken() != null)
            sb.append("NextToken: ").append(getNextToken()).append(",");
        if (getSortCriteria() != null)
            sb.append("SortCriteria: ").append(getSortCriteria());
        sb.append("}");
        return sb.toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (obj instanceof DescribeBucketsRequest == false)
            return false;
        DescribeBucketsRequest other = (DescribeBucketsRequest) obj;
        if (other.getCriteria() == null ^ this.getCriteria() == null)
            return false;
        if (other.getCriteria() != null && other.getCriteria().equals(this.getCriteria()) == false)
            return false;
        if (other.getMaxResults() == null ^ this.getMaxResults() == null)
            return false;
        if (other.getMaxResults() != null && other.getMaxResults().equals(this.getMaxResults()) == false)
            return false;
        if (other.getNextToken() == null ^ this.getNextToken() == null)
            return false;
        if (other.getNextToken() != null && other.getNextToken().equals(this.getNextToken()) == false)
            return false;
        if (other.getSortCriteria() == null ^ this.getSortCriteria() == null)
            return false;
        if (other.getSortCriteria() != null && other.getSortCriteria().equals(this.getSortCriteria()) == false)
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;

        hashCode = prime * hashCode + ((getCriteria() == null) ? 0 : getCriteria().hashCode());
        hashCode = prime * hashCode + ((getMaxResults() == null) ? 0 : getMaxResults().hashCode());
        hashCode = prime * hashCode + ((getNextToken() == null) ? 0 : getNextToken().hashCode());
        hashCode = prime * hashCode + ((getSortCriteria() == null) ? 0 : getSortCriteria().hashCode());
        return hashCode;
    }

    @Override
    public DescribeBucketsRequest clone() {
        return (DescribeBucketsRequest) super.clone();
    }

}


text:
.class Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;
.super Ljava/lang/Object;
.source "MediaBrowserServiceCompat.java"

# interfaces
.implements Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImpl;
.implements Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ServiceCompatProxy;

# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Landroid/support/v4/media/MediaBrowserServiceCompat;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = "MediaBrowserServiceImplApi21"
.end annotation

# instance fields
.field mMessenger:Landroid/os/Messenger;

.field mServiceObj:Ljava/lang/Object;

.field final synthetic this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

# direct methods
.method constructor <init>(Landroid/support/v4/media/MediaBrowserServiceCompat;)V
    .locals 0
    .param p1, "this$0"    # Landroid/support/v4/media/MediaBrowserServiceCompat;

    .prologue
    .line 225
    iput-object p1, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

# virtual methods
.method public getBrowserRootHints()Landroid/os/Bundle;
    .locals 2

    .prologue
    const/4 v0, 0x0

    .line 275
    iget-object v1, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mMessenger:Landroid/os/Messenger;

    if-nez v1, :cond_1

    .line 283
    :cond_0
    :goto_0
    return-object v0

    .line 279
    :cond_1
    iget-object v1, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    iget-object v1, v1, Landroid/support/v4/media/MediaBrowserServiceCompat;->mCurConnection:Landroid/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord;

    if-nez v1, :cond_2

    .line 280
    new-instance v0, Ljava/lang/IllegalStateException;

    const-string v1, "This should be called inside of onLoadChildren or onLoadItem methods"

    invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 283
    :cond_2
    iget-object v1, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    iget-object v1, v1, Landroid/support/v4/media/MediaBrowserServiceCompat;->mCurConnection:Landroid/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord;

    iget-object v1, v1, Landroid/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord;->rootHints:Landroid/os/Bundle;

    if-eqz v1, :cond_0

    new-instance v0, Landroid/os/Bundle;

    iget-object v1, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    iget-object v1, v1, Landroid/support/v4/media/MediaBrowserServiceCompat;->mCurConnection:Landroid/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord;

    iget-object v1, v1, Landroid/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord;->rootHints:Landroid/os/Bundle;

    invoke-direct {v0, v1}, Landroid/os/Bundle;-><init>(Landroid/os/Bundle;)V

    goto :goto_0
.end method

.method public notifyChildrenChanged(Ljava/lang/String;Landroid/os/Bundle;)V
    .locals 2
    .param p1, "parentId"    # Ljava/lang/String;
    .param p2, "options"    # Landroid/os/Bundle;

    .prologue
    .line 249
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mMessenger:Landroid/os/Messenger;

    if-nez v0, :cond_0

    .line 250
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mServiceObj:Ljava/lang/Object;

    invoke-static {v0, p1}, Landroid/support/v4/media/MediaBrowserServiceCompatApi21;->notifyChildrenChanged(Ljava/lang/Object;Ljava/lang/String;)V

    .line 271
    :goto_0
    return-void

    .line 252
    :cond_0
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    iget-object v0, v0, Landroid/support/v4/media/MediaBrowserServiceCompat;->mHandler:Landroid/support/v4/media/MediaBrowserServiceCompat$ServiceHandler;

    new-instance v1, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$1;

    invoke-direct {v1, p0, p1, p2}, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$1;-><init>(Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;Ljava/lang/String;Landroid/os/Bundle;)V

    invoke-virtual {v0, v1}, Landroid/support/v4/media/MediaBrowserServiceCompat$ServiceHandler;->post(Ljava/lang/Runnable;)Z

    goto :goto_0
.end method

.method public onBind(Landroid/content/Intent;)Landroid/os/IBinder;
    .locals 1
    .param p1, "intent"    # Landroid/content/Intent;

    .prologue
    .line 239
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mServiceObj:Ljava/lang/Object;

    invoke-static {v0, p1}, Landroid/support/v4/media/MediaBrowserServiceCompatApi21;->onBind(Ljava/lang/Object;Landroid/content/Intent;)Landroid/os/IBinder;

    move-result-object v0

    return-object v0
.end method

.method public onCreate()V
    .locals 1

    .prologue
    .line 232
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    invoke-static {v0, p0}, Landroid/support/v4/media/MediaBrowserServiceCompatApi21;->createService(Landroid/content/Context;Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ServiceCompatProxy;)Ljava/lang/Object;

    move-result-object v0

    iput-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mServiceObj:Ljava/lang/Object;

    .line 234
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mServiceObj:Ljava/lang/Object;

    invoke-static {v0}, Landroid/support/v4/media/MediaBrowserServiceCompatApi21;->onCreate(Ljava/lang/Object;)V

    .line 235
    return-void
.end method

.method public onGetRoot(Ljava/lang/String;ILandroid/os/Bundle;)Landroid/support/v4/media/MediaBrowserServiceCompatApi21$BrowserRoot;
    .locals 4
    .param p1, "clientPackageName"    # Ljava/lang/String;
    .param p2, "clientUid"    # I
    .param p3, "rootHints"    # Landroid/os/Bundle;

    .prologue
    .line 289
    const/4 v1, 0x0

    .line 290
    .local v1, "rootExtras":Landroid/os/Bundle;
    if-eqz p3, :cond_0

    const-string v2, "extra_client_version"

    const/4 v3, 0x0

    invoke-virtual {p3, v2, v3}, Landroid/os/Bundle;->getInt(Ljava/lang/String;I)I

    move-result v2

    if-eqz v2, :cond_0

    .line 291
    const-string v2, "extra_client_version"

    invoke-virtual {p3, v2}, Landroid/os/Bundle;->remove(Ljava/lang/String;)V

    .line 292
    new-instance v2, Landroid/os/Messenger;

    iget-object v3, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    iget-object v3, v3, Landroid/support/v4/media/MediaBrowserServiceCompat;->mHandler:Landroid/support/v4/media/MediaBrowserServiceCompat$ServiceHandler;

    invoke-direct {v2, v3}, Landroid/os/Messenger;-><init>(Landroid/os/Handler;)V

    iput-object v2, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mMessenger:Landroid/os/Messenger;

    .line 293
    new-instance v1, Landroid/os/Bundle;

    .end local v1    # "rootExtras":Landroid/os/Bundle;
    invoke-direct {v1}, Landroid/os/Bundle;-><init>()V

    .line 294
    .restart local v1    # "rootExtras":Landroid/os/Bundle;
    const-string v2, "extra_service_version"

    const/4 v3, 0x1

    invoke-virtual {v1, v2, v3}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V

    .line 295
    const-string v2, "extra_messenger"

    iget-object v3, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mMessenger:Landroid/os/Messenger;

    invoke-virtual {v3}, Landroid/os/Messenger;->getBinder()Landroid/os/IBinder;

    move-result-object v3

    invoke-static {v1, v2, v3}, Landroid/support/v4/app/BundleCompat;->putBinder(Landroid/os/Bundle;Ljava/lang/String;Landroid/os/IBinder;)V

    .line 297
    :cond_0
    iget-object v2, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    invoke-virtual {v2, p1, p2, p3}, Landroid/support/v4/media/MediaBrowserServiceCompat;->onGetRoot(Ljava/lang/String;ILandroid/os/Bundle;)Landroid/support/v4/media/MediaBrowserServiceCompat$BrowserRoot;

    move-result-object v0

    .line 299
    .local v0, "root":Landroid/support/v4/media/MediaBrowserServiceCompat$BrowserRoot;
    if-nez v0, :cond_1

    .line 300
    const/4 v2, 0x0

    .line 308
    :goto_0
    return-object v2

    .line 302
    :cond_1
    if-nez v1, :cond_3

    .line 303
    invoke-virtual {v0}, Landroid/support/v4/media/MediaBrowserServiceCompat$BrowserRoot;->getExtras()Landroid/os/Bundle;

    move-result-object v1

    .line 307
    :cond_2
    :goto_1
    new-instance v2, Landroid/support/v4/media/MediaBrowserServiceCompatApi21$BrowserRoot;

    .line 308
    invoke-virtual {v0}, Landroid/support/v4/media/MediaBrowserServiceCompat$BrowserRoot;->getRootId()Ljava/lang/String;

    move-result-object v3

    invoke-direct {v2, v3, v1}, Landroid/support/v4/media/MediaBrowserServiceCompatApi21$BrowserRoot;-><init>(Ljava/lang/String;Landroid/os/Bundle;)V

    goto :goto_0

    .line 304
    :cond_3
    invoke-virtual {v0}, Landroid/support/v4/media/MediaBrowserServiceCompat$BrowserRoot;->getExtras()Landroid/os/Bundle;

    move-result-object v2

    if-eqz v2, :cond_2

    .line 305
    invoke-virtual {v0}, Landroid/support/v4/media/MediaBrowserServiceCompat$BrowserRoot;->getExtras()Landroid/os/Bundle;

    move-result-object v2

    invoke-virtual {v1, v2}, Landroid/os/Bundle;->putAll(Landroid/os/Bundle;)V

    goto :goto_1
.end method

.method public onLoadChildren(Ljava/lang/String;Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper;)V
    .locals 2
    .param p1, "parentId"    # Ljava/lang/String;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            "Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper",
            "<",
            "Ljava/util/List",
            "<",
            "Landroid/os/Parcel;",
            ">;>;)V"
        }
    .end annotation

    .prologue
    .line 314
    .local p2, "resultWrapper":Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper;, "Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper<Ljava/util/List<Landroid/os/Parcel;>;>;"
    new-instance v0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$2;

    invoke-direct {v0, p0, p1, p2}, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$2;-><init>(Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;Ljava/lang/Object;Landroid/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper;)V

    .line 335
    .local v0, "result":Landroid/support/v4/media/MediaBrowserServiceCompat$Result;, "Landroid/support/v4/media/MediaBrowserServiceCompat$Result<Ljava/util/List<Landroid/support/v4/media/MediaBrowserCompat$MediaItem;>;>;"
    iget-object v1, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->this$0:Landroid/support/v4/media/MediaBrowserServiceCompat;

    invoke-virtual {v1, p1, v0}, Landroid/support/v4/media/MediaBrowserServiceCompat;->onLoadChildren(Ljava/lang/String;Landroid/support/v4/media/MediaBrowserServiceCompat$Result;)V

    .line 336
    return-void
.end method

.method public setSessionToken(Landroid/support/v4/media/session/MediaSessionCompat$Token;)V
    .locals 2
    .param p1, "token"    # Landroid/support/v4/media/session/MediaSessionCompat$Token;

    .prologue
    .line 244
    iget-object v0, p0, Landroid/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21;->mServiceObj:Ljava/lang/Object;

    invoke-virtual {p1}, Landroid/support/v4/media/session/MediaSessionCompat$Token;->getToken()Ljava/lang/Object;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/support/v4/media/MediaBrowserServiceCompatApi21;->setSessionToken(Ljava/lang/Object;Ljava/lang/Object;)V

    .line 245
    return-void
.end method


text:
package gov.lbl.superlu;

import gov.lbl.superlu.Dlu_pdsp_defs.pxgstrf_shared_t;
import gov.lbl.superlu.Dlu_pxgstrf_synch.queue_t;
import gov.lbl.superlu.Dlu_slu_mt_util.Gstat_t;

import static gov.lbl.superlu.Dlu_slu_mt_util.EMPTY;
import static gov.lbl.superlu.Dlu_slu_mt_util.STATE;
import static gov.lbl.superlu.Dlu_slu_mt_util.DADPANEL;
import static gov.lbl.superlu.Dlu_slu_mt_util.TIC;
import static gov.lbl.superlu.Dlu_slu_mt_util.TOC;
import static gov.lbl.superlu.Dlu_slu_mt_util.how_selected_t.DADPAN;
import static gov.lbl.superlu.Dlu_slu_mt_util.how_selected_t.PIPE;
import static gov.lbl.superlu.Dlu_slu_mt_util.how_selected_t.NOPIPE;

import static gov.lbl.superlu.Dlu_pxgstrf_synch.lu_locks_t.SCHED_LOCK;
import static gov.lbl.superlu.Dlu_pxgstrf_synch.pipe_state_t.BUSY;
import static gov.lbl.superlu.Dlu_pxgstrf_synch.pipe_state_t.CANGO;
import static gov.lbl.superlu.Dlu_pxgstrf_synch.pipe_state_t.CANPIPE;
import static gov.lbl.superlu.Dlu_pxgstrf_synch.pipe_state_t.DONE;
import static gov.lbl.superlu.Dlu_pxgstrf_synch.panel_t.TREE_DOMAIN;

import static gov.lbl.superlu.Dlu.DOMAINS;
import static gov.lbl.superlu.Dlu.PROFILE;
import static gov.lbl.superlu.Dlu.DEBUG;
import static gov.lbl.superlu.Dlu.POSTORDER;
import static gov.lbl.superlu.Dlu.printf;

import static gov.lbl.superlu.Dlu_superlu_timer.SuperLU_timer_;

public class Dlu_pxgstrf_scheduler {

	static
	void
	pxgstrf_scheduler(final int pnum, final int n, final int etree[],
			  int cur_pan[], int bcol[], pxgstrf_shared_t pxgstrf_shared)
	{
	/*
	 * -- SuperLU MT routine (version 1.0) --
	 * Univ. of California Berkeley, Xerox Palo Alto Research Center,
	 * and Lawrence Berkeley National Lab.
	 * August 15, 1997
	 *
	 * Purpose
	 * =======
	 *
	 * pxgstrf_scheduler() gets a panel for the processor to work on.
	 * It schedules a panel in decreasing order of priority:
	 *   (1) the current panel's parent, if it can be done without pipelining
	 *   (2) any other panel in the queue that can be done without pipelining
	 *       ("CANGO" status)
	 *   (3) any other panel in the queue that can be done with pipelining
	 *       ("CANPIPE" status)
	 *
	 * Arguments
	 * =========
	 * pnum    (input) int
	 *         Processor number.
	 *
	 * n       (input) int
	 *         Column dimension of the matrix.
	 *
	 * etree   (input) int*
	 *         Elimination tree of A'*A, size n.
	 *         Note: etree is a vector of parent pointers for a forest whose
	 *         vertices are the integers 0 to n-1; etree[root] = n.
	 *
	 * cur_pan (input/output) int*
	 *         On entry, the current panel just finished by this processor;
	 *         On exit, [0, n-1]: the new panel to work on;
	 *                  EMPTY:    failed to get any work, will try later;
	 *                  n:        all panels are taken; ready to terminate.
	 *
	 * taskq   (input/output) queue_t*
	 *         Global work queue.
	 *
	 * fb_cols (input/output) int*
	 *         The farthest busy descendant of each (leading column of the) panel.
	 *
	 * bcol    (output) int*
	 *         The most distant busy descendant of cur_pan in the *linear*
	 *         pipeline of busy descendants. If all proper descendants of
	 *         cur_pan are done, bcol is returned equal to cur_pan.
	 *
	 * Defining terms
	 * ==============
	 *   o parent(panel) = etree(last column in the panel)
	 *   o the kids of a panel = collective kids of all columns in the panel
	 *     kids[REP] = SUM_{j in panel} ( kids[j] )
	 *   o linear pipeline - what does it mean in the panel context?
	 *       if ukids[REP] = 0, then the panel becomes a leaf (CANGO)
	 *       if ukids[REP] = 1 && ukids[firstcol] = 1, then the panel can
	 *                       be taken with pipelining (CANPIPE)
	 *
	 * NOTES
	 * =====
	 *   o When a "busy" panel finishes, if its parent has only one remaining
	 *     undone child there is no check to see if the parent should change
	 *     from "unready" to "canpipe". Thus a few potential pipelinings will
	 *     be lost, but checking out this pipeline opportunity may be costly.
	 *
	 */

	    int dad = 0, dad_ukids, jcol, w, j = 0;
	    int fb_cols[] = pxgstrf_shared.fb_cols;
	    queue_t taskq = pxgstrf_shared.taskq;
	    Gstat_t Gstat = pxgstrf_shared.Gstat;
	    double[] t = new double[1];

	    jcol = cur_pan[0];
	    if ( jcol != EMPTY ) {
	if (DOMAINS) {
		throw new UnsupportedOperationException();
//		if ( in_domain[jcol] == TREE_DOMAIN )
//		    dad = etree[jcol];
//		else
//			dad = DADPANEL(etree, pxgstrf_shared, jcol);
	} else {
		dad = DADPANEL(etree, pxgstrf_shared, jcol);
	}
	    }

	    /* w_top = sp_ienv(1)/2;
	       if ( w_top == 0 ) w_top = 1;*/

	if (PROFILE) {
	    TIC(t);
	}
	    synchronized ( pxgstrf_shared.lu_locks[SCHED_LOCK.ordinal()] )

	{   /* ---- START CRITICAL SECTION ---- */

	    /* Update the status of the current panel and its parent, so that
	     * the other processors waiting on it can proceed.
	     * If all siblings are done, and dad is not busy, then take dad.
	     */
	    if ( jcol != EMPTY ) { /* jcol was just finished by this processor */
		dad_ukids = --pxgstrf_shared.pan_status[dad].ukids;

	if (DEBUG) {
		printf("(%d) DONE %d in Scheduler(), dad %d, STATE %d, dad_ukids %d\n",
		       pnum, jcol, dad, STATE(pxgstrf_shared, dad), dad_ukids);
	}

		if ( dad_ukids == 0 && STATE(pxgstrf_shared, dad) > BUSY.ordinal() ) { /* dad not started */
		    jcol = dad;
	if (DEBUG) {
		    printf("(%d) Scheduler[1] Got dad %d, STATE %d\n",
			   pnum, jcol, STATE(pxgstrf_shared, dad));
	}
	if (PROFILE) {
		    ++(Gstat.panhows[DADPAN.ordinal()]);
	}
		} else {
		    /* Try to get a panel from the task Q. */
		    while ( true ) {
			/*>>if ( (j = Dequeue(taskq, &item)) == EMPTY ) {*/
			if ( taskq.count <= 0 ) {
			    jcol = EMPTY;
			    break;
			} else {
			    jcol = taskq.queue[taskq.head++];
			    --taskq.count;
			    if ( STATE(pxgstrf_shared, jcol) >= CANGO.ordinal() ) { /* CANGO or CANPIPE */
	if (DEBUG) {
				printf("(%d) Dequeue[1] Got %d, STATE %d, Qcount %d\n",
				       pnum, jcol, STATE(pxgstrf_shared, jcol), j);
	}
	if (PROFILE) {
				if (STATE(pxgstrf_shared, jcol) == CANGO.ordinal()) ++(Gstat.panhows[NOPIPE.ordinal()]);
				else ++(Gstat.panhows[PIPE.ordinal()]);
	}
			        break;
			    }
			}
		    } /* while */
		}
	    } else {
		/*
		 * jcol was EMPTY; Try to get a panel from the task Q.
		 */
	    	while ( true ) {
	    	    /*>>if ( (j = Dequeue(taskq, &item)) == EMPTY ) {*/
		    if ( taskq.count <= 0 ) {
			jcol = EMPTY;
			break;
		    } else {
			jcol = taskq.queue[taskq.head++];
			--taskq.count;
			if ( STATE(pxgstrf_shared, jcol) >= CANGO.ordinal() ) { /* CANGO or CANPIPE */
	if (DEBUG) {
			    printf("(%d) Dequeue[2] Got %d, STATE %d, Qcount %d\n",
				   pnum, jcol, STATE(pxgstrf_shared, jcol), j);
	}
	if (PROFILE) {
			    if (STATE(pxgstrf_shared, jcol) == CANGO.ordinal()) ++(Gstat.panhows[NOPIPE.ordinal()]);
			    else ++(Gstat.panhows[PIPE.ordinal()]);
	}
			    break;
			}
		    }
		} /* while */
	    }

	    /*
	     * Update the status of the new panel "jcol" and its parent "dad".
	     */
	    if ( jcol != EMPTY ) {
		    --pxgstrf_shared.tasks_remain;
	if (DOMAINS) {
		throw new UnsupportedOperationException();
//		if ( in_domain[jcol] == TREE_DOMAIN ) {
//		    /* Dequeue the first descendant of this domain */
//		    bcol[0] = taskq.queue[taskq.head++];
//		    --taskq.count;
//		} else
	}
//		{
		    //STATE(pxgstrf_shared, jcol) = BUSY;
		    pxgstrf_shared.pan_status[jcol].state = BUSY;
		    w = pxgstrf_shared.pan_status[jcol].size;

		    for (j = jcol; j < jcol+w; ++j) pxgstrf_shared.spin_locks[j] = 1;
		    dad = DADPANEL(etree, pxgstrf_shared, jcol);
		    if ( dad < n && pxgstrf_shared.pan_status[dad].ukids == 1 ) {
			//STATE( dad ) = CANPIPE;
			pxgstrf_shared.pan_status[dad].state = CANPIPE;
			/*>> j = Enqueue(taskq, dad);*/
			taskq.queue[taskq.tail++] = dad;
			++taskq.count;
	if (DEBUG) {
			printf("(%d) Enqueue() %d's dad %d .CANPIPE, Qcount %d\n",
			       pnum, jcol, dad, j);
	}
//		    }

	if (PROFILE) {
		    Gstat.procstat[pnum].panels++;
	}

		    /* Find the farthest busy descendant of the new panel
		       and its parent.*/
		    bcol[0] = fb_cols[jcol];
	if (DEBUG) {
		    printf("(%d) Scheduler[2] fb_cols[%d]=%d, STATE %d\n",
			   pnum, jcol, bcol[0], STATE(pxgstrf_shared, bcol[0]));
	}
		    while ( STATE(pxgstrf_shared, bcol[0]) == DONE.ordinal() ) bcol[0] = DADPANEL(etree, pxgstrf_shared, bcol[0]);
		    fb_cols[dad] = bcol[0];

		} /* else regular_panel */

	    } /* if jcol != empty */

	    cur_pan[0] = jcol;

	if (DEBUG) {
	    printf("(%d) Exit C.S. tasks_remain %d, cur_pan %d\n",
		   pnum, pxgstrf_shared.tasks_remain, jcol);
	}

	} /* ---- END CRITICAL SECTION ---- */

	if (PROFILE) {
	    Gstat.procstat[pnum].cs_time += SuperLU_timer_() - t[0];
	}

	    return;
	}

	/* Fix the order of the panels to be taken. */
	static
	void
	Preorder(final int pnum, final int n, final int etree[], int cur_pan[],
	         queue_t taskq, int fb_cols[], int bcol[],
		 pxgstrf_shared_t pxgstrf_shared)
	{
	    int w, dad, dad_ukids;

	POSTORDER = false;
	if (POSTORDER) {
	    if ( cur_pan[0] == EMPTY ) {
		cur_pan[0] = 0;
	    } else {
		w = pxgstrf_shared.pan_status[cur_pan[0]].size;
		cur_pan[0] += w;
	    }
	} else { /* Breadth-first bottom up */
	    if ( cur_pan[0] != EMPTY ) {
		dad = DADPANEL(etree, pxgstrf_shared, cur_pan[0]);
		dad_ukids = --pxgstrf_shared.pan_status[dad].ukids;
		if ( dad_ukids == 0 ) {
		    taskq.queue[taskq.tail++] = dad;
		    ++taskq.count;
		}
	    }
	    cur_pan[0] = taskq.queue[taskq.head++];
	    --taskq.count;
	}
	    --pxgstrf_shared.tasks_remain;
	    bcol[0] = cur_pan[0];
	}

}


text:
/* eslint no-undef: "off" */

import _getState from '../getState';

export default function(stateKey, params, options) {
  const getState = _getState(
    lore.actions,
    lore.config.connect.blueprints,
    lore.config.connect.reducerActionMap
  );

  const state = lore.store.getState();
  return getState(state, stateKey, params, options);
}