commit 5483c9517dcaf604b14abd416bd92713e5f54aab Author: franknstayn Date: Sat Jul 3 18:39:08 2021 +0800 first commit diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..95e5d81 --- /dev/null +++ b/.env.example @@ -0,0 +1,18 @@ +APP_ENV=local +APP_DEBUG=true +APP_KEY=SomeRandomString + +DB_HOST=localhost +DB_DATABASE=homestead +DB_USERNAME=homestead +DB_PASSWORD=secret + +CACHE_DRIVER=file +SESSION_DRIVER=file +QUEUE_DRIVER=sync + +MAIL_DRIVER=smtp +MAIL_HOST=mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..95883de --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto +*.css linguist-vendored +*.less linguist-vendored diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c47965c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/vendor +/node_modules +.env diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..557db7e --- /dev/null +++ b/.htaccess @@ -0,0 +1,14 @@ + + + Options -MultiViews + + RewriteEngine On + # Redirect Trailing Slashes... + RewriteRule ^(.*)/$public /$1 [L,R=301] + RewriteCond %{SERVER_PORT} 80 + #RewriteRule ^(.*)$ https://www.crewsportswear.com/beta/$1 [R,L] + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/app/Commands/Command.php b/app/Commands/Command.php new file mode 100644 index 0000000..018bc21 --- /dev/null +++ b/app/Commands/Command.php @@ -0,0 +1,7 @@ +comment(PHP_EOL.Inspiring::quote().PHP_EOL); + } + +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..0c088c8 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,29 @@ +command('inspire') + ->hourly(); + } + +} diff --git a/app/Events/Event.php b/app/Events/Event.php new file mode 100644 index 0000000..d59f769 --- /dev/null +++ b/app/Events/Event.php @@ -0,0 +1,7 @@ +all(); + $response = $ApiModel->loginProductionUser($post['username'], $post['password']); + + + if (!$response) { + return response()->json(['status' => false, 'message' => "Invalid user"], 401); + } + + $selectTrackingStepLabel = $ApiModel->selectTrackingStepLabel($response[0]->StepId); + $response[0]->AssignedStep = $selectTrackingStepLabel[0]->StepLabel; + return response()->json(['status' => true, 'data' => $response[0]], 200); + } + + public function insert(Request $request) + { + $ApiModel = new ApiModel; + $post = $request->json()->all(); + + $data = array( + "StepId" => $post['StepId'], + "ScannedBy" => $post['ScannedBy'], + "InvoiceNumber" => $post['invoice'], + "OrdersId" => $post['ordersId'], + "ProductId" => $post['productId'], + "QuantityCounter" => $post['quantityCounter'], + "Timezone" => $post['timezone'], + "TimezoneOffset" => date('H:i:s', strtotime($post['timezoneOffset'])), + "DeviceId" => $post['deviceId'], + "created_at" => date('Y-m-d H:i:s', strtotime($post['datetime'])) + ); + + + $checkIfTrackExist = $ApiModel->checkIfTrackExist($post['StepId'], $post['productId'], $post['ordersId'], $post['invoice'], $post['quantityCounter']); + if ($checkIfTrackExist) { + return response()->json(['status' => false, 'message' => "Already scanned."], 500); + } + + // $selectNextStep = $ApiModel->selectNextStep($post['invoice']); + + // if(($selectNextStep->StepId + 1) != $post['StepId']){ + // return response()->json(['status' => false, 'message' => "Your account is not allowed to update this item."], 401); + // } + + $response = $ApiModel->insertTracking($data); + + if (!$response) { + return response()->json(['status' => false, 'message' => "Something went wrong."], 500); + } + + return response()->json(['status' => true, 'message' => 'Successfully updated.'], 201); + } + + // public function getTrackingStatus() + // { + // $ApiModel = new ApiModel; + // $invoice = Input::get('invoice'); + // $response = $ApiModel->getTrackingStatus($invoice); + // return response()->json(['status' => true, 'data' => $response], 200); + // } + + public function getTrackingStatus() + { + $ApiModel = new ApiModel; + $invoice = Input::get('invoice'); + $getStep = Input::get('step'); + + + // $response = $ApiModel->getTrackingStatus($invoice); + $selectPaymentDetails = $ApiModel->selectPaymentDetails($invoice); + if (!$selectPaymentDetails) { + return response()->json(['status' => false, 'message' => "Not found."], 404); + } + + $selectOrderList = $ApiModel->selectOrderList($selectPaymentDetails[0]->CartKey); + $getCurrentTrackingSteps = $ApiModel->getCurrentTrackingSteps($invoice); + $selectPaymentDetails[0]->tracking_steps = $getCurrentTrackingSteps; + $currentStep = $ApiModel->selectCurrentStep($invoice); + $selectPaymentDetails[0]->current_step = $currentStep; + + $stp = ($getStep != "") ? $getStep : $currentStep->Order; // check if step + foreach ($selectOrderList as $k => $order) { + $table_fields[] = $ApiModel->selectOrderListTableFields($order->CartKey, $order->ProductId, $stp); + $product_images[] = $ApiModel->selectProductImages($order->ProductId); + + $selectOrderList[$k]->table_fields = $table_fields[$k]; + $selectOrderList[$k]->product_images = $product_images[$k]; + } + + return response()->json([ + 'status' => true, + 'payment_details' => $selectPaymentDetails[0], + 'order_list' => $selectOrderList + ], 200); + } + + public function getOrderStatus() + { + $ApiModel = new ApiModel; + $invoice = Input::get('invoice'); + $productid = Input::get('productid'); + $orderid = Input::get('orderid'); + $qcounter = Input::get('qcounter'); + + $getStatus = $ApiModel->getStatus($invoice, $productid, $orderid, $qcounter); + + if (!$getStatus) { + return response()->json(['status' => false, 'data' => ""], 404); + } + + return response()->json([ + 'status' => true, + 'data' => $getStatus[0] + ], 200); + } + + public function getSteps(){ + $ApiModel = new ApiModel; + $selectSteps = $ApiModel->selectSteps(); + + if (!$selectSteps) { + return response()->json(['status' => false, 'data' => ""], 404); + } + + return response()->json([ + 'status' => true, + 'data' => $selectSteps + ], 200); + + } +} diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php new file mode 100644 index 0000000..8697b6e --- /dev/null +++ b/app/Http/Controllers/Auth/AuthController.php @@ -0,0 +1,40 @@ +auth = $auth; + $this->registrar = $registrar; + + $this->middleware('guest', ['except' => 'getLogout']); + } + +} diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..7a40339 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,39 @@ +auth = $auth; + $this->passwords = $passwords; + + $this->middleware('guest'); + } + +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..27b3f45 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,11 @@ +all(); + $email = $post['email']; + $password = $post['password']; + + if (Auth::attempt(['email' => $email, 'password' => $password])){ + + if (Auth::user()->role == 'admin') { + $message = ' +
+ +

ERROR:

+ You are not allowed to enter to this site. +
'; + return response()->json(array('success' => false, 'message'=>$message)); + } + + + $message = "success"; + $navbar = view('layout.navbar', compact('view'))->render(); + $save_design_button = ' '; + + return response()->json(array( + 'success' => true, + 'message'=>$message, + 'navbar'=>$navbar, + 'save_design_button' => $save_design_button + )); + }else{ + + $message = ' +
+ +

ERROR:

+ Username or Password is incorrect. +
'; + + return response()->json(array('success' => false, 'message'=>$message)); + } + } + + public function postRegister(Request $request){ + $post = $request->all(); + + $post['captcha'] = $this->captchaCheck(); + + $validator = Validator::make($post, [ + 'username' => 'unique:user_logins', + 'email' => 'unique:user_logins', + 'g-recaptcha-response' => 'required', + 'captcha' => 'required|min:1' + ], + [ + 'g-recaptcha-response.required' => 'Captcha is required', + 'captcha.min' => 'Wrong captcha, please try again.' + ]); + + + if ($validator->fails()) + { + $errors = ""; + foreach($validator->errors()->all() as $error){ + $errors .= "
  • ".$error."
  • "; + } + + $message = ' +
    + +

    ERROR:

    + '.$errors. + '
    '; + + return response()->json(array( + 'success' => false, + 'message' => $message + )); + } + + User::create([ + 'name' => $post['name'], + 'username' => $post['username'], + 'email' => $post['email'], + 'password' => bcrypt($post['password']), + 'role' => 'user' + ]); + + Auth::attempt(['email' => $post['email'], 'password' => $post['password']]); + + return response()->json(array( + 'success' => true + )); + } + +} diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..c7ca983 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,36 @@ +middleware('auth'); + } + + /** + * Show the application dashboard to the user. + * + * @return Response + */ + public function index() + { + return view('home'); + } + +} diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php new file mode 100644 index 0000000..e27650a --- /dev/null +++ b/app/Http/Controllers/MainController.php @@ -0,0 +1,159 @@ +selectAllSports(); + //var_dump($fetchData); + + foreach ($fetchData as $row) { + ?> +
    + URL; ?>"> +

    SportsName ?>

    +
    + view('errors/403'); + // } + } + + public function templatesCat($url) + { + $m = new MainModel; + + $data = $m->selectSportsId($url); + $categoryids = array(); + + foreach($data as $row){ + $categoryids[] = $row->Category; + } + + $array_sports = $m->selectSportsByURL($url); + $array_category = $m->selectCategory($categoryids); + // $array_templateby_category = $m->selectTemplatesByCategory($url, $id); + + // var_dump($array_category); + + return view('sublayouts.sports-category') + ->with('array_sports', $array_sports) + ->with('row', $array_category); + } + + + public function templatesByCategory($url, $id) + { + $m = new MainModel; + $data = $m->selectTemplatesByCategory($url, $id); + $categoryids = array(); + + $categoryids[] = $id; + $array_category = $m->selectCategory($categoryids); + // var_dump($array_category); + return view('sublayouts.sports-styles') + ->with('cat', $url) + ->with('row', $data) + ->with('array_category', $array_category); + // if(count($data) > 1){ + // return view('sublayouts.sports-styles') + // ->with('cat', $url) + // ->with('row', $data); + // }else{ + // $url = url('/designer'). '/'.$data[0]->HashTemplateCode; // desinger url + // return redirect()->to($url); + // } + } + + + public function fetchTemplates() + { + // if(Request::ajax()){ + // $m = new MainModel; + // + // $data = $m->selectSportsId($url); + // echo $data[0]->id; + //$fetchData = $m->selectSportsTemplates(); + + + //var_dump($fetchData); + + // }else{ + // return response()->view('errors/403'); + // } + + } + + //call this from blade view + public static function getCountCart(){ + $m = new MainModel; + + if(Session::get('cartkey')){ + + $cartKey = Session::get('cartkey'); + + echo $i = $m->cartCount($cartKey); + + }else{ + echo 0; + } + } + + public function countCart(Request $request){ + + $m = new MainModel; + + if($request->session()->has('cartkey')){ + + $cartKey = $request->session()->get('cartkey'); + + echo $i = $m->cartCount($cartKey); + + }else{ + echo 0; + } + + } + + + public function removeCartItem($id){ + + $m = new MainModel; + + $row = $m->removeItem($id); + if($row > 0) + { + // \Session::flash('message', 'Record successfully deleted.'); + echo ''; + return redirect('cart'); + } + + } + + +} diff --git a/app/Http/Controllers/PatternsController.php b/app/Http/Controllers/PatternsController.php new file mode 100644 index 0000000..b9eda0d --- /dev/null +++ b/app/Http/Controllers/PatternsController.php @@ -0,0 +1,53 @@ +selectAllPattern(); + + foreach ($data as $row) { + if($row->PatternName == "None"){ + echo ''; + }else{ + echo ''; + } + + } + + //} + } + + public function getPatternsWithPostValue(Request $request) + { + $m = new PatternsModel; + $data = $m->selectAllPattern(); + + $post = $request->all(); + + $pattern_list = array(); + foreach($post['patterns'] as $pt) { + $pattern_list[] = $pt; + //echo $pt; + } + + foreach ($data as $row) { + if(in_array($row->PatternId, $pattern_list)) { + echo ''; + }else{ + echo ''; + } + + } + + } +} diff --git a/app/Http/Controllers/PrintPatternController.php b/app/Http/Controllers/PrintPatternController.php new file mode 100644 index 0000000..3a5610c --- /dev/null +++ b/app/Http/Controllers/PrintPatternController.php @@ -0,0 +1,79 @@ +selectAllPrintTemplate(); + return view('sub_pages.sports_details')->with('data', $data); + } + + public function displayAddPrintTemplatePage($tempcode) + { + $m = new SizesModel; + $data = $m->selectAllSizes(); + + //var_dump($tempcode); + return view('sub_pages.add_print_template')->with('sizeslist', $data)->with('templatecode', $tempcode); + } + + public function savePrintPattern (Request $request) + { + $m = new PrintPatternModel; + + $post = $request->all(); + + $templatecode = $post['templatecode']; + $templateType = $post['templateType']; + $templateSize = $post['templateSize']; + + $rawName = $request->file('preview_print_template')->getClientOriginalName(); + $imageExt = $request->file('preview_print_template')->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + + + $NewImageName = $templateSize.'.'.$imageExt; + + + $thumbnail = "uniform-templates/".$templatecode."/".$templateType."/SIZES/" . $NewImageName; + + $data = array( + 'TemplateCode' => $templatecode, + 'Path' => $thumbnail, + 'Type' => $templateType, + 'Size' => $templateSize + ); + + $i = $m->insertPrintPattern($data); + //var_dump($data); + if($i){ + $r = $request->file('preview_print_template')->move( + base_path() . "/public/images/uniform-templates/".$templatecode."/".$templateType."/SIZES/", $NewImageName + ); + echo '
    + +

    Success!

    + Print Pattern is successfully uploaded. +
    '; + }else{ + echo '
    + +

    Error!

    + Failed to upload. +
    '; + } + + + } +} diff --git a/app/Http/Controllers/SizesController.php b/app/Http/Controllers/SizesController.php new file mode 100644 index 0000000..66d0c0a --- /dev/null +++ b/app/Http/Controllers/SizesController.php @@ -0,0 +1,10 @@ +selectAllSports(); + return view('sub_pages.sports')->with('row', $data); + } + + public function displayAddSportPage() + { + return view('sub_pages.add_sports'); + } + + public function saveNewSports(Request $request) + { + $m = new SportsModel; + $post = $request->all(); + + $rawName = date('Ymd') . "-" . time().'-'.$request->file('previewImg')->getClientOriginalName(); + $imageExt = $request->file('previewImg')->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + $NewImageName = $custom_file_name.'.'.$imageExt; + $thumbnail = "images/sports-thumbnails/" . $NewImageName; + $data = array( + 'SportsName' => $post['sportsName'], + 'URL' => $post['generatedUrl'], + 'Thumbnail' => $thumbnail, + 'IsActive' => 'FALSE', + + ); + $i = $m->insertToSports($data); + + if($i){ + $request->file('previewImg')->move( + base_path() . '/public/images/sports-thumbnails', $NewImageName + ); + + echo '
    + +

    Success!

    + Sports is successfully added. +
    '; + }else{ + echo '
    + +

    Error!

    + Failed to saved new sports. +
    '; + } + + } + + public function sportsDetails($q) + { + $m = new SportsModel; + $data = $m->selectSports($q); + return view('sub_pages.sports_details')->with('data', $data); + } + + public function updateSports(Request $request) + { + $m = new SportsModel; + $post = $request->all(); + + if(count($post) > 3){ + $rawName = date('Ymd') . "-" . time().'-'.$request->file('previewImg')->getClientOriginalName(); + $imageExt = $request->file('previewImg')->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + $NewImageName = $custom_file_name.'.'.$imageExt; + $thumbnail = "images/sports-thumbnails/" . $NewImageName; + $data = array( + 'SportsName' => $post['sportsName'], + 'URL' => $post['generatedUrl'], + 'Thumbnail' => $thumbnail + + ); + $request->file('previewImg')->move( + base_path() . '/public/images/sports-thumbnails', $NewImageName + ); + }else{ + $data = array( + 'SportsName' => $post['sportsName'], + 'URL' => $post['generatedUrl'] + ); + + } + + $i = $m->upateSportsDetails($data, $post['_id']); + + if($i){ + + echo '
    + +

    Success!

    + Sports details is successfully updated. +
    '; + }else{ + echo '
    + +

    Warning!

    + No changes made. +
    '; + } + } + + public function selectSportsName() + { + //if(Request1::ajax()){ + $m = new SportsModel; + $data = $m->getSportsName(); + ?> + + Id.'">'.$row->SportsName.''; + } + ?> + selectTemplate($q); + $templatePathsData = $m->selectTemplatePaths($q); // plain svg for visualizer + $templateTypes = $m->selectTemplateTypes(); + $sportsList = $m1->getSportsName(); + $printPatternList = $m2->selectAllPrintTemplate($q); + + return view('sub_pages.edit_template')->with('templatedata', $templateData)->with('templatepath', $templatePathsData)->with('sportsname', $sportsList)->with('templatetype', $templateTypes)->with('printpattern', $printPatternList); + } + + + public function getTemplates(Request $request) + { + $m = new TemplatesModel; + $post = $request->all(); + $data = $m->selectTemplates($post['id']); + + // /public/images/sports-thumbnails + + if(!empty($data)){ + foreach ($data as $row) { + ?> +
    +
    +

    TemplateName ?>

    +
    + +
    + + alert("No available Template/s"); + '; + } + } + + public function displayAddTemplatePage() + { + return view('sub_pages.add_template'); + } + + public function getTemplateTypes() + { + //if(Request::ajax()){ + $m = new TemplatesModel; + $data = $m->selectTemplateTypes(); + ?> + + + TemplateType.'">'.$row->TemplateType.''; + } + ?> + selectTemplateLastId(); + echo $templateCode = "TEMP-" . str_pad($data->Id + 1, 5,'0',STR_PAD_LEFT); + } + + public function saveNewTemplates(Request $request) + { + $m = new TemplatesModel; + $post = $request->all(); + + $templateCode = $post['templateCode']; + $sportName = $post['sportName']; + $templateName = $post['templateName']; + $templateType = $post['templateType']; + $numberOfTrims = $post['numberOfTrims']; + $getSkins = $post['getSkins']; + $tempateImage = $post['tempateImage']; + + $rawName = date('Ymd') . "-" . time().'-'.$request->file('tempateImage')->getClientOriginalName(); + $imageExt = $request->file('tempateImage')->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + $NewImageName = $custom_file_name.'.'.$imageExt; + $thumbnail = "images/templates/thumbnail/" . $NewImageName; + + $data = array( + 'SportsId' => $sportName, + 'TemplateCode' => $templateCode, + 'Thumbnail' => $thumbnail, + 'TemplateName' => $templateName, + 'TemplateType' => $templateType, + 'Trim' => $numberOfTrims, + 'PatternId' => $getSkins, + 'IsActive' => 'TRUE' + ); + + $i = $m->insertNewTempalte($data); + + + if($i){ + $request->file('tempateImage')->move( + base_path() . '/public/images/templates/thumbnail', $NewImageName + ); + + //for front jersey + if(!empty($request->file('svgJerseyFront')->getClientOriginalName())){ + + $svgName = $request->file('svgJerseyFront')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + //var_dump($svgThumbnail); + $Templatedata = array( + 'TemplateCode' => $templateCode, + 'Type' => 'Jersey', + 'Side' => 'Front', + 'Path' => $svgThumbnail, + 'IsActive' => 'TRUE' + ); + + $i = $m->insertTempaltePaths($Templatedata); + if($i){ + $request->file('svgJerseyFront')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + if(!empty($request->file('svgJerseyBack')->getClientOriginalName())){ + + $svgName = $request->file('svgJerseyBack')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'TemplateCode' => $templateCode, + 'Type' => 'Jersey', + 'Side' => 'Back', + 'Path' => $svgThumbnail, + 'IsActive' => 'TRUE' + ); + + $i = $m->insertTempaltePaths($Templatedata); + if($i){ + $request->file('svgJerseyBack')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + if(!empty($request->file('svgShortRight')->getClientOriginalName())){ + + $svgName = $request->file('svgShortRight')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'TemplateCode' => $templateCode, + 'Type' => 'Shorts', + 'Side' => 'Right', + 'Path' => $svgThumbnail, + 'IsActive' => 'TRUE' + ); + + $i = $m->insertTempaltePaths($Templatedata); + if($i){ + $request->file('svgShortRight')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + if(!empty($request->file('svgShortLeft')->getClientOriginalName())){ + + $svgName = $request->file('svgShortLeft')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'TemplateCode' => $templateCode, + 'Type' => 'Shorts', + 'Side' => 'Left', + 'Path' => $svgThumbnail, + 'IsActive' => 'TRUE' + ); + + $i = $m->insertTempaltePaths($Templatedata); + if($i){ + $request->file('svgShortLeft')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + echo '
    + +

    Success!

    + Sports is successfully added. +
    '; + }else{ + echo '
    + +

    Error!

    + Failed to saved new sports. +
    '; + } + } + + public function updateTemplate(Request $request) + { + $m = new TemplatesModel; + $post = $request->all(); + // var_dump($post); + // echo count($post); + // var_dump($post); + // var_dump(array_key_exists('svgShortRight', $post)); + + $templateCode = $post['templateCode']; + $sportName = $post['sportName']; + $templateName = $post['templateName']; + $templateType = $post['templateType']; + $numberOfTrims = $post['numberOfTrims']; + $getSkins = $post['getSkins']; + + if (array_key_exists('tempateImage', $post)) { + + $tempateImage = $post['tempateImage']; + + $rawName = date('Ymd') . "-" . time().'-'.$request->file('tempateImage')->getClientOriginalName(); + $imageExt = $request->file('tempateImage')->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + $NewImageName = $custom_file_name.'.'.$imageExt; + $thumbnail = "images/templates/thumbnail/" . $NewImageName; + + $data = array( + 'SportsId' => trim($sportName), + 'TemplateCode' => $templateCode, + 'Thumbnail' => $thumbnail, + 'TemplateName' => $templateName, + 'TemplateType' => trim($templateType), + 'Trim' => $numberOfTrims, + 'PatternId' => $getSkins + ); + + $request->file('tempateImage')->move( + base_path() . '/public/images/templates/thumbnail', $NewImageName + ); + + }else{ + + $data = array( + 'SportsId' => trim($sportName), + 'TemplateCode' => $templateCode, + //'Thumbnail' => $thumbnail, + 'TemplateName' => $templateName, + 'TemplateType' => trim($templateType), + 'Trim' => $numberOfTrims, + 'PatternId' => $getSkins + ); + + } + + $i = $m->updateNewTemplate($data, $templateCode); + + + + + + if (array_key_exists('svgJerseyFront', $post)) { + //echo 'meron jerset front'; + + $svgName = $request->file('svgJerseyFront')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'Type' => 'Jersey', + 'Side' => 'Front', + 'Path' => $svgThumbnail + ); + + $i = $m->updateTemplatePaths($Templatedata, $post['id_svgJerseyFront']); + if($i){ + $request->file('svgJerseyFront')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + //echo 'image move success'; + } + } + + if (array_key_exists('svgJerseyBack', $post)) { + + $svgName = $request->file('svgJerseyBack')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'Type' => 'Jersey', + 'Side' => 'Back', + 'Path' => $svgThumbnail + ); + $i = $m->updateTemplatePaths($Templatedata, $post['id_svgJerseyBack']); + if($i){ + + $request->file('svgJerseyBack')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + if (array_key_exists('svgShortRight', $post)) { + $svgName = $request->file('svgShortRight')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'Type' => 'Shorts', + 'Side' => 'Right', + 'Path' => $svgThumbnail + ); + + $i = $m->updateTemplatePaths($Templatedata, $post['id_svgShortRight']); + if($i){ + $request->file('svgShortRight')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + if (array_key_exists('svgShortLeft', $post)) { + $svgName = $request->file('svgShortLeft')->getClientOriginalName(); + $svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName; + + $Templatedata = array( + 'Type' => 'Shorts', + 'Side' => 'Left', + 'Path' => $svgThumbnail + ); + + $i = $m->updateTemplatePaths($Templatedata, $post['id_svgShortLeft']); + if($i){ + $request->file('svgShortLeft')->move( + base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName + ); + } + } + + echo '
    + +

    Success!

    + Template is successfully updated. +
    '; + } + +} diff --git a/app/Http/Controllers/WelcomeController.php b/app/Http/Controllers/WelcomeController.php new file mode 100644 index 0000000..8a5ac6d --- /dev/null +++ b/app/Http/Controllers/WelcomeController.php @@ -0,0 +1,36 @@ +middleware('guest'); + } + + /** + * Show the application welcome screen to the user. + * + * @return Response + */ + public function index() + { + return view('welcome'); + } + +} diff --git a/app/Http/Controllers/cliparts/ClipartsController.php b/app/Http/Controllers/cliparts/ClipartsController.php new file mode 100644 index 0000000..5d68285 --- /dev/null +++ b/app/Http/Controllers/cliparts/ClipartsController.php @@ -0,0 +1,16 @@ +selectTemplate($templateid); + // dd($template_arrays); + $patterns = explode(",", $template_arrays[0]->PatternId); + + foreach($patterns as $patternId){ + $pattern_arrays[] = $newDesignerModel->selectPatterns($patternId); + } + + $templatepaths_arrays = $newDesignerModel->selectTemplatePaths($templateid); + $fonts_array = $newDesignerModel->selectFonts(); + + // var_dump($template_arrays); + + return view('designer.designer')->with('template_arrays', $template_arrays) + ->with('templatepaths_arrays', $templatepaths_arrays) + ->with('pattern_arrays', $pattern_arrays) + ->with('fonts_array', $fonts_array); + } + + public function gradientAppend(Request $request) + { + + $post = $request->all(); + $gradientPrefix = $post['gradientPrefix']; + $TrimCount = $post['TrimCount']; + + ?> + + + + + + + + + + + + + + + + + + + + all(); + $patternId = $post['patternId']; + + $pattern_array = $newDesignerModel->selectPatterns($patternId); + $pattern_colors_array = $newDesignerModel->selectPatternColors($patternId); + + $Opacity = $pattern_array[0]->Opacity; + $Gradient = $pattern_array[0]->Gradient; + + if($pattern_array[0]->NoOFColor != 0){ + + $NoOFColor = $pattern_array[0]->NoOFColor; + echo '
    '; + echo 'Pattern Color'; + echo '
    '; + echo '
    '; + for($i=1 ; $i <= $pattern_array[0]->NoOFColor ; $i++){ + ?> + +
    + +
    + + + '; + ?> +
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + ">all(); + $patternId = $post['patternId']; + $trim = $post['trim']; + + $pattern_array = $newDesignerModel->selectPatterns($patternId); + $pattern_colors_array = $newDesignerModel->selectPatternColors($patternId); + + $Opacity = $pattern_array[0]->Opacity; + $Gradient = $pattern_array[0]->Gradient; + + if($pattern_array[0]->NoOFColor != 0){ + + $NoOFColor = $pattern_array[0]->NoOFColor; + echo '
    '; + echo 'Pattern Color'; + echo '
    '; + echo '
    '; + for($i=1 ; $i <= $pattern_array[0]->NoOFColor ; $i++){ + ?> + +
    + +
    + + + '; + ?> +
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + ">all(); + + $templateCode = $post['templateCode']; + + $default_template_color_array = $newDesignerModel->selectDefaultTemplateColor($templateCode); + // var_dump($default_template_color_array); + + return response()->json(array( + 'success' => true, + 'default_template_color_array' => $default_template_color_array + )); + + } + + public function getFontDisplay(Request $request){ + + $newDesignerModel = new DesignerModel; + + $post = $request->all(); + $getFontFamily = $post['fontFamily']; + + $font_array = $newDesignerModel->selectFontsByFontFamily($getFontFamily); + + foreach($font_array as $row){ + + $fontNameDisplay = $row->fontNameDisplay; + $additionalSize = $row->additionalSize; + } + + $arr = array( + 'fontNameDisplay' => $fontNameDisplay, + 'additionalSize' => $additionalSize + ); + echo json_encode($arr); + + } + + public function tabClipartContent() + { + + $newDesignerModel = new DesignerModel; + + $clipart_cat_array = $newDesignerModel->selectClipartCategories(); + ?> + +
    +
    +

    Clipart

    +
    +
    +
    +
    +
    + UserId != null){ + if(!Auth::guest()){ + if(Auth::user()->id == $row->UserId){ + ?> + + UserId == null){ + ?> + + +
    +
    + + all(); + + $categoryId = $post['categoryId']; + $req_type = $post['req_type']; + $cat_name = $post['cat_name']; + $clipart_array = $newDesignerModel->selectClipartByCategory($categoryId); + + ?> +
    +
    +

    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + all(); + + ?> + +
    +
    +

    Clipart Properties

    +
    +
    +
    +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    + $arrayData ){ + // echo $arrayData['id']; + ?> +
    + +
    + +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    + + + + + + +
    +
    + + all(); + $clientId = Auth::user()->id; + $design_name = $post['design_name']; + $tempDecode = json_decode($_POST['templateDetails']); + + $getTemPlateCode = $tempDecode[0]->templateCode; + $designCode = sha1(time() . "-" .date('ymd')); + + if(isset($post['json_Front'])){ + $json_Front = $post['json_Front']; + }else{ + $json_Front = null; + } + + if(isset($post['json_Back'])){ + $json_Back = $post['json_Back']; + }else{ + $json_Back = null; + } + + if(isset($post['json_Left'])){ + $json_Left = $post['json_Left']; + }else{ + $json_Left = null; + } + + if(isset($post['json_Right'])){ + $json_Right = $post['json_Right']; + }else{ + $json_Right = null; + } + + // if(isset($post['json_Shirts_Front'])){ + // $json_Jersey_Front = $post['json_Shirts_Front']; + // } + + // if(isset($post['json_Shirts_Back'])){ + // $json_Jersey_Back = $post['json_Shirts_Back']; + // } + + try { + $design_info = array( + 'ClientId' => $clientId, + 'DesignName' => $design_name, + 'TemplateCode' => $getTemPlateCode, + 'DesignCode' => $designCode, + 'TemplateDesign'=> $post['templateDetails'], + 'ContentFront' => $json_Front, + 'ContentBack' => $json_Back, + 'ContentLeft' => $json_Left, + 'ContentRight' => $json_Right + ); + } + + catch (\Exception $e) { + return $e->getMessage(); + } + + $res = $newDesignerModel->insertClientDesign($design_info); + + if($res){ + + // dd(Uuid::generate()); + return redirect('/designer/preview/'.$designCode); + // return redirect('http://localhost/crew-designer/mydesign/'.$designCode.'/'); + + } + // else{ + // dd($res); + // } + // dd($design_info); + } + + public function getDesign($designCode){ + + $newDesignerModel = new DesignerModel; + $newTeamStoreModel = new TeamStoreModel; + $newMainModel = new MainModel; + $client_design_array = $newDesignerModel->selectClientDesign($designCode); + + $teamstore_array = array(); + + $clientrole = Auth::user()->role; + + if($clientrole == "store_owner"){ + $store_id = Auth::user()->store_id; + $teamstore_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + // var_dump(str_slug($teamstore_array[0]->StoreName, '-')); + // var_dump($this->createSlug('shorts-white-1')); + } + // var_dump($this->getProductCode()); + $templatepaths_arrays = $newDesignerModel->selectTemplatePathsByTemplateCode($client_design_array[0]->TemplateCode); + $array_cat_name = $newMainModel->selectCategoryName($client_design_array[0]->TemplateCode); + // $array_cat_name = $newMainModel->selectCategoryName($client_design_array[0]->TemplateCode); + $array_templates = $newDesignerModel->selectTemplate(md5($client_design_array[0]->TemplateCode)); + // var_dump($array_templates); + return view('designer.design_preview') + ->with('client_design_array', $client_design_array) + ->with('templatepaths_arrays', $templatepaths_arrays) + ->with('teamstore_array', $teamstore_array) + ->with('array_cat_name', $array_cat_name) + ->with('array_templates', $array_templates); + } + + protected function getProductCode() + { + //if(Request::ajax()){ + $m = new DesignerModel; + $data = $m->selectTeamStoreProductLastId(); + + if($data){ + $id = $data->Id; + }else{ + $id = 0; + } + return $templateCode = date('y') .'-' . str_pad($id + 1, 10, '0',STR_PAD_LEFT); + } + + public function saveDesignDetails(Request $request) + { + $newTeamStoreModel = new TeamStoreModel; + $newDesignerModel = new DesignerModel; + $clientrole = Auth::user()->role; + $post = $request->all(); + // var_dump($post); + if($clientrole == "store_owner"){ + + if(isset($post['sale_chk'])){ + $designName = $post['designName']; + $designCode = $post['designCode']; + $templateCode = $post['templateCode']; + $itemName = $post['itemName']; + $itemDescription = $post['itemDescription']; + $storeId = $post['storeId']; + $randomChar = str_random(5); + $producturl = str_slug($itemName .'-'. $randomChar, '-'); + $item_price = str_replace('$ ', '', $post['item_price']); + + $item_details = array( + 'TeamStoreId' => $storeId, + 'ProductCode' => $this->getProductCode(), + 'ProductName' => $itemName, + 'ProductPrice' => $item_price, + 'ProductDescription' => $itemDescription, + 'ProductURL' => $producturl, + 'ProductForm' => 'jersey-form', + 'PrivacyStatus' => 'private' + ); + + $newDesignerModel->updateClientDesign($designName, $designCode); + + $res = $newTeamStoreModel->insertTeamStoreProduct($item_details); + if($res['i']){ + $templatepaths_array = $newDesignerModel->selectTemplatePathsByTemplateCode($templateCode); + + foreach($templatepaths_array as $row){ + $imageClass = null; + + if($row->Side == 'Front'){ + $imageClass = 'active'; + } + + $productId = $res['lastId']; + $thumbnail = $designCode . '-' . strtolower($row->Side) . '-' . 'thumbnail.png'; + + $thumbnail_array[] = array( + 'ProductId' => $productId, + 'Image' => $thumbnail, + 'ImageClass' => $imageClass + ); + } + + $k = $newTeamStoreModel->insertTeamStoreProductThumbnails($thumbnail_array); + + if($k = "true"){ + $i = 1; + }else{ + $i = 0; + } + } + + return $i; + + }else{ + $designName = $post['designName']; + $designCode = $post['designCode']; + $templateCode = $post['templateCode']; + $i = $newDesignerModel->updateClientDesign($designName, $designCode); + + return $i; + } + }else{ + $designName = $post['designName']; + $designCode = $post['designCode']; + $templateCode = $post['templateCode']; + $i = $newDesignerModel->updateClientDesign($designName, $designCode); + + return $i; + } + } + + public function saveRoster(Request $request) + { + $post = $request->all(); + $newDesignerModel = new DesignerModel; + $newTeamStoreModel = new TeamStoreModel; + + // var_dump($post); + + + $design_code = $post['designCode']; + $order_names = $post['order_names']; + $order_number = $post['order_number']; + $design_name = $post['design_name']; + + $order_jersey_size = $post['order_jersey_size']; + $order_shorts_size = $post['order_shorts_size']; + + + foreach($order_names as $key => $val){ + + if($order_jersey_size[$key] != "none" && $order_shorts_size[$key] != "none"){ + $order = "Both"; + $array_default_price_jersey = $newDesignerModel->getDefaultPrice($order_jersey_size[$key], 'JERSEY'); + $array_default_price_shorts = $newDesignerModel->getDefaultPrice($order_shorts_size[$key], 'SHORTS'); + $price = $array_default_price_jersey[0]->Price + $array_default_price_shorts[0]->Price; + //var_dump($price); + + }else if($order_jersey_size[$key] == "none" && $order_shorts_size[$key] != "none"){ + $order = "Shorts"; + $array_default_price_jersey = 0; + $array_default_price_shorts = $newDesignerModel->getDefaultPrice($order_shorts_size[$key], 'SHORTS'); + $price = $array_default_price_jersey + $array_default_price_shorts[0]->Price; + //var_dump($price); + + }else if($order_jersey_size[$key] != "none" && $order_shorts_size[$key] == "none"){ + $order = "Jersey"; + $array_default_price_jersey = $newDesignerModel->getDefaultPrice($order_jersey_size[$key], 'JERSEY'); + $array_default_price_shorts = 0; + $price = $array_default_price_jersey[0]->Price + $array_default_price_shorts; + // var_dump($price); + } + + if($request->session()->has('cartkey')){ + $cartKey = $request->session()->get('cartkey'); + }else{ + $request->session()->put('cartkey', sha1(time() . str_random(6))); + $cartKey = $cartKey = $request->session()->get('cartkey'); + } + + $items[] = array( + 'Order' => $order, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductName' => $design_name, + 'Name' => $order_names[$key], + 'Number' => $order_number[$key], + 'JerseySize' => $order_jersey_size[$key], + 'ShortsSize' => $order_shorts_size[$key], + 'Price' => $price, + 'Quantity' => 1 + ); + + } + + $i = $newTeamStoreModel->insertToCart($items); + return redirect('cart'); + + } + + public function editDesign($designcode) + { + $newDesignerModel = new DesignerModel; + + $client_design_array = $newDesignerModel->selectClientDesign($designcode); + $template_arrays = $newDesignerModel->selectTemplate(md5($client_design_array[0]->TemplateCode)); + // var_dump($template_arrays); + $patterns = explode(",", $template_arrays[0]->PatternId); + + foreach($patterns as $patternId){ + $pattern_arrays[] = $newDesignerModel->selectPatterns($patternId); + } + + $templatepaths_arrays = $newDesignerModel->selectTemplatePaths(md5($client_design_array[0]->TemplateCode)); + $fonts_array = $newDesignerModel->selectFonts(); + + // var_dump($client_design_array); + + return view('designer.designer_edit') + ->with('client_design_array', $client_design_array) + ->with('template_arrays', $template_arrays) + ->with('templatepaths_arrays', $templatepaths_arrays) + ->with('pattern_arrays', $pattern_arrays) + ->with('fonts_array', $fonts_array); + } + + public function editGradientAppend(Request $request) + { + + $post = $request->all(); + + $gradientFor = $post['gradientFor']; + $gradientPrefix = $post['gradientPrefix']; + $TrimCcount = $post['trimCount']; + + $stop_color_1 = $post['stop_color_1']; + $stop_color_2 = $post['stop_color_2']; + $offset_1 = $post['offset_1']; + $offset_2 = $post['offset_2']; + + if($gradientFor == "Body"){ + ?> + + + + + + + + + + + + + + + + + + + + + all(); + $patternId = $post['patternId']; + + $pattern_array = $newDesignerModel->selectPatterns($patternId); + + foreach($pattern_array as $row){ + $small = $row->SVGPath; + $large = $row->SVGPath_Actual; + } + + $arr = array( + 'small' => config('site_config.uploads') . $small , + 'large' => config('site_config.uploads') . $large + ); + + return json_encode($arr); + + // var_dump($arr); + } + + public function editSetPattern(Request $request) + { + $newDesignerModel = new DesignerModel; + + $post = $request->all(); + $patternId = $post['patternId']; + $patternType = $post['patternType']; + $patternFor = $post['patternFor']; + $pcolors = $post['pcolors']; + $gradientColor = $post['gradientColor']; + + + if($patternType == "Custom"){ + $table = "client_patterns"; + }else{ + $table = "patterns"; + } + + foreach($gradientColor as $p){ + foreach($p as $key => $val){ + ${$key} = $val; + } + } + + $pattern_array = $newDesignerModel->selectPatternsByTable($table, $patternId); + + foreach($pattern_array as $row){ + $Opacity = $row->Opacity; + $Gradient = $row->Gradient; + if($row->NoOFColor != 0){ + + $NoOFColor = $row->NoOFColor; + echo '
    '; + echo 'Pattern Color'; + echo '
    '; + echo '
    '; + + foreach($pcolors as $p){ + foreach($p as $key => $val){ + ?> +
    + +
    + + + '; + ?> + +
    +
    +
    +
    + Gradient Colors +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + + "> + all(); + // echo $post['temp_code']; + $newDesignerModel = new DesignerModel; + $jersey_sizes = $newDesignerModel->getAvailableSizes($post['temp_code'], 'JERSEY'); + $shorts_sizes = $newDesignerModel->getAvailableSizes($post['temp_code'], 'SHORTS'); + return view("designer.buy_form")->with('jersey_sizes', $jersey_sizes) + ->with('shorts_sizes', $shorts_sizes); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/paypal/PaypalController.php b/app/Http/Controllers/paypal/PaypalController.php new file mode 100644 index 0000000..e870e43 --- /dev/null +++ b/app/Http/Controllers/paypal/PaypalController.php @@ -0,0 +1,444 @@ +_apiContext = PayPal::ApiContext( + config('services.paypal.client_id'), + config('services.paypal.secret') + ); + + + // $this->_apiContext->setConfig(array( + // 'mode' => 'sandbox', + // 'service.EndPoint' => 'https://api.sandbox.paypal.com', + // 'http.ConnectionTimeOut' => 30, + // 'log.LogEnabled' => true, + // 'log.FileName' => storage_path('logs/paypal.log'), + // 'log.LogLevel' => 'FINE' + // )); + + // live + $this->_apiContext->setConfig(array( + 'mode' => 'live', + 'service.EndPoint' => 'https://api.paypal.com', + 'http.ConnectionTimeOut' => 30, + 'log.LogEnabled' => true, + 'log.FileName' => storage_path('logs/paypal.log'), + 'log.LogLevel' => 'FINE' + )); + } + + + public function payPremium() + { + return view('payPremium'); + } + + + public function getCheckout(Request $request) + { + + if (Auth::guest()) { + + $message = 'Please Sign in to your account to proceed.'; + Session::flash('msg', $message); + return Redirect::back(); + } + + // $request->session()->forget('cartkey'); + if(!$request->session()->has('cartkey')){ + $message = 'Your cart is empty'; + Session::flash('cartkeyError', $message); + return Redirect::back(); + } + + $payer = PayPal::Payer(); + $payer->setPaymentMethod('paypal'); + + $m = new TeamStoreModel; + $paypal_model = new PayPalModel; + $last_id = $paypal_model->getLastIdPaymentDetails(); + $invoice_num = str_pad($last_id[0]->Id, 4, '0', STR_PAD_LEFT); + $cartKey = $request->session()->get('cartkey'); + + $items = $m->myCart($cartKey); + + $getSubtotal = $m->getSubtotal($cartKey); + $grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey); + $store_array = $m->selectTeamStore('Id', $grouped_item[0]->StoreId); + + $getSmallItemQty = 0; + $getBulkyItemQty = 0; + $getMaskItemQty = 0; + $getDGSItemQty = 0; + $shippingFee = 0; + + + foreach ($items as $item) { + if ($item->VoucherId != null) { + $voucherIds[] = $item->VoucherId; + $voucher = $m->selectVoucherWhereIn($voucherIds); + $item_id = $item->Id; + $totalValue = $voucher[0]->VoucherValue; + if ($voucher[0]->VoucherType == "Percentage") { + $getPercentageValue = $totalValue / 100; + $getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue); + $data = array( + 'Price' => round($getDiscountValue * -1, 2) + ); + + $m->updateVoucherValueInCart($data, $item_id); + } else { + $voucherData = array( + 'totalValue' => $totalValue, + 'type' => 'Flat' + ); + } + } + + if($item->ShippingCostId == 1){ + $getSmallItemQty += $item->Quantity; + }else if($item->ShippingCostId == 2){ + $getBulkyItemQty += $item->Quantity; + }else if($item->ShippingCostId == 3){ + $getMaskItemQty += $item->Quantity; + }else if($item->ShippingCostId == 4){ + $getDGSItemQty += $item->Quantity; + } + } + + + + $getSmallItemQty = ceil($getSmallItemQty / 3) * 8; + $getBulkyItemQty = ceil($getBulkyItemQty / 1) * 8; + $getMaskItemQty = ceil($getMaskItemQty / 25) * 8; + $getMaskItemQty = ceil($getMaskItemQty / 4) * 5; + $shippingFee = $getSmallItemQty + $getBulkyItemQty + $getMaskItemQty + $getDGSItemQty; + // var_dump($shippingFee); + + $order_items = array(); + $updated_items = $m->myCart($cartKey); + $updated_getSubtotal = $m->getSubtotal($cartKey); + + // $order_subtotal = $updated_getSubtotal[0]->Subtotal; + $order_grandtotal = $updated_getSubtotal[0]->Subtotal; + + if ($grouped_item[0]->StoreId == 76 || $grouped_item[0]->StoreId == 78 || $grouped_item[0]->StoreId == 111 || $grouped_item[0]->StoreId == 131 || $grouped_item[0]->StoreId == 30 || $grouped_item[0]->StoreId == 141 || $grouped_item[0]->StoreId == 162 || $grouped_item[0]->StoreId == 185) { + $tax_value = 0; + } else { + $tax_value = 0.10; + } + + $tax = $order_grandtotal * $tax_value; + + foreach ($updated_items as $key => $item) { + + // $descriptions = "Name: " . $item->Name . " Number: " . $item->Number . " Size: " . $item->Size;"?" + + $order_items[$key] = PayPal::Item(); + $order_items[$key]->setName($item->ProductName); + $order_items[$key]->setCurrency($store_array[0]->StoreCurrency); + $order_items[$key]->setQuantity($item->Quantity); + // $order_items[$key]->setDescription($descriptions); + // $order_items[$key]->setTax(10); + $order_items[$key]->setPrice($item->Price); + } + + $item_list = PayPal::ItemList(); + $item_list->setItems($order_items); + $amount_details = PayPal::Details(); + $amount_details->setSubtotal($order_grandtotal); + $amount_details->setTax($tax); + $amount_details->setShipping($shippingFee); + + $amount = PayPal::Amount(); + $amount->setCurrency($store_array[0]->StoreCurrency); + $amount->setDetails($amount_details); + $amount->setTotal($order_grandtotal + $tax + $shippingFee); + + $transaction = PayPal::Transaction(); + $transaction->setAmount($amount); + $transaction->setItemList($item_list); + + // $transaction->setDescription('Your transaction description'); + $transaction->setInvoiceNumber(date('Ymd') . '-' . $invoice_num); + + $redirectUrls = PayPal::RedirectUrls(); + $redirectUrls->setReturnUrl(route('getDone')); + $redirectUrls->setCancelUrl(route('getCancel')); + + + $payment = PayPal::Payment(); + $payment->setIntent('sale'); + $payment->setPayer($payer); + $payment->setRedirectUrls($redirectUrls); + $payment->setTransactions(array($transaction)); + + + $response = $payment->create($this->_apiContext); + $redirectUrl = $response->links[1]->href; + + + return redirect()->to($redirectUrl); + } + + public function getDoneTest() + { + // $paymentId= "PAY-66Y799521H279203PLOP2X4Y"; + // $payment = PayPal::getById($paymentId, $this->_apiContext); + + // $obj = json_decode($payment); + // // var_dump($obj); + + // $total = $obj->transactions[0]->amount->total; + // $currency = $obj->transactions[0]->amount->currency; + // $invoice_number = $obj->transactions[0]->invoice_number; + + // return view('paypal.get_done') + // ->with('currency', $currency) + // ->with('total', $total); + // try { + // $invoice = PayPal::Invoice(); + // echo $number = $invoice->generateNumber($this->_apiContext); + // } catch (Exception $ex) { + // echo $ex; + // } + + + } + + public function getDone(Request $request) + { + $id = $request->get('paymentId'); + $token = $request->get('token'); + $payer_id = $request->get('PayerID'); + + + $payment = PayPal::getById($id, $this->_apiContext); + + $paymentExecution = PayPal::PaymentExecution(); + + $paymentExecution->setPayerId($payer_id); + $executePayment = $payment->execute($paymentExecution, $this->_apiContext); + + // print_r($executePayment); + // if ($executePayment->getState() == 'approved') { + + // /** it's all right **/ + // /** Here Write your database logic like that insert record or value in database if you want **/ + + // // \Session::put('success','Payment success'); + // // return Redirect::route('paywithpaypal'); + // echo 'Payment success'; + // } + $obj = json_decode($executePayment); + + + $line2 = null; + + //details + $total = $obj->transactions[0]->amount->total; + $sub_total = $obj->transactions[0]->amount->details->subtotal; + $tax = $obj->transactions[0]->amount->details->tax; + $shipping = $obj->transactions[0]->amount->details->shipping; + + $relatedResources = $obj->transactions[0]->related_resources[0]; + $saleId = $relatedResources->sale->id; // transaction_id + + $currency = $obj->transactions[0]->amount->currency; + $invoice_number = $obj->transactions[0]->invoice_number; + + //shipping address details + $recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name; + $line1 = $obj->transactions[0]->item_list->shipping_address->line1; + if (isset($obj->transactions[0]->item_list->shipping_address->line2)) { + $line2 = $obj->transactions[0]->item_list->shipping_address->line2; + } + $city = $obj->transactions[0]->item_list->shipping_address->city; + $state = $obj->transactions[0]->item_list->shipping_address->state; + $postal_code = $obj->transactions[0]->item_list->shipping_address->postal_code; + $country_code = $obj->transactions[0]->item_list->shipping_address->country_code; + + // payer info + $payment_method = $obj->payer->payment_method; + $email = $obj->payer->payer_info->email; + $first_name = $obj->payer->payer_info->first_name; + $last_name = $obj->payer->payer_info->last_name; + $_payer_id = $obj->payer->payer_info->payer_id; + + /// end paypal codes + + $paypal_model = new PayPalModel; + $m = new TeamStoreModel; + $cartKey = $request->session()->get('cartkey'); + $userId = Auth::user()->id; + $user_email = Auth::user()->email; + + $items = $m->myCart($cartKey); // item from cart_tmp + $getSubtotal = $m->getSubtotal($cartKey); + + $payment_details = array( + + 'UserId' => $userId, + 'CartKey' => $cartKey, + 'PaymentId' => $id, + 'Token' => $token, + 'PayerId' => $payer_id, + 'InvoiceNumber' => $invoice_number, + 'Currency' => $currency, + 'Total' => $total, + 'SubTotal' => $sub_total, + 'Tax' => $tax, + 'Payer_Email' => $email, + 'Payer_Firstname' => $first_name, + 'Payer_Lastname' => $last_name, + 'PaymentMethod' => $payment_method, + 'ShippingCost' => $shipping, + 'TransactionId' => $saleId + ); + + $p_id = $paypal_model->insertToPaypalDetails($payment_details); + + $shipping_address = array( + 'PaymentDetail_Id' => $p_id, + 'recipient_name' => $recipient_name, + 'line1' => $line1, + 'line2' => $line2, + 'city' => $city, + 'state' => $state, + 'postal_code' => $postal_code, + 'country_code' => $country_code, + ); + // iinsert shipping address + $paypal_model->insertShippingAddress($shipping_address); + + // insert order from cart_tmp to orders table + $l = $paypal_model->insertToOrders($cartKey); // insert to orders table + + //email sending + $newUserModel = new UserModel; + $order_item_array = $newUserModel->selectOrderItem($cartKey); + $item_goup_array = $newUserModel->itemGroup($cartKey); + $item_thumbs = $newUserModel->selectDisplayItemThumb(); + $array_payment_details = $newUserModel->selectPaymentDetails('CartKey', $cartKey); + $array_storename = $newUserModel->selectTeamStoreName($cartKey); // email subject + + + foreach ($array_storename as $storname) { + + $sName[] = $storname->StoreName; + $sid[] = $storname->Id; + } + $sName = implode(", ", $sName); + + + $user_loginsArray = $newUserModel->selectUserLoginsWhereIn($sid); + + foreach ($user_loginsArray as $userdata) { + + $other_email[] = $userdata->other_email; + } + + if ($other_email[0] != null) { + $other_email = implode(", ", $other_email); + $email_cc = "orders@crewsportswear.com" . "," . $other_email; + } else { + $email_cc = "orders@crewsportswear.com"; + } + + $explode_other_email = explode(",", $email_cc); + + $data = array( + 'order_item_array' => $order_item_array, + 'item_goup_array' => $item_goup_array, + 'img_thumb' => $item_thumbs, + 'array_payment_details' => $array_payment_details, + 'receiver' => $user_email, + 'email_cc' => $explode_other_email, + 'subject' => $sName . ' ORDERS', + ); + + Mail::send('emails.orders', $data, function ($message) use ($data) { + $message->from('no-reply@crewsportswear.com', 'CREW Sportswear'); + $message->bcc($data['email_cc'], 'Orders From CREW Sportswear'); + $message->to($data['receiver'])->subject($data['subject']); + }); + // end email sending + + + $insertTracking = array( + "StepId" => 1, + "ScannedBy" => 1, + "InvoiceNumber" => $invoice_number, + "created_at" => date('Y-m-d H:i:s') + ); + + $ApiModel = new ApiModel; + $ApiModel->insertTracking($insertTracking); + + $request->session()->forget('cartkey'); // clear session for cartkey + + // redirect to thank you page. + return view('paypal.get_done') + ->with('currency', $currency) + ->with('total', $total); + } + + + public function getCancel(Request $request) + { + $m = new TeamStoreModel; + $cartKey = $request->session()->get('cartkey'); + + $items = $m->myCart($cartKey); + $getSubtotal = $m->getSubtotal($cartKey); + + foreach ($items as $item) { + if ($item->VoucherId != null) { + $voucherIds[] = $item->VoucherId; + $voucher = $m->selectVoucherWhereIn($voucherIds); + $item_id = $item->Id; + $totalValue = $voucher[0]->VoucherValue; + if ($voucher[0]->VoucherType == "Percentage") { + $data = array( + 'Price' => '00.00' + ); + $m->updateVoucherValueInCart($data, $item_id); + } else { + $voucherData = array( + 'totalValue' => $totalValue, + 'type' => 'Flat' + ); + } + } + } + + return redirect()->route('cart'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/teamstore/TeamStoreController.php b/app/Http/Controllers/teamstore/TeamStoreController.php new file mode 100644 index 0000000..3299b46 --- /dev/null +++ b/app/Http/Controllers/teamstore/TeamStoreController.php @@ -0,0 +1,797 @@ +selectTeamStore('StoreUrl', $teamStoreURL); + $product_array = $m->selectTeamStoreProducts('TeamStoreId', $store_array[0]->Id); + $user_role = ''; + + if (Auth::check()) { + $user_role = Auth::user()->role; + $store_id = Auth::user()->store_id; + } else { + $user_role = null; + $store_id = null; + } + + + if ($store_array[0]->Password != null) { + if ($request->session()->get('teamstore_data_array') == null) { + if ($store_id != $store_array[0]->Id) { + return redirect('teamstore'); + } + } else { + + if ($user_role != "store_owner") { + if ($request->session()->get('teamstore_data_array')[0]->StoreUrl != $store_array[0]->StoreUrl) { + return redirect()->back(); + } + } + } + } + + + foreach ($product_array as $p => $pr_arr) { + + $thumbnails_array = $m->getProductThumbnails($pr_arr->Id); + if (!empty($thumbnails_array)) { + foreach ($thumbnails_array as $t => $thumb) { + + if ($thumb->ImageClass == 'custom') { + $displayThumbnails = $thumb->Image; + break; + } + + if ($thumb->ImageClass == 'active') { + $displayThumbnails = $thumb->Image; + break; + } + } + + $thumbnails[] = array( + 'folder' => $store_array[0]->ImageFolder, + 'product_id' => $pr_arr->Id, + 'thumb' => $displayThumbnails + + ); + } else { + $thumbnails[] = array( + 'folder' => $store_array[0]->ImageFolder, + 'product_id' => $pr_arr->Id, + 'thumb' => "product-image-placeholder.png" + ); + } + } + $getAnnouncement = $UserModel->getAnnouncement($store_array[0]->Id); + + if (count($getAnnouncement) > 0) { + $data = $getAnnouncement[0]; + } else { + $data = (object) array( + 'Id' => 0, + 'StoreId' => "", + 'Announcement' => "", + 'IsActive' => 0, + 'DateCreated' => "" + ); + } + + return view('teamstore-sublayouts.index') + ->with('store_array', $store_array) + ->with('product_array', $product_array) + ->with('announcement', $data) + ->with('thumbnails', $thumbnails); + } + + public function storelist(Request $request) + { + // $analyticsData = Analytics::getMostVisitedPages(14, 50); + + // foreach($analyticsData as $key => $val){ + // if (strpos($val['url'], 'teamstore') !== false) { + // $teamstore[] = $val['url']; + // } + // } + + // foreach($teamstore as $t){ + // $sad = explode('/', $t); + + // if(count($sad) == 4){ + // $arr_teamstore[] = explode('?', $sad['3'])['0']; + + // } + // } + + // var_dump(array_unique($arr_teamstore)); + + $m = new TeamStoreModel; + $q = $request->input('q'); + $sort = $request->input('s'); + + if (isset($q) && isset($sort)) { + + if ($sort == "latest") { + $field = "Id"; + $sort_value = "DESC"; + } elseif ($sort == "al-desc") { + $field = "StoreName"; + $sort_value = "DESC"; + } elseif ($sort == "oldest") { + $field = "Id"; + $sort_value = "ASC"; + } else { + $field = "StoreName"; + $sort_value = "ASC"; + } + + if ($q != "") { + // keyword and sort + $stores_array = $m->selectTeamstoreSearch($field, $sort_value, $q); + } else { + // sort only + $stores_array = $m->selectTeamstoreFilter($field, $sort_value); + } + } else { + $field = "StoreName"; + $sort_value = "ASC"; + $sort = "al-asc"; + $stores_array = $m->selectTeamstoreFilter($field, $sort_value); + } + + return view('merchbay.index') + ->with('stores_array', $stores_array) + ->with('keyword', $q) + ->with('filter', $sort); + } + + public function checkTeamStorePassword(Request $request) + { + $m = new TeamStoreModel; + $post = $request->all(); + + $store_array = $m->checkStorePassword($post['store_id'], $post['password']); + + if ($store_array) { + $request->session()->put('teamstore_data_array', $store_array); + return redirect('teamstore/' . $store_array[0]->StoreUrl); + } else { + return redirect()->back()->with('errors', 'Invalid Password.'); + } + } + + private $teams_array; + + public function productDetails($teamStoreURL, $productURL) + { + $m = new TeamStoreModel; + $teams_array = array(); + $store_array = $m->selectTeamStore('StoreUrl', $teamStoreURL); + $product_array = $m->selectTeamStoreProducts('ProductURL', $productURL); + + $thumbnails_array = $m->getThumbnails($product_array[0]->Id); + $teams_array = $m->getTeams($product_array[0]->Id); + // $sizes_array = $m->getSizes(); + + if (empty($thumbnails_array)) { + + $data = (object) array( + 'Image' => 'product-image-placeholder.png', + 'ImageClass' => 'active' + ); + + + $thumbnails_array[] = $data; + } + + + $x = explode(",", $product_array[0]->AvailableSizes); + foreach ($x as $s) { + $h[] = $m->getSizesByBracket($s); + } + + foreach ($h as $d) { + foreach ($d as $g) { + $sizes_array[] = $g; + } + } + + if ($product_array[0]->ProductAvailableQty != null) { + $soldQty = $m->getSoldQty($product_array[0]->Id); + $availableQty = $product_array[0]->ProductAvailableQty - $soldQty[0]->SoldQty; + } else { + // echo 'no qty'; + $availableQty = null; + } + // $product_array[0]->ProductAvailableQty + + return view('teamstore-sublayouts.product-details') + ->with('store_array', $store_array) + ->with('product_array', $product_array) + ->with('thumbnails_array', $thumbnails_array) + ->with('teams_array', $teams_array) + ->with('sizes_array', $sizes_array) + ->with('available_qty', $availableQty); + } + + public function login(Request $request) + { + return view('teamstore-sublayouts.login'); + } + + public function clearSession(Request $request) + { + $request->session()->forget('teamstore_data_array'); + return redirect("{{ url('/') }}"); + } + + public function addNewRow(Request $request) + { + $post = $request->all(); + $TeamStoreModel = new TeamStoreModel; + + $item = $TeamStoreModel->selectTeamStoreProductByIdHash($post['p_id']); + $x = explode(",", $item[0]->AvailableSizes); + + foreach ($x as $s) { + $h[] = $TeamStoreModel->getSizesByBracket($s); + } + + foreach ($h as $d) { + foreach ($d as $g) { + $sizes_array[] = $g; + } + } + + if ($item[0]->ProductAvailableQty != null) { + $soldQty = $TeamStoreModel->getSoldQty($item[0]->Id); + $availableQty = $item[0]->ProductAvailableQty - $soldQty[0]->SoldQty; + } else { + // echo 'no qty'; + $availableQty = null; + } + + $handle_form = view('teamstore-sublayouts.forms.' . $item[0]->ProductForm) + ->with('sizes_array', $sizes_array) + ->with('availableQty', $availableQty) + ->render(); + + return $handle_form; + } + + public function addToCart(Request $request) + { + $post = $request->all(); + $m = new TeamStoreModel; + $hash_product_id = $post['p_id']; + + if ($request->session()->has('cartkey')) { + $cartKey = $request->session()->get('cartkey'); + } else { + $request->session()->put('cartkey', sha1(time() . str_random(6))); + $cartKey = $cartKey = $request->session()->get('cartkey'); + } + + $product_array = $m->selectTeamStoreProductByIdHash($hash_product_id); + $product_id = $product_array[0]->Id; + $TeamStoreId = $product_array[0]->TeamStoreId; + $ProductPrice = $product_array[0]->ProductPrice; + $ProductURL = $product_array[0]->ProductURL; + $product_form = $product_array[0]->ProductForm; + $design_code = $product_array[0]->DesignCode; + $product_name = $product_array[0]->ProductName; + $shipping_cost_id = $product_array[0]->ShippingCostId; + + $teamstore_array = $m->selectTeamStore('Id', $TeamStoreId); + + $store_url = $teamstore_array[0]->StoreUrl; + $store_id = $teamstore_array[0]->Id; + + if ($product_form == "jersey-and-shorts-form") { + $order_names = $post['order_names']; + $order_number = $post['order_number']; + $order_jersey_size = $post['order_jersey_size']; + $order_shorts_size = $post['order_shorts_size']; + + foreach ($order_names as $key => $val) { + + if ($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none") { + $final_price = $ProductPrice / 2; + } else { + $final_price = $ProductPrice; + } + + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Name' => $order_names[$key], + 'Number' => $order_number[$key], + 'JerseySize' => $order_jersey_size[$key], + 'ShortsSize' => $order_shorts_size[$key], + 'Price' => $final_price, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } elseif ($product_form == "tshirt-form") { + + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Size' => $post['uniformSize'], + 'Price' => $ProductPrice, + 'Quantity' => $post['quantity'], + 'ShippingCostId' => $shipping_cost_id + ); + } elseif ($product_form == "quantity-form") { + + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Price' => $ProductPrice, + 'Quantity' => $post['quantity'], + 'ShippingCostId' => $shipping_cost_id + ); + } elseif ($product_form == "name-number-form") { + + $order_names = $post['order_names']; + $order_number = $post['order_number']; + + foreach ($order_names as $key => $val) { + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Name' => $order_names[$key], + 'Number' => $order_number[$key], + 'Price' => $ProductPrice, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } elseif ($product_form == "name-number-size-form") { + + $order_names = $post['order_names']; + $order_number = $post['order_number']; + $order_size = $post['order_size']; + + foreach ($order_names as $key => $val) { + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Name' => $order_names[$key], + 'Size' => $order_size[$key], + 'Number' => $order_number[$key], + 'Price' => $ProductPrice, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } elseif ($product_form == "number-form") { + + $order_number = $post['order_number']; + + foreach ($order_number as $key => $val) { + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Number' => $order_number[$key], + 'Price' => $ProductPrice, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } elseif ($product_form == "name-name2-size-form") { + + $order_names = $post['order_names']; + $order_names2 = $post['order_names2']; + $order_size = $post['order_size']; + + foreach ($order_names as $key => $val) { + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Name' => $order_names[$key], + 'Name2' => $order_names2[$key], + 'Size' => $order_size[$key], + 'Price' => $ProductPrice, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } elseif ($product_form == "name-size-form") { + + $order_names = $post['order_names']; + $order_size = $post['order_size']; + + foreach ($order_names as $key => $val) { + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Name' => $order_names[$key], + 'Size' => $order_size[$key], + 'Price' => $ProductPrice, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } elseif ($product_form == "jersey-and-shorts-quantity-form") { + + $order_shorts_size = $post['order_shorts_size']; + $order_jersey_size = $post['order_jersey_size']; + $quantity = $post['quantity']; + + foreach ($order_jersey_size as $key => $val) { + if ($order_jersey_size[$key] != "none" || $order_shorts_size[$key] != "none") { + + if ($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none") { + $final_price = $ProductPrice / 2; + } else { + $final_price = $ProductPrice; + } + + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'JerseySize' => $order_jersey_size[$key], + 'ShortsSize' => $order_shorts_size[$key], + 'Price' => $final_price, + 'Quantity' => $quantity[$key], + 'ShippingCostId' => $shipping_cost_id + ); + } + } + } elseif ($product_form == "number-jersey-shorts-form") { + + $order_number = $post['order_number']; + $order_jersey_size = $post['order_jersey_size']; + $order_shorts_size = $post['order_shorts_size']; + + foreach ($order_number as $key => $val) { + + if ($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none") { + $final_price = $ProductPrice / 2; + } else { + $final_price = $ProductPrice; + } + + $items[] = array( + 'ProductId' => $product_id, + 'StoreURL' => $store_url, + 'StoreId' => $store_id, + 'FormUsed' => $product_form, + 'CartKey' => $cartKey, + 'DesignCode' => $design_code, + 'ProductURL' => $ProductURL, + 'ProductName' => $product_name, + 'Number' => $order_number[$key], + 'JerseySize' => $order_jersey_size[$key], + 'ShortsSize' => $order_shorts_size[$key], + 'Price' => $final_price, + 'Quantity' => 1, + 'ShippingCostId' => $shipping_cost_id + ); + } + } + + $i = $m->insertToCart($items); + + if ($i['i']) { + return response()->json(array( + 'success' => true + )); + } + + + return response()->json(array( + 'success' => false, + 'message' => "Something went wrong. Please refresh the page." + )); + } + + public function cart(Request $request) + { + + $m = new TeamStoreModel; + $cartKey = $request->session()->get('cartkey'); + $items = $m->myCart($cartKey); + $getSubtotal = $m->getSubtotal($cartKey); + $items_group = $m->myCartGroup($cartKey); + //var_dump($items_group); + $grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey); + if ($grouped_item) { + $defId = $grouped_item[0]->StoreId; + } else { + $defId = 0; + } + + $item_thumbs = $m->selectDisplayCartThumb(); + $store_array = $m->selectTeamStore('Id', $defId); + + + if ($items) { + $voucherIds = array(); + foreach ($items as $item) { + if ($item->VoucherId != null) { + $voucherIds[] = $item->VoucherId; + } + } + $vouchers = $m->selectVoucherWhereIn($voucherIds); + } + + $totalValue = 0; + if (!empty($vouchers)) { + foreach ($vouchers as $voucher) { + $totalValue = $totalValue + $voucher->VoucherValue; + if ($voucher->VoucherType == "Percentage") { + $voucherData = array( + 'totalValue' => $totalValue, + 'type' => 'Percentage' + ); + } else { + $voucherData = array( + 'totalValue' => $totalValue, + 'type' => 'Flat' + ); + } + } + + if ($voucherData['type'] == "Percentage") { + $getPercentageValue = $voucherData['totalValue'] / 100; + $getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue); + $finalSubTotal = $getSubtotal[0]->Subtotal - $getDiscountValue; + } else { + //Flat voucher computation here.. + } + } else { + $finalSubTotal = $getSubtotal[0]->Subtotal; + } + + return view('sublayouts.cart') + ->with('item_group', $items_group) + ->with('row', $items) + ->with('img_thumb', $item_thumbs) + ->with('getSubtotal', $finalSubTotal) + ->with('store_array', $store_array); + } + + public function addVoucher(Request $request) + { + $cartKey = $request->session()->get('cartkey'); + + if ($cartKey == "") { + return false; + } + + $TeamStoreModel = new TeamStoreModel; + $post = $request->all(); + + $grouped_item = $TeamStoreModel->selectTeamStoreGroupByCartKey($cartKey); + $store_id = $grouped_item[0]->StoreId; + $vocher = $post['voucher']; + $store_array = $TeamStoreModel->selectTeamStore('Id', $grouped_item[0]->StoreId); + $getSubtotal = $TeamStoreModel->getSubtotal($cartKey); + + $data = array( + 'store_id' => $store_id, + 'voucher' => $vocher + ); + + $getVoucher = $TeamStoreModel->selectVoucher($data); + + if ($getVoucher) { + $items = $TeamStoreModel->myCart($cartKey); + + // check if if voucher is already in used; + foreach ($items as $item) { + if ($getVoucher[0]->Id == $item->VoucherId) { + return response()->json(array( + 'success' => false, + 'message' => 'This voucher is already in used.' + )); + } + } + + // insert vocuher to cart_tmp + $voucherData = array( + 'VoucherId' => $getVoucher[0]->Id, + 'StoreURL' => $store_array[0]->StoreUrl, + 'StoreId' => $store_array[0]->Id, + 'CartKey' => $cartKey, + 'ProductName' => $getVoucher[0]->VoucherCode, + 'Price' => '00.00', + 'Quantity' => 1 + ); + + $i = $TeamStoreModel->insertToCart($voucherData); + $lastId = $i['lastId']; + $removeItemURL = url('removeitem') . '/' . $lastId; + + //get all voucher used. + $updated_items = $TeamStoreModel->myCart($cartKey); + foreach ($updated_items as $item) { + if ($item->VoucherId != null) { + $voucherIds[] = $item->VoucherId; + } + } + + $vouchers = $TeamStoreModel->selectVoucherWhereIn($voucherIds); + + $totalValue = 0; + if (!empty($vouchers)) { + foreach ($vouchers as $voucher) { + $totalValue = $totalValue + $voucher->VoucherValue; + if ($voucher->VoucherType == "Percentage") { + $voucherData = array( + 'totalValue' => $totalValue, + 'type' => 'Percentage' + ); + } else { + $voucherData = array( + 'totalValue' => $totalValue, + 'type' => 'Flat' + ); + } + } + + if ($voucherData['type'] == "Percentage") { + $getPercentageValue = $voucherData['totalValue'] / 100; + $getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue); + $finalSubTotal = $getSubtotal[0]->Subtotal - $getDiscountValue; + } else { + //Flat voucher computation here.. + } + } else { + $finalSubTotal = $getSubtotal[0]->Subtotal; + } + + if ($getVoucher[0]->VoucherType == "Percentage") { + $offData = $getVoucher[0]->VoucherValue . '%'; + } else { + $offData = $getVoucher[0]->VoucherValue . ' ' . $store_array[0]->StoreCurrency; + } + + + + $message = '
    + + + +
    '; + + // return success + return response()->json(array( + 'success' => true, + 'message' => $message, + 'subtotal' => $finalSubTotal + )); + } else { + + return response()->json(array( + 'success' => false, + 'message' => "Sorry, the voucher code is invalid. Please try again." + )); + } + } + + public function checkout(Request $request) + { + $m = new TeamStoreModel; + $cartKey = $request->session()->get('cartkey'); + + $usermodel = new UserModel; + $userId = Auth::user()->id; + + $array_address_book = $usermodel->selectAddresBook('UserId', $userId); + + // var_dump($array_address_book); + + $items = $m->myCart($cartKey); + + $getSubtotal = $m->getSubtotal($cartKey); + + return view('sublayouts.checkout') + ->with('row', $items) + ->with('getSubtotal', $getSubtotal) + ->with('array_address_book', $array_address_book); + } + + public function mail() + { + // $user = User::find(1)->toArray(); + + // var_dump($user); + + // Mail::send('emails.mailExample', $user, function($message) use ($user) { + // $message->to($user->email); + // $message->subject('E-Mail Example'); + // }); + + + // dd('Mail Send Successfully'); + Mail::raw('Text to e-mail', function ($message) { + $message->from('us@example.com', 'Laravel'); + + $message->to('frank.begornia@yahoo.com')->subject('sample email'); + }); + } +} diff --git a/app/Http/Controllers/user/UserController.php b/app/Http/Controllers/user/UserController.php new file mode 100644 index 0000000..c118c92 --- /dev/null +++ b/app/Http/Controllers/user/UserController.php @@ -0,0 +1,1171 @@ +role; + + if($userRole == "store_owner"){ + $storeId = Auth::user()->store_id; + + $countStoreOrder = $m->countStoreOrder($storeId); + $storeIncome = $m->storeIncome($storeId); + $countStoreProduct = $m->countStoreProduct($storeId); + $countStorePublishedProduct = $m->countStorePublishedProduct($storeId); + + $post_data = array( + 'isStoreOwner' => true, + 'store_order' => $countStoreOrder[0]->count_order, + 'store_income' => $storeIncome[0]->store_income, + 'store_product_count' => $countStoreProduct[0]->store_product_count, + 'store_published_product' => $countStorePublishedProduct[0]->store_published_product + ); + }else{ + $post_data = array( + 'isStoreOwner' => false, + 'store_order' => "", + 'store_income' => "", + 'store_product_count' => "", + 'store_published_product' => "" + ); + } + + // $post_data = json_encode($post_data, JSON_FORCE_OBJECT); + return view('user-layouts.index')->with('data', $post_data); + + } + + public function addressBook(){ + $m = new UserModel; + $userId = Auth::user()->id; + + $array_address_book = $m->selectAddresBook('UserId', $userId); + + return view('user-layouts.address_book') + ->with('array_address_book', $array_address_book); + + } + + public function createAddressBook(){ + + return view('user-layouts.create_address_book'); + + } + + public function saveAddressBook(Request $request){ + $post = $request->all(); + $m = new UserModel; + + $userId = Auth::user()->id; + + $data = array( + 'UserId' => $userId, + 'Fullname' => $post['fullname'], + 'ContactNumber' => $post['mobilenumber'], + 'OtherNotes' => $post['othernotes'], + 'Address' => $post['address'], + 'State' => $post['state'], + 'City' => $post['city'], + 'ZipCode' => $post['zipcode'] + ); + + echo $i = $m->insertAddressBook($data); + + } + + public function editAddressBook($id){ + $m = new UserModel; + $userId = Auth::user()->id; + + $array_address_book = $m->selectAddresBook('Id', $id); + + if($array_address_book[0]->UserId != $userId){ + return redirect('user/address-book'); + } + + return view('user-layouts.edit_address_book') + ->with('array_address_book', $array_address_book); + + } + + public function updateAddressBook(Request $request){ + $post = $request->all(); + $m = new UserModel; + + $userId = Auth::user()->id; + $id = $post['id']; + + $data = array( + 'UserId' => $userId, + 'Fullname' => $post['fullname'], + 'ContactNumber' => $post['mobilenumber'], + 'OtherNotes' => $post['othernotes'], + 'Address' => $post['address'], + 'State' => $post['state'], + 'City' => $post['city'], + 'ZipCode' => $post['zipcode'] + ); + + echo $i = $m->saveUpdateAddressBook($data, $id); + + } + + public function profile(){ + $m = new UserModel; + $userId = Auth::user()->id; + + $array_profile_info = $m->selectProfileInfo($userId); + return view('user-layouts.profile') + ->with('array_profile_info', $array_profile_info); + } + + public function editProfile(){ + $m = new UserModel; + $userId = Auth::user()->id; + + $array_profile_info = $m->selectProfileInfo($userId); + return view('user-layouts.edit_profile') + ->with('array_profile_info', $array_profile_info); + + } + + public function updateProfile(Request $request){ + $post = $request->all(); + $m = new UserModel; + + $userId = Auth::user()->id; + + $user_logins_data = array( + 'name' => $post['fullname'], + 'email' => $post['email'] + ); + + $user_info_data = array( + 'UserId' => $userId, + 'ContactNumber' => $post['contactnumber'], + 'Gender' => $post['gender'], + 'Birthday' => date('Y-m-d', strtotime($post['birthday'])) + ); + + $i = $m->saveUpdateUserLogins($user_logins_data, $userId); + $i1 = $m->saveUpdateUserInfo($user_info_data, $userId); + + + return $i; + } + + public function changePassword(){ + return view('user-layouts.change_password'); + } + + public function updatePassword(Request $request){ + $post = $request->all(); + $m = new UserModel; + $c_password = Auth::user()->password; + $userId = Auth::user()->id; + + if(!(Hash::check($post['current_password'], $c_password))){ + $message = "Your current password does not matches with the password you provided. Please try again."; + return $message; + } + + if(strcmp($post['current_password'], $post['new_password']) == 0){ + //Current password and new password are same + $message = "New Password cannot be same as your current password. Please choose a different password."; + return $message; + } + + if ($post['new_password'] != $post['con_new_password']) { + // The passwords matches + $message = "Password confirmation and New Password must match. Please try again."; + return $message; + } + + + $i = $m->saveUpdatePassword(bcrypt($post['new_password']) , $userId); + + return $i; + } + + public function orders(){ + $m = new UserModel; + $userId = Auth::user()->id; + $array_payment_details = $m->selectPaymentDetails('UserId', $userId); + + // var_dump($array_payment_details); + + // var_dump($array_payment_details); + return view('user-layouts.orders')->with('array_payment_details', $array_payment_details); + } + + + public function myDesigns(){ + $m = new UserModel; + $userId = Auth::user()->id; + + $array_client_designs = $m->selectClientDesigns($userId); + // var_dump($array_client_designs); + return view('user-layouts.my-design')->with('array_client_designs', $array_client_designs); + } + + public function viewDesign($designCode){ + $m = new UserModel; + $newMainModel = new MainModel; + $userId = Auth::user()->id; + $array_client_designs = $m->selectClientDesignsbyCode($designCode); + + // check if its your design + if($userId != $array_client_designs[0]->ClientId){ + return redirect()->back(); + } + + $array_template_paths = $m->selectTemplatePaths('TemplateCode', $array_client_designs[0]->TemplateCode); + $array_cat_name = $newMainModel->selectCategoryName($array_client_designs[0]->TemplateCode); + + return view('user-layouts.view-design') + ->with('array_client_designs', $array_client_designs) + ->with('array_template_paths', $array_template_paths) + ->with('array_cat_name', $array_cat_name); + } + + public function updateDesignDetails(Request $request){ + $post = $request->all(); + $m = new UserModel; + + $design_name = $post['design_name']; + $design_code = $post['design_code']; + + $client_design_data = array( + 'DesignName' => $design_name + ); + + $i = $m->updateClientDesign($client_design_data, $design_code); + + return $i; + + } + + public function store(){ + $m = new UserModel; + $userRole = Auth::user()->role; + $array_store_info = array(); + + if($userRole == "store_owner"){ + $storeId = Auth::user()->store_id; + + $array_store_info = $m->selectStoreInfo($storeId); + + return redirect('teamstore/'. $array_store_info[0]->StoreUrl); + + + } + + } + + public function storeItems(){ + $thumbnails = array(); + $newUserModel = new UserModel; + $newTeamStoreModel = new TeamStoreModel; + + $user_role = Auth::user()->role; + $store_id = Auth::user()->store_id; + + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + $product_array = $newTeamStoreModel->selectTeamStoreProducts('TeamStoreId', $store_id); + + foreach ($product_array as $p => $pr_arr) { + + $thumbnails_array = $newTeamStoreModel->getProductThumbnails($pr_arr->Id); + + if(!empty($thumbnails_array)){ + foreach ($thumbnails_array as $t => $thumb) { + + if($thumb->ImageClass == 'custom'){ + $displayThumbnails = $thumb->Image; + break; + } + + if($thumb->ImageClass == 'active'){ + $displayThumbnails = $thumb->Image; + break; + } + } + + $thumbnails[] = array( + 'folder' => $store_array[0]->ImageFolder, + 'product_id' => $pr_arr->Id, + 'thumb' => $displayThumbnails + ); + + }else{ + $thumbnails[] = array( + 'folder' => $store_array[0]->ImageFolder, + 'product_id' => $pr_arr->Id, + 'thumb' => "product-image-placeholder.png" + ); + } + + } + + return view('user-layouts.store_items')->with('store_array', $store_array) + ->with('product_array', $product_array) + ->with('thumbnails', $thumbnails); + } + + public function viewStoreItem($url){ + $product_array = array(); + $newUserModel = new UserModel; + $newTeamStoreModel = new TeamStoreModel; + + $product_array = $newTeamStoreModel->selectTeamStoreProducts('ProductURL', $url); + $thumbnails_array = $newTeamStoreModel->getThumbnails($product_array[0]->Id); + $available_size = explode(",", $product_array[0]->AvailableSizes); + $shipping_cost = $newUserModel->selectShippingCost(); + + return view('user-layouts.view-store-item')->with('product_array', $product_array) + ->with('available_size', $available_size) + ->with('thumbnails_array', $thumbnails_array) + ->with('shipping_cost', $shipping_cost); + + + } + + + public function storeItemUpdate(Request $request){ + $post = $request->all(); + $newTeamStoreModel = new TeamStoreModel; + + if($post['shipping_cost'] == 0){ + $shipping_cost_id = null; + }else{ + $shipping_cost_id = $post['shipping_cost']; + } + + $item_url = $post['item_url']; + $data = array( + 'ProductName' => $post['itemName'], + 'ProductPrice' => str_replace('$ ', '', $post['item_price']), + 'ProductDescription' => $post['itemDescription'], + 'PrivacyStatus' => $post['item_privacy'], + 'ProductForm' => $post['itemForm'], + 'AvailableSizes' => implode(",", $post['available_size']), + 'ShippingCostId' => $shipping_cost_id + + ); + + $i = $newTeamStoreModel->updateStoreItem($data, $item_url); + + return $i; + } + + public function storeSetting() + { + $TeamStoreModel = new TeamStoreModel; + $store_id = Auth::user()->store_id; + + $store_array = $TeamStoreModel->selectTeamStore('Id', $store_id); + return view('user-layouts.store_setting') + ->with('store_array', $store_array); + } + + public function emailVerify() + { + $m = new UserModel; + $userId = Auth::user()->id; + $email_is_verified = Auth::user()->email_is_verified; + + if($email_is_verified == 0){ + $array_profile_info = $m->selectProfileInfo($userId); + return view('user-layouts.email_verify') + ->with('array_profile_info', $array_profile_info); + } + + return redirect('user/profile'); + + } + + + public function resendVericationCode(Request $request){ + $post = $request->all(); + $random_hash = rand(1000, 9999); + + $newUserModel = new UserModel; + + $emailDetails = [ + 'receiver' => $post['email'], + 'subject' => 'CREW Sportswear Email Verification Code', + 'verification_code' => $random_hash + ]; + + Mail::send('emails.resend_code', $emailDetails, function($message) use ($emailDetails) { + + $message->from('no-reply@crewsportswear.com', 'CREW Sportswear'); + $message->to($emailDetails['receiver'])->subject('CREW Sportswear Email Verification Code'); + + }); + + if( count(Mail::failures()) > 0 ) { + + echo '0'; + + }else{ + $data = array( + 'EmailAddress' => $post['email'], + 'VerCode' => $random_hash + ); + + $i = $newUserModel->saveResendCode($data); + echo $i; + } + } + + + public function verifyCode(Request $request){ + $post = $request->all(); + + $verification_code = $post['verification_code']; + $userEmail = Auth::user()->email; + + $newUserModel = new UserModel; + $userId = Auth::user()->id; + + $data = array( + 'EmailAddress' => $userEmail, + 'Code' => $verification_code + ); + + $i = $newUserModel->validateCode($data); + // var_dump($i); + + if($i){ + + $user_logins_data = array( + 'email_is_verified' => 1 + ); + + $newUserModel->saveUpdateUserLogins($user_logins_data, $userId); + + return response()->json(array( + 'success' => true, + 'message'=>'Your email is successfully verified.' + )); + + }else{ + return response()->json(array( + 'success' => false, + 'message'=>'Invalid verification code.' + )); + } + } + + public function orderDetails($ck){ + $newUserModel = new UserModel; + $order_item_array = $newUserModel->selectOrderItem($ck); + $item_goup_array = $newUserModel->itemGroup($ck); + $item_thumbs = $newUserModel->selectDisplayItemThumb(); + $array_payment_details = $newUserModel->selectPaymentDetails('CartKey', $ck); + return view('user-layouts.order_details') + ->with('array_payment_details', $array_payment_details) + ->with('img_thumb', $item_thumbs) + ->with('item_goup_array', $item_goup_array) + ->with('order_item_array', $order_item_array); + } + + public function sellDesign($designCode){ + $m = new UserModel; + $newMainModel = new MainModel; + $newTeamStoreModel = new TeamStoreModel; + $userId = Auth::user()->id; + $store_id = Auth::user()->store_id; + $array_client_designs = $m->selectClientDesignsbyCode($designCode); + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + // check if its your design + if($userId != $array_client_designs[0]->ClientId){ + return redirect()->back(); + } + + // var_dump($store_array); + + $array_template_paths = $m->selectTemplatePaths('TemplateCode', $array_client_designs[0]->TemplateCode); + $array_cat_name = $newMainModel->selectCategoryName($array_client_designs[0]->TemplateCode); + + return view('user-layouts.sell_design') + ->with('array_client_designs', $array_client_designs) + ->with('array_template_paths', $array_template_paths) + ->with('store_array', $store_array) + ->with('array_cat_name', $array_cat_name); + } + + public function buyDesign($designCode){ + $m = new UserModel; + $newMainModel = new MainModel; + $newTeamStoreModel = new TeamStoreModel; + $userId = Auth::user()->id; + // $store_id = Auth::user()->store_id; + $array_client_designs = $m->selectClientDesignsbyCode($designCode); + // $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + // check if its your design + if($userId != $array_client_designs[0]->ClientId){ + return redirect()->back(); + } + + // var_dump($store_array); + + $array_template_paths = $m->selectTemplatePaths('TemplateCode', $array_client_designs[0]->TemplateCode); + $array_cat_name = $newMainModel->selectCategoryName($array_client_designs[0]->TemplateCode); + + return view('user-layouts.buy_design') + ->with('array_client_designs', $array_client_designs) + ->with('array_template_paths', $array_template_paths) + // ->with('store_array', $store_array) + ->with('array_cat_name', $array_cat_name); + + } + + //save item from my design // + public function saveNewStoreItem(Request $request){ + $post = $request->all(); + $UserModel = new UserModel; + $newTeamStoreModel = new TeamStoreModel; + $getYear = date('y'); + + $store_id = Auth::user()->store_id; + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + + $templateCode = $post['templateCode']; + $designCode = $post['designCode']; + $itemName = $post['itemName']; + $itemDescription = $post['itemDescription']; + $itemPrice = $post['itemPrice']; + $itemForm = $post['itemForm']; + $itemUrl = $store_array[0]->StoreUrl . '-' . $post['itemUrl']; + $itemPrivacy = $post['itemPrivacy']; + $available_size = implode(",", $_POST['available_size']); + + $check_product_url = array( + 'ProductURL' => $itemUrl + ); + + $validator = Validator::make($check_product_url, [ + 'ProductURL' => 'unique:teamstore_products' + ], + [ + 'ProductURL.unique' => 'The Item URL has already been taken.', + ]); + + + if ($validator->fails()) + { + $errors = ""; + // var_dump(($validator->errors()->all())); + foreach($validator->errors()->all() as $error){ + $errors .= "
  • ".$error."
  • "; + } + + $message = ' +
    + +

    ERROR:

    + '.$errors. + '
    '; + + return response()->json(array( + 'success' => false, + 'message' => $message + )); + } + + $data = array( + 'TeamStoreId' => $store_id, + 'ProductName' => $itemName, + 'ProductPrice' => str_replace('$ ', '', $itemPrice), + 'ProductDescription'=> $itemDescription, + 'ProductURL' => $itemUrl, + 'ProductForm' => $itemForm, + 'AvailableSizes' => $available_size, + 'PrivacyStatus' => $itemPrivacy, + 'TemplateCode' => $templateCode, + 'DesignCode' => $designCode, + ); + + $id = $UserModel->insertNewProduct($data); // product item id + // echo $i; + + $array_template_paths = $UserModel->selectTemplatePaths('TemplateCode', $templateCode); + + foreach($array_template_paths as $key => $row1){ + if($key == 0){ + $thumb = $designCode . '-front-thumbnail.png'; + $class = "active"; + }else{ + $thumb = $designCode . '-' . strtolower($row1->Side) . '-thumbnail.png'; + $class = null; + } + + $thumbs = $data = array( + 'ProductId' => $id, + 'Image' => $thumb, + 'ImageClass' =>$class + ); + + $UserModel->insertNewProductThumbnails($thumbs); + + + } + + $prod_code = array('ProductCode' => $getYear . '-' .str_pad($id, 10,'0', STR_PAD_LEFT)); + $i = $UserModel->updateProductCode($prod_code, $id); + + return response()->json(array( + 'success' => true + )); + + } + + function addStoreItem(){ + $newTeamStoreModel = new TeamStoreModel; + + $user_role = Auth::user()->role; + $store_id = Auth::user()->store_id; + + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + return view('user-layouts.add_item')->with('store_array', $store_array); + } + + //manually uploading item + function saveNewItem(Request $request){ + + $post = $request->all(); + // var_dump($post['imgupload']); + $UserModel = new UserModel; + $newTeamStoreModel = new TeamStoreModel; + $getYear = date('y'); + + $store_id = Auth::user()->store_id; + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + + $templateCode = $post['templateCode']; + $designCode = $post['designCode']; + $itemName = $post['itemName']; + $itemDescription = $post['itemDescription']; + $itemPrice = $post['itemPrice']; + $itemForm = $post['itemForm']; + $itemUrl = $store_array[0]->StoreUrl . '-' . $post['itemUrl']; + $itemPrivacy = $post['itemPrivacy']; + $available_size = implode(",", $_POST['available_size']); + + + + $check_product_url = array( + 'ProductURL' => $itemUrl + ); + + $validator = Validator::make($check_product_url, [ + 'ProductURL' => 'unique:teamstore_products' + ], + [ + 'ProductURL.unique' => 'The Item URL has already been taken.', + ]); + + + if ($validator->fails()) + { + $errors = ""; + // var_dump(($validator->errors()->all())); + foreach($validator->errors()->all() as $error){ + $errors .= "
  • ".$error."
  • "; + } + + $message = ' +
    + +

    ERROR:

    + '.$errors. + '
    '; + + return response()->json(array( + 'success' => false, + 'message' => $message + )); + } + + $data = array( + 'TeamStoreId' => $store_id, + 'ProductName' => $itemName, + 'ProductPrice' => str_replace('$ ', '', $itemPrice), + 'ProductDescription'=> $itemDescription, + 'ProductURL' => $itemUrl, + 'ProductForm' => $itemForm, + 'AvailableSizes' => $available_size, + 'PrivacyStatus' => $itemPrivacy, + 'TemplateCode' => $templateCode, + 'DesignCode' => $designCode, + ); + + $id = $UserModel->insertNewProduct($data); // product item id + // echo $id; + + for($i = 0; $i < count($post['imgupload']); $i++){ + $rawName = date('Ymd') . "-" . time().'-'.$request->file('imgupload')[$i]->getClientOriginalName(); + $imageExt = $request->file('imgupload')[$i]->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + $NewImageName = $custom_file_name.'.'.$imageExt; + $thumbnail = $NewImageName; + + if($i == 0){ + $imageClass = "active"; + }else{ + $imageClass = null; + } + + $thumbs = $data = array( + 'ProductId' => $id, + 'Image' => $thumbnail, + 'ImageClass' =>$imageClass + ); + + $u = $UserModel->insertNewProductThumbnails($thumbs); + // var_dump($thumbs); + Storage::disk('sftp')->put($thumbnail, fopen($request->file('imgupload')[$i], 'r+')); //live + //Storage::disk('localdir')->put($thumbnail, fopen($request->file('imgupload')[$i], 'r+')); + // var_dump($s); + } + + $prod_code = array('ProductCode' => $getYear . '-' .str_pad($id, 10,'0', STR_PAD_LEFT)); + $i = $UserModel->updateProductCode($prod_code, $id); + + + return response()->json(array( + 'success' => true, + 'message' => 'success' + )); + + } + + function saveNewItemImage(Request $request){ + $post = $request->all(); + $UserModel = new UserModel; + $getYear = date('y'); + $id = $post['_id']; + + $getActiveDisplay = $UserModel->selectDisplayItemThumbById($id); + + for($i = 0; $i < count($post['upload_images']); $i++){ + $rawName = date('Ymd') . "-" . time().'-'.$request->file('upload_images')[$i]->getClientOriginalName(); + $imageExt = $request->file('upload_images')[$i]->getClientOriginalExtension(); + + $custom_file_name = str_replace(' ','-',strtolower($rawName)); + $custom_file_name = preg_replace("/\.[^.\s]{3,4}$/", "", $custom_file_name); + $NewImageName = $custom_file_name.'.'.$imageExt; + $thumbnail = $NewImageName; + + if($i == 0 && empty($getActiveDisplay)){ + $imageClass = "active"; + }else{ + $imageClass = null; + } + + $thumbs = $data = array( + 'ProductId' => $id, + 'Image' => $thumbnail, + 'ImageClass' =>$imageClass + ); + + $u = $UserModel->insertNewProductThumbnails($thumbs); + Storage::disk('sftp')->put($thumbnail, fopen($request->file('upload_images')[$i], 'r+')); //live + //Storage::disk('localdir')->put($thumbnail, fopen($request->file('upload_images')[$i], 'r+')); + + } + + + return response()->json(array( + 'success' => true, + 'message' => 'success' + )); + + } + + function deleteImageThumb(Request $request){ + $file = $request->thumb_filename; + $id = $request->thumb_id; + $UserModel = new UserModel; + + $storagePath = Storage::disk('sftp')->getDriver()->getAdapter()->getPathPrefix(); + if(file_exists($storagePath.$file)) { + unlink($storagePath.$file); + } + + $i = $UserModel->deleteImageThumb('Id', $id); + + return response()->json(array( + 'success' => true, + 'message' => 'success', + 'delete_row' => 'item-' . $id + )); + + } + + function updateActiveThumbnail(Request $request){ + $post = $request->all(); + $UserModel = new UserModel; + $i = $UserModel->updateActiveThumb($post['id'], $post['product_id']); + // var_dump($i); + + } + + function saveThumbnailOrdering(Request $request){ + $post = $request->all(); + $arrayItems = $post['item']; + $order = 1; + $UserModel = new UserModel; + + foreach ($arrayItems as $item) { + $i = $UserModel->updateThumbnailOrdering($order, $item); + $order++; + } + + return response()->json(array( + 'success' => true, + 'message' => 'success' + )); + } + + function saveItemOrdering(Request $request){ + $post = $request->all(); + $arrayItems = $post['order_number']; + $order = 1; + $UserModel = new UserModel; + + foreach ($arrayItems as $item) { + $i = $UserModel->updateItemOrdering($order, $item); + $order++; + } + + return response()->json(array( + 'success' => true, + 'message' => 'success' + )); + } + + + + function storeSettingUpdate(Request $request){ + $post = $request->all(); + $UserModel = new UserModel; + + $store_id = Auth::user()->store_id; + $store_name = $post['store_name']; + $store_url = $post['store_url']; + $orig_store_url = $post['orig_store_url']; + + + if($post['store_status'] == "Public"){ + $store_status = "true"; + }else{ + $store_status = "false"; + } + + if(isset($post['set_store_password'])){ + $store_password = $post['store_password']; + }else{ + $store_password = null; + } + + if($request->file('store_logo') != null){ + $store_logo_name = 'logo.'. $request->file('store_logo')->getClientOriginalExtension(); + }else{ + $store_logo_name = $post['orig_store_logo']; + } + + if($request->file('store_banner') != null){ + $store_banner_name = 'banner.'. $request->file('store_banner')->getClientOriginalExtension(); + }else{ + $store_banner_name = $post['orig_store_banner']; + } + + + if($orig_store_url != $store_url){ + + $check_store_url = array( + 'StoreUrl' => $store_url + ); + + $validator = Validator::make($check_store_url, [ + 'StoreUrl' => 'unique:teamstores' + ], + [ + 'StoreUrl.unique' => 'The Store URL has already been taken.', + ]); + + + if ($validator->fails()) + { + $errors = ""; + + foreach($validator->errors()->all() as $error){ + $errors .= "
  • ".$error."
  • "; + } + + return response()->json(array( + 'success' => false, + 'clearform' => false, + 'message' => $errors + )); + } + + + + } + + $data = array( + 'StoreUrl' => $store_url, + // 'ImageFolder' => $store_url, + 'Password' => $store_password, + 'HashId' => md5($store_url), + 'StoreName' => $store_name, + 'StoreLogo' => $store_logo_name, + 'StoreBanner' => $store_banner_name, + 'IsActive' => $store_status + ); + + // var_dump($data); + + + $res = $UserModel->updateTeamstore($store_id, $data); + // var_dump($res); + // if($res){ + if($request->file('store_logo') != null){ + Storage::disk('uploads')->put('/teamstore/'. $orig_store_url . '/' . $store_logo_name, fopen($request->file('store_logo'), 'r+')); + } + + if($request->file('store_banner') != null){ + Storage::disk('uploads')->put('/teamstore/'. $orig_store_url . '/' . $store_banner_name, fopen($request->file('store_banner'), 'r+')); + } + + return response()->json(array( + 'success' => true, + 'clearform' => false, + 'message'=>'Store is successfully updated.' + )); + + // }else{ + // return response()->json(array( + // 'success' => false, + // 'clearform' => true, + // 'message' => 'Something went wrong. Please refresh the page and try again.' + // )); + // } + + } + + function storeOrders(){ + $UserModel = new UserModel; + $newTeamStoreModel = new TeamStoreModel; + $store_id = Auth::user()->store_id; + + $array_store_orders = $UserModel->selectStoreOrders($store_id); + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + + return view('user-layouts.store-orders') + ->with('store_array', $store_array) + ->with('array_store_orders', $array_store_orders); + } + + function showStoreOrderDetails(Request $request){ + + $post = $request->all(); + // var_dump($post['pid']); + $UserModel = new UserModel; + $array_payment_details = $UserModel->selectPaymentDetails('CartKey', $post['ck']); + $array_shipping_add = $UserModel->selectShippingAddress('PaymentDetail_Id', $array_payment_details[0]->Id); + + $array_thumbnail_display = $UserModel->selectDisplayItemThumbById($post['pid']); + $array_item = $UserModel->selectOrder('Id', $post['id']); + $handle_order_detail_body = view('user-layouts.order-details-body') + ->with('array_payment_details', $array_payment_details) + ->with('array_shipping_add', $array_shipping_add) + ->with('array_thumbnail_display', $array_thumbnail_display) + ->with('array_item', $array_item) + ->render(); + + + return response()->json(array( + 'success' => true, + 'payment_details_response' => $handle_order_detail_body, + 'thumb' => $array_thumbnail_display, + 'item' => $array_item + )); + } + + + function itemStoreReArrange(){ + $thumbnails = array(); + $newUserModel = new UserModel; + $newTeamStoreModel = new TeamStoreModel; + + $user_role = Auth::user()->role; + $store_id = Auth::user()->store_id; + + $store_array = $newTeamStoreModel->selectTeamStore('Id', $store_id); + $product_array = $newTeamStoreModel->selectTeamStoreProducts('TeamStoreId', $store_id); + + foreach ($product_array as $p => $pr_arr) { + + $thumbnails_array = $newTeamStoreModel->getProductThumbnails($pr_arr->Id); + + if(!empty($thumbnails_array)){ + foreach ($thumbnails_array as $t => $thumb) { + + if($thumb->ImageClass == 'custom'){ + $displayThumbnails = $thumb->Image; + break; + } + + if($thumb->ImageClass == 'active'){ + $displayThumbnails = $thumb->Image; + break; + } + } + + $thumbnails[] = array( + 'folder' => $store_array[0]->ImageFolder, + 'product_id' => $pr_arr->Id, + 'thumb' => $displayThumbnails + ); + + }else{ + $thumbnails[] = array( + 'folder' => $store_array[0]->ImageFolder, + 'product_id' => $pr_arr->Id, + 'thumb' => "product-image-placeholder.png" + ); + } + + } + + return view('user-layouts.store_items_arrange')->with('store_array', $store_array) + ->with('product_array', $product_array) + ->with('thumbnails', $thumbnails); + } + + function deleteStoreItem(Request $request){ + // + $post = $request->all(); + + $UserModel = new UserModel; + $res = $UserModel->deleteStoreItem($post['id']); + + + } + + + function announcementIndex(){ + $UserModel = new UserModel; + $storeId = Auth::user()->store_id; + + $getAnnouncement = $UserModel->getAnnouncement($storeId); + + if(count($getAnnouncement) > 0){ + $data = $getAnnouncement[0]; + }else{ + $data = (object) array( + 'Id' => 0, + 'StoreId' => "", + 'Announcement' => "", + 'IsActive' => 0, + 'DateCreated' => "" + ); + } + return view('user-layouts.announcement') + ->with("data", $data) + ->render(); + + } + + + function announcementUpdateSave(Request $request){ + $post = $request->all(); + $UserModel = new UserModel; + + $storeId = Auth::user()->store_id; + + $getAnnouncement = $UserModel->getAnnouncement($storeId); + $data = array( + 'StoreId' => $storeId, + 'Announcement' => htmlentities($post['announcementInput']) + ); + + // var_dump($getAnnouncement[0]->Id); + + if(count($getAnnouncement) > 0){ + $response = $UserModel->updateAnnouncement($getAnnouncement[0]->Id, $data); + }else{ + $data['IsActive'] = 0; + $response = $UserModel->saveNewAnnouncement($data); + } + + try { + return response()->json(array( + 'success' => true, + 'message' => "Announcement is successfully updated." + )); + } catch (\Throwable $th) { + //throw $th; + return response()->json(array( + 'success' => false, + 'message' => $th + )); + } + } + + function announcementUpdateStatus(Request $request){ + $post = $request->all(); + $UserModel = new UserModel; + + $storeId = Auth::user()->store_id; + + $getAnnouncement = $UserModel->getAnnouncement($storeId); + + if(!count($getAnnouncement)){ + return response()->json(array( + 'success' => false, + 'message' => 'Please update your announcement first.' + )); + } + + + $data = array( + 'IsActive' => ($post['IsActive'] == 'true') ? 1 : 0 + ); + + $UserModel->updateAnnouncement($getAnnouncement[0]->Id, $data); + + return response()->json(array( + 'success' => true, + 'message' => "Announcement is successfully updated." + )); + + // var_dump($data); + + // $response = $UserModel->updateAnnouncement($getAnnouncement[0]->Id, $data); + + } + +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..0a75941 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,37 @@ + 'App\Http\Middleware\Authenticate', + 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', + 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', + 'teamstoresession' => 'App\Http\Middleware\CheckTeamStorePassword', + 'admin' => '\App\Http\Middleware\IsAdmin', + 'normaluser' => '\App\Http\Middleware\IsUser', + 'isAuthorized' => '\App\Http\Middleware\isAuthorized', + 'cors' => 'App\Http\Middleware\Cors', + ]; + +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..72a7613 --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,50 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next) + { + if ($this->auth->guest()) + { + if ($request->ajax()) + { + return response('Unauthorized.', 401); + } + else + { + return redirect()->guest('auth/login'); + } + } + + return $next($request); + } + +} diff --git a/app/Http/Middleware/CheckTeamStorePassword.php b/app/Http/Middleware/CheckTeamStorePassword.php new file mode 100644 index 0000000..7573948 --- /dev/null +++ b/app/Http/Middleware/CheckTeamStorePassword.php @@ -0,0 +1,25 @@ +session()->has('teamstore_data_array')) { + // user value cannot be found in session + + // return redirect('/teamstore'); + } + + return $next($request); + } + +} diff --git a/app/Http/Middleware/Cors.php b/app/Http/Middleware/Cors.php new file mode 100644 index 0000000..da2a8ba --- /dev/null +++ b/app/Http/Middleware/Cors.php @@ -0,0 +1,28 @@ +isMethod('options')) { + return $next($request); + } + } +} diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php new file mode 100644 index 0000000..b8bc27b --- /dev/null +++ b/app/Http/Middleware/IsAdmin.php @@ -0,0 +1,23 @@ +role == 'admin') { + return $next($request); + } + + return redirect('/'); + } + +} diff --git a/app/Http/Middleware/IsUser.php b/app/Http/Middleware/IsUser.php new file mode 100644 index 0000000..64b6b80 --- /dev/null +++ b/app/Http/Middleware/IsUser.php @@ -0,0 +1,22 @@ +role == 'user' || Auth::user()->role == 'store_owner' )) { + return $next($request); + } + return redirect('/'); + } + +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..db68818 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,44 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next) + { + if ($this->auth->check()) + { + return new RedirectResponse(url('/')); + } + + return $next($request); + } + +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..3add0cf --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,35 @@ +except as $route) { + if ($request->is($route)) { + return $next($request); + } + } + return parent::handle($request, $next); + } + +} diff --git a/app/Http/Middleware/isAuthorized.php b/app/Http/Middleware/isAuthorized.php new file mode 100644 index 0000000..be156f7 --- /dev/null +++ b/app/Http/Middleware/isAuthorized.php @@ -0,0 +1,23 @@ +json(['status' => false,'error' => "Invalid request"], 503); + } + } + +} diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php new file mode 100644 index 0000000..4516ab2 --- /dev/null +++ b/app/Http/Requests/Request.php @@ -0,0 +1,9 @@ + 'Auth\AuthController', + 'password' => 'Auth\PasswordController', +]); + + +Route::get('/', 'MainController@index'); +Route::get('/sportslist', 'MainController@sports'); +Route::get('/sports/{url}', 'MainController@templatesCat'); +Route::get('/sports/{url}/{id}', 'MainController@templatesByCategory'); +Route::get('/templatelist', 'MainController@fetchTemplates'); +Route::get('/cartcount', 'MainController@countCart'); +Route::get('/removeitem/{id}', 'MainController@removeCartItem'); + +Route::post('/custom/auth', 'CustomAuthController@authenticate'); +Route::post('/custom/register', 'CustomAuthController@postRegister'); + + +// Route::get('/cart', 'teamstore\TeamStoreController@cart'); + +Route::get('cart', ['as' => 'cart', 'uses' => 'teamstore\TeamStoreController@cart']); +Route::get('/checkout', 'teamstore\TeamStoreController@checkout'); +Route::get('/mail', 'teamstore\TeamStoreController@mail'); + +Route::get('/designer/{templateid}', 'designer\DesignerController@index'); + +Route::get('/designer/preview/{designCode}', 'designer\DesignerController@getDesign'); +Route::post('/designer/a/buy-form', 'designer\DesignerController@buyForm'); + +//edit routes// +Route::get('/designer/edit/{designCode}', 'designer\DesignerController@editDesign'); +//end edit routes// + +// CUSTOMIZER DISPLAY +Route::post('/designer/a/save-roster', 'designer\DesignerController@saveRoster'); + +//END CUSTOMIZER DISPLAY + +// Route::post('/designer/a/gradient-append', 'designer\DesignerController@gradientAppend'); +// Route::post('/designer/a/set-pattern', 'designer\DesignerController@setPattern'); +// Route::post('/designer/a/set-trim-pattern', 'designer\DesignerController@setTrimPattern'); +// Route::post('/designer/a/get-template-default-colors', 'designer\DesignerController@getTemplateDefaultColors'); +// Route::post('/designer/a/get-font-display', 'designer\DesignerController@getFontDisplay'); +// Route::post('/designer/a/get-cliparts', 'designer\DesignerController@getCliparts'); +// Route::post('/designer/a/clipart-properties', 'designer\DesignerController@clipartProperties'); +// Route::post('/designer/a/save-design', 'designer\DesignerController@saveDesign'); +// Route::post('/designer/edit/a/edit-gradient-append', 'designer\DesignerController@editGradientAppend'); +// Route::post('/designer/edit/a/edit-pattern-properties', 'designer\DesignerController@editPatternProperties'); +// Route::post('/designer/edit/a/edit-set-pattern', 'designer\DesignerController@editSetPattern'); +// Route::get('/designer/a/tab-clipart-content', 'designer\DesignerController@tabClipartContent'); +// Route::post('/designer/a/save-design-details', 'designer\DesignerController@saveDesignDetails'); + +// teamstore +Route::get('/', 'teamstore\TeamStoreController@login'); // old +Route::get('/', 'teamstore\TeamStoreController@storelist'); // old + + +// Route::group(['middleware' => 'teamstoresession'], function () { + +Route::get('/store/{storename}', 'teamstore\TeamStoreController@index'); +Route::get('/store/{storename}/product/{producurl}', 'teamstore\TeamStoreController@productDetails'); +// Route::post('/teamstore/q/addnewrow', 'teamstore\TeamStoreController@addNewRow'); +Route::post('/teamstore/q/add-to-cart', 'teamstore\TeamStoreController@addToCart'); +Route::get('/teamstore/q/clearsession', 'teamstore\TeamStoreController@clearSession'); +Route::post('/teamstore/q/add-voucher', 'teamstore\TeamStoreController@addVoucher'); +Route::post('/teamstore/q/add-new-row', 'teamstore\TeamStoreController@addNewRow'); +// }); + +Route::post('/teamstore/checkpassword', 'teamstore\TeamStoreController@checkTeamStorePassword'); +// end teamstore + +// user and store owner +Route::group(['middleware' => 'normaluser'], function () { + + Route::get('user', 'user\UserController@index'); + Route::get('user/address-book', 'user\UserController@addressBook'); + Route::get('user/address-book/create', 'user\UserController@createAddressBook'); + Route::post('user/address-book/save', 'user\UserController@saveAddressBook'); + Route::get('user/address-book/edit/{id}', 'user\UserController@editAddressBook'); + Route::post('user/address-book/update', 'user\UserController@updateAddressBook'); + Route::get('user/profile', 'user\UserController@profile'); + Route::get('user/profile/edit', 'user\UserController@editProfile'); + Route::post('user/profile/update', 'user\UserController@updateProfile'); + Route::get('user/profile/change-password', 'user\UserController@changePassword'); + Route::post('user/profile/update-password', 'user\UserController@updatePassword'); + Route::get('user/orders', 'user\UserController@orders'); + Route::get('user/orders/view/{ck}', 'user\UserController@orderDetails'); + Route::get('user/my-designs', 'user\UserController@myDesigns'); + Route::get('user/my-designs/view/{id}', 'user\UserController@viewDesign'); + Route::post('user/my-designs/update', 'user\UserController@updateDesignDetails'); + Route::get('user/store', 'user\UserController@store'); + Route::get('user/store-items', 'user\UserController@storeItems'); + Route::get('user/store-items/item/{url}', 'user\UserController@viewStoreItem'); + Route::post('user/store-items/update', 'user\UserController@storeItemUpdate'); + Route::get('user/store-settings', 'user\UserController@storeSetting'); + Route::post('user/store-settings/update', 'user\UserController@storeSettingUpdate'); + Route::get('user/email-verify', 'user\UserController@emailVerify'); + Route::post('user/post/resend-verification', 'user\UserController@resendVericationCode'); + Route::post('user/post/verify-code', 'user\UserController@verifyCode'); + Route::get('user/store-items/add-item', 'user\UserController@addStoreItem'); + Route::post('user/store-items/save-new-item', 'user\UserController@saveNewItem'); + Route::post('user/update-active-thumbnail', 'user\UserController@updateActiveThumbnail'); + Route::post('user/post/save-thumbnail-ordering', 'user\UserController@saveThumbnailOrdering'); + Route::post('user/post/save-item-ordering', 'user\UserController@saveItemOrdering'); + Route::post('user/post/show-store-order-details', 'user\UserController@showStoreOrderDetails'); + Route::post('user/post/delete-image-thumb', 'user\UserController@deleteImageThumb'); + Route::post('user/store-items/save-new-item-image', 'user\UserController@saveNewItemImage'); + Route::get('user/store-items/re-arrange', 'user\UserController@itemStoreReArrange'); + Route::post('user/store-items/delete', 'user\UserController@deleteStoreItem'); + + Route::get('user/my-designs/sell-design/{designCode}', 'user\UserController@sellDesign'); + Route::post('user/my-designs/addstoreitem', 'user\UserController@saveNewStoreItem'); + + Route::get('user/my-designs/buy-design/{designCode}', 'user\UserController@buyDesign'); + + Route::get('user/store-orders', 'user\UserController@storeOrders'); + + Route::get('user/announcement', 'user\UserController@announcementIndex'); + Route::post('user/announcement/updateSave', 'user\UserController@announcementUpdateSave'); + Route::post('user/announcement/status/update', 'user\UserController@announcementUpdateStatus'); +}); + +Route::group(['middleware' => 'auth'], function () { + // PAYPAL ROUTES + Route::get('payPremium', ['as' => 'payPremium', 'uses' => 'paypal\PaypalController@payPremium']); + Route::get('getCheckout', ['as' => 'getCheckout', 'uses' => 'paypal\PaypalController@getCheckout']); + Route::get('getDone', ['as' => 'getDone', 'uses' => 'paypal\PaypalController@getDone']); + Route::get('getCancel', ['as' => 'getCancel', 'uses' => 'paypal\PaypalController@getCancel']); + Route::get('getDoneTest', ['as' => 'getDoneTest', 'uses' => 'paypal\PaypalController@getDoneTest']); + // END PAYPAL ROUTES +}); + +Route::group(['middleware' => 'admin'], function () { + Route::get('admin', function () { + return view('sub_pages.index'); + }); + + Route::get('admin/sports/', 'SportsController@displayAllSports'); + Route::get('admin/sports/add', 'SportsController@displayAddSportPage'); + Route::post('admin/sports/save', 'SportsController@saveNewSports'); + Route::get('admin/sports/edit/{sportsname}', 'SportsController@sportsDetails'); + Route::post('admin/sports/update', 'SportsController@updateSports'); + Route::get('admin/sports/sportsname', 'SportsController@selectSportsName'); + + Route::get('admin/templates/', 'TemplatesController@displayTemplates'); + Route::post('admin/templates/id/{id}', 'TemplatesController@getTemplates'); + Route::get('admin/templates/add', 'TemplatesController@displayAddTemplatePage'); + Route::get('admin/templates/type', 'TemplatesController@getTemplateTypes'); + Route::get('admin/templates/getlastid', 'TemplatesController@getLastId'); + Route::post('admin/templates/save', 'TemplatesController@saveNewTemplates'); + Route::get('admin/templates/edit/{tempcode}', 'TemplatesController@displayEditTemplatePage'); + Route::post('admin/templates/update', 'TemplatesController@updateTemplate'); + Route::get('admin/templates/edit/{tempcode}/p-add', 'PrintPatternController@displayAddPrintTemplatePage'); + + Route::get('admin/pattern/get', 'PatternsController@getPatterns'); + Route::post('admin/pattern/get/withvalue', 'PatternsController@getPatternsWithPostValue'); + + Route::post('admin/print-template/save', 'PrintPatternController@savePrintPattern'); +}); + + +Route::get('cliparts/index', 'cliparts\ClipartsController@index'); + +// Route::get('analytics', function (){ +// $analyticsData = LaravelAnalytics::getVisitorsAndPageViews(7); +// }); + +Route::group(array('middleware' => ['isAuthorized', 'cors'], 'prefix' => 'api'), function () { + Route::post('login', 'ApiController@login'); + Route::post('insert', 'ApiController@insert'); + Route::get('tracking', 'ApiController@getTrackingStatus'); + Route::get('order-status', 'ApiController@getOrderStatus'); + Route::get('steps', 'ApiController@getSteps'); +}); diff --git a/app/Models/ApiModel.php b/app/Models/ApiModel.php new file mode 100644 index 0000000..e0b7b22 --- /dev/null +++ b/app/Models/ApiModel.php @@ -0,0 +1,152 @@ +where('Username', $username) + ->where('Password', $password) + ->get(); + return $i; + } + + function selectTrackingStepLabel($id) + { + $i = DB::table('tracking_steps')->select('StepLabel') + ->where('Id', $id) + ->get(); + return $i; + } + + function getTrackingStatus($invoice) + { + $i = DB::table('tracking')->select('tracking.Id', 'tracking.InvoiceNumber', 'tracking_steps.StepLabel', 'production_user.Name', DB::raw('DATE_FORMAT(tracking.created_at, "%b %d, %Y") AS date'), DB::raw('DATE_FORMAT(tracking.created_at, "%H:%i") AS time')) + ->leftjoin('tracking_steps', 'tracking_steps.Id', '=', 'tracking.StepId') + ->leftjoin('production_user', 'production_user.Id', '=', 'tracking.ScannedBy') + ->where('tracking.InvoiceNumber', '=', $invoice) + ->orderBy('tracking.created_at', 'DESC') + ->get(); + return $i; + } + + function selectPaymentDetails($invoice) + { + $i = DB::table('payment_details') + ->where('InvoiceNumber', $invoice) + ->get(); + return $i; + } + + function selectOrderList($cartKey) + { + $i = DB::table('orders')->select('ProductId', 'ProductName', 'CartKey') + ->where('CartKey', $cartKey) + ->groupBy('ProductId') + ->get(); + return $i; + } + + function selectProductImages($productId) + { + $i = DB::table('teamstore_product_thumbnails') + ->where('ProductId', $productId) + ->get(); + return $i; + } + + function selectOrderListTableFields($cartKey, $productId, $stepid) + { + // $i = DB::table('orders')->select('Id', 'Name', 'Name2', 'Number', 'Size', 'JerseySize', 'ShortsSize', 'Quantity') + // ->where('CartKey', $cartKey) + // ->where('ProductId', $productId) + // ->get(); + // return $i; + + $i = DB::table('orders')->select('orders.Id', 'orders.Name', 'orders.Name2', 'orders.Number', 'orders.Size', 'orders.JerseySize', + 'orders.ShortsSize', 'orders.Quantity', DB::raw('(SELECT COUNT(*) FROM tracking WHERE StepId = '.$stepid.' AND OrdersId = orders.Id) AS Status')) + // ->leftjoin('tracking', 'orders.Id', '=', 'tracking.OrdersId') + // ->where('tracking.StepId', $stepid) + ->where('orders.CartKey', $cartKey) + ->where('orders.ProductId', $productId) + ->groupBy('orders.Id') + ->get(); + return $i; + } + + function insertTracking($data) + { + $i = DB::table('tracking')->insert($data); + return $i; + } + + // function selectNextStep($invoice) + // { + // $i = DB::table('tracking')->select('StepId') + // ->where('InvoiceNumber', $invoice) + // ->orderBy('StepId', 'DESC')->first(); + // return $i; + // } + + function checkIfTrackExist($stepid, $productid, $orderid, $invoice, $qcounter) + { + $i = DB::table('tracking') + ->where('StepId', $stepid) + ->where('ProductId', $productid) + ->where('OrdersId', $orderid) + ->where('InvoiceNumber', $invoice) + ->where('QuantityCounter', $qcounter) + ->get(); + return $i; + } + + function getCurrentTrackingSteps($invoice){ + $i = DB::table('tracking')->select('StepId') + ->where('InvoiceNumber', $invoice) + ->groupBy('StepId') + ->orderBy('StepId', 'ASC') + ->get(); + return $i; + } + + function getStatus($invoice, $productid, $orderid, $qcounter){ + $i = DB::table('tracking')->select('production_user.Name', DB::raw('DATE_FORMAT(tracking.created_at, "%b %d, %Y - %H:%i") AS datetime')) + ->leftjoin('production_user', 'production_user.Id', '=', 'tracking.ScannedBy') + ->where('tracking.InvoiceNumber', $invoice) + ->where('tracking.ProductId', $productid) + ->where('tracking.OrdersId', $orderid) + ->where('tracking.QuantityCounter', $qcounter) + ->get(); + return $i; + } + + function selectSteps(){ + $i = DB::table('tracking_steps') + ->orderBy('Order', 'ASC') + ->get(); + return $i; + } + + function selectCurrentStep($invoice){ + $i = DB::table('tracking')->select('tracking_steps.*') + ->leftjoin('tracking_steps', 'tracking_steps.Id', '=', 'tracking.StepId') + ->where('tracking.InvoiceNumber', $invoice) + ->orderBy('tracking.StepId', 'DESC') + ->first(); + return $i; + } + + + function selectCurrentStepOrder($stepOrder){ + $i = DB::table('tracking_steps') + ->where('Order', $stepOrder) + ->get(); + return $i; + } +} diff --git a/app/Models/MainModel.php b/app/Models/MainModel.php new file mode 100644 index 0000000..5381df5 --- /dev/null +++ b/app/Models/MainModel.php @@ -0,0 +1,169 @@ +get(); + return $i; + } + + function selectSportsByURL($url) // display all data from database + { + $i = DB::table('sports') + ->where('URL', $url) + ->get(); + return $i; + } + + function selectSportsTemplates($id) // + { + $i = DB::table('templates')->where('SportsId', '=', $id)->get(); + return $i; + } + + function selectSportsId($url) // + { + $i = DB::table('sports')->where('URL', '=', $url)->get(); + $id = $i[0]->Id; + + $k = DB::table('templates')->where('SportsId', '=', $id) + ->where('IsActive','=', "TRUE") + ->get(); + return $k; + } + + function selectStates() // display all data from database + { + $i = DB::table('states')->get(); + return $i; + } + + function selectAvailableNumbers($id) // + { + $i = DB::table('orders')->where('TeamId', '=', $id)->get(); + return $i; + } + + function selectSizes() // + { + $i = DB::table('sizes')->select('Size')->orderby('Ordering', 'ASC')->get(); + return $i; + } + + function selectProducts() // + { + $i = DB::table('products')->orderby('Ordering', 'ASC')->get(); + return $i; + } + + function insertToCart($data){ + + $i = DB::table('cart_tmp')->insert($data); + return $i; + } + + function cartCount($cartkey){ // + + $i = DB::table('cart_tmp') + ->whereNull('VoucherId') + ->where('CartKey', '=', $cartkey) + ->sum('Quantity'); + + return $i; + + } + + function getProduct($ProductURL) + { + + $i = DB::table('products')->where('ProductURL', $ProductURL)->first(); + return $i; + } + + function myCart($cartKey){ + + if($cartKey != ""){ + + $i = DB::table('cart_tmp')->select('cart_tmp.Id', 'cart_tmp.CartKey', 'teams.GradeLevel', 'teams.Team', 'cart_tmp.Name', 'cart_tmp.Number', 'cart_tmp.Size', 'cart_tmp.Quantity', 'products.ProductImage', 'products.ProductName', 'products.ProductPrice', 'products.ProductURL') + ->leftjoin('products', 'cart_tmp.ProductURL','=','products.ProductURL') + ->leftjoin('teams', 'cart_tmp.TeamId','=','teams.Id') + ->where('cart_tmp.CartKey','=',$cartKey) + ->get(); + return $i; + } + } + + function removeItem($id){ + + $i = DB::table('cart_tmp')->where('Id', $id)->delete(); + return $i; + } + + function insertRegistrantInfo($info){ + + $i = DB::table('registrant_info')->insert($info); + return $i; + } + + function selectPurchaseProduct($cartKey){ + + + $i = DB::table('cart_tmp')->select('cart_tmp.CartKey', 'products.ProductCategory', 'products.ProductImage', 'products.ProductName', 'products.ProductPrice', DB::raw('CONCAT(teams.GradeLevel," - ", teams.GradeLevel) AS Team'), 'cart_tmp.TeamId','cart_tmp.Name', 'cart_tmp.Number', 'sizes.Ordering', 'cart_tmp.Size') + ->leftjoin('products', 'cart_tmp.ProductURL','=','products.ProductURL') + ->leftjoin('teams', 'cart_tmp.TeamId','=','teams.Id') + ->leftjoin('sizes', 'cart_tmp.Size','=','sizes.Size') + ->orderby('sizes.Ordering', 'ASC') + ->orderby('cart_tmp.Number', 'ASC') + ->orderby('cart_tmp.Name', 'ASC') + ->where('cart_tmp.CartKey','=',$cartKey) + ->get(); + return $i; + } + + function insertPurchaseProduct($orders){ + + $i = DB::table('orders')->insert($orders); + return $i; + } + + + function flushCart($cartKey){ + + $i = DB::table('cart_tmp')->where('CartKey', $cartKey)->delete(); + return $i; + } + + function selectCategory($id){ + $i = DB::table('template_categories') + ->whereIn('Id', $id) + ->get(); + return $i; + } + + function selectTemplatesByCategory($url, $cat) // + { + $i = DB::table('sports')->where('URL', '=', $url)->get(); + $id = $i[0]->Id; + + $k = DB::table('templates')->where('SportsId', '=', $id) + ->where('Category','=', $cat) + ->where('IsActive','=', "TRUE") + ->get(); + return $k; + } + + + function selectCategoryName($tempCode){ + $i = DB::table('templates')->select('templates.TemplateCode', 'template_categories.Category','category_ports.Port') + ->leftjoin('template_categories', 'templates.Category','=','template_categories.Id') + ->leftjoin('category_ports', 'template_categories.Id','=','category_ports.CategoryId') + ->where('templates.TemplateCode','=',$tempCode) + ->get(); + return $i; + } + +} diff --git a/app/Models/PatternsModel.php b/app/Models/PatternsModel.php new file mode 100644 index 0000000..7336f27 --- /dev/null +++ b/app/Models/PatternsModel.php @@ -0,0 +1,14 @@ +orderBy('Id', 'ASC')->get(); + return $i; + } + +} diff --git a/app/Models/PrintPatternModel.php b/app/Models/PrintPatternModel.php new file mode 100644 index 0000000..3e73541 --- /dev/null +++ b/app/Models/PrintPatternModel.php @@ -0,0 +1,31 @@ +where('TemplateCode', $q) + // ->get(); + $i = DB::table('print_pattern_list')->select('print_pattern_list.Id', 'print_pattern_list.TemplateCode', 'print_pattern_list.Path', 'print_pattern_list.Type', 'print_pattern_list.Size', 'print_pattern_list.DateCreated') + ->leftjoin('sizes', 'sizes.Size','=','print_pattern_list.Size') + ->where('print_pattern_list.TemplateCode','=',$q) + ->orderBy('sizes.Ordering', 'ASC') + ->get(); + return $i; + + + + } + + function insertPrintPattern($data){ + $i = DB::table('print_pattern_list')->insert($data); + return $i; + } + + + +} diff --git a/app/Models/SizesModel.php b/app/Models/SizesModel.php new file mode 100644 index 0000000..70c2c5e --- /dev/null +++ b/app/Models/SizesModel.php @@ -0,0 +1,15 @@ +get(); + return $i; + } + +} diff --git a/app/Models/SportsModel.php b/app/Models/SportsModel.php new file mode 100644 index 0000000..2fbd3d8 --- /dev/null +++ b/app/Models/SportsModel.php @@ -0,0 +1,35 @@ +get(); + return $i; + } + + function insertToSports($data){ + $i = DB::table('sports')->insert($data); + return $i; + } + + function selectSports($q){ + $i = DB::table('sports')->where('URL', '=', $q)->get(); + return $i; + } + + function upateSportsDetails($data, $id){ + $i = DB::table('sports')->where('Id', $id)->update($data); + return $i; + } + + function getSportsName() // display all data from database + { + $i = DB::table('sports')->select('Id', 'SportsName')->get(); + return $i; + } +} diff --git a/app/Models/TemplatesModel.php b/app/Models/TemplatesModel.php new file mode 100644 index 0000000..493de74 --- /dev/null +++ b/app/Models/TemplatesModel.php @@ -0,0 +1,60 @@ +where('SportsId', '=', $id)->get(); + return $i; + } + + function selectTemplateTypes(){ + $i = DB::table('template_types')->get(); + return $i; + } + + function selectTemplateLastId(){ + $i = DB::table('templates')->orderBy('Id', 'DESC')->first(); + return $i; + } + + + function insertNewTempalte($data){ + $i = DB::table('templates')->insert($data); + return $i; + } + + function insertTempaltePaths($data){ + $i = DB::table('template_paths')->insert($data); + return $i; + } + + function selectTemplate($tempCode){ + $i = DB::table('templates')->where('TemplateCode', '=', $tempCode)->get(); + return $i; + } + + function selectTemplatePaths($tempCode){ + $i = DB::table('template_paths')->where('TemplateCode', '=', $tempCode)->get(); + return $i; + } + + function updateNewTemplate($data, $templatecode){ + $i = DB::table('templates')->where('TemplateCode', $templatecode)->update($data); + return $i; + } + + function updateTemplatePaths($data, $Id){ + + // $i = DB::table('template_paths')->where([ + // ['TemplateCode', '=', $templatecode], + // ['Type', '=', $data['Type']], + // ['Side', '=', $data['Side']] + // ])->update($data); + $i = DB::table('template_paths')->where('Id', '=', $Id)->update($data); + return $i; + } + +} \ No newline at end of file diff --git a/app/Models/cliparts/ClipartsModel.php b/app/Models/cliparts/ClipartsModel.php new file mode 100644 index 0000000..862088f --- /dev/null +++ b/app/Models/cliparts/ClipartsModel.php @@ -0,0 +1,9 @@ +where('HashTemplateCode', $templateid) + ->get(); + return $i; + } + + function selectTemplatePaths($templateid){ + $i = DB::table('template_paths') + ->where('HashTemplateCode', $templateid) + ->where('IsActive', 'TRUE') + ->get(); + return $i; + } + + function selectTemplatePathsByTemplateCode($templateid){ + $i = DB::table('template_paths')->where('TemplateCode', $templateid) + ->where('IsActive', 'TRUE') + ->get(); + return $i; + } + + function selectPatterns($patternId){ + $i = DB::table('patterns')->where('PatternId', $patternId) + ->get(); + return $i; + } + + function selectPatternColors($patternId){ + $i = DB::table('pattern_colors')->where('PatternId', $patternId) + ->get(); + return $i; + } + + function selectDefaultTemplateColor($templateCode){ + + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT NULL AS RGBIndex, RGBColor AS default_Color, DisplayName FROM template_body_colors WHERE TemplateCode = '$templateCode' UNION SELECT TrimNumber, RGBColor AS default_Color, DisplayName FROM template_trim_colors WHERE TemplateCode = '$templateCode'"); + $query->execute(); + + while($row=$query->fetch(\PDO::FETCH_OBJ)) { + if($row->RGBIndex == NULL){ + $IndexName = "default_mainColor"; + }else{ + $IndexName = $row->RGBIndex; + } + $arr_default_mainColor[] = array( + $IndexName => $row->default_Color, + 'h4_Trim_' . $IndexName => $row->DisplayName, + ); + } + return $arr_default_mainColor; + } + + function selectFontsByFontFamily($fontFamily){ + $i = DB::table('fonts')->where('fontFamily', $fontFamily) + ->get(); + return $i; + } + + function selectFonts(){ + $i = DB::table('fonts')->get(); + return $i; + } + + function selectClipartCategories(){ + $i = DB::table('clipart_categories') + ->orderby('Ordering', 'ASC') + ->get(); + return $i; + } + + function selectClipartByCategory($categortId){ + $i = DB::table('cliparts') + ->where('CategoryId', $categortId) + ->get(); + return $i; + } + + function insertClientDesign($design_info){ + + $i = DB::table('client_designs')->insert($design_info); + return $i; + } + + function selectClientDesign($designCode){ + + $i = DB::table('client_designs') + ->where('DesignCode', $designCode) + ->get(); + return $i; + } + + function selectProductURL($str){ + $i = DB::table('teamstore_products')->select('ProductURL') + ->get(); + return $i; + } + + function selectTeamStoreProductLastId(){ + $i = DB::table('teamstore_products')->orderBy('Id', 'DESC')->first(); + return $i; + } + + function updateClientDesign($designName, $designCode){ + $i = DB::table('client_designs')->where('DesignCode', $designCode) + ->update(['DesignName' => $designName]); + + return $i; + } + + function selectPatternsByTable($table, $patternId){ + $i = DB::table($table)->where('PatternId', $patternId) + ->get(); + + return $i; + } + + function getAvailableSizes($templateCode, $type){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT ppl.Id, ppl.TemplateCode, ppl.Path, ppl.Type, ppl.Size, ppl.DateCreated, js.Size FROM print_pattern_list AS ppl LEFT JOIN sizes AS js ON js.Size = ppl.Size WHERE ppl.TemplateCode = '$templateCode' AND ppl.Type = '$type' ORDER BY js.Ordering ASC"); + $query->execute(); + + while($row=$query->fetch(\PDO::FETCH_OBJ)) { + $arr_size[] = $row->Size; + } + return $arr_size; + } + + function getDefaultPrice($size, $type){ + $i = DB::table('default_prices') + ->where('Size', $size) + ->where('Type', $type) + ->get(); + return $i; + + } +} diff --git a/app/Models/paypal/PayPalModel.php b/app/Models/paypal/PayPalModel.php new file mode 100644 index 0000000..7dd97c2 --- /dev/null +++ b/app/Models/paypal/PayPalModel.php @@ -0,0 +1,41 @@ +insertGetId($data); + return $i; + } + + + function insertToOrders($ck){ + + // $i = DB::table('orders')->insert($data); + $pdo = DB::connection()->getPdo(); + + $query = $pdo->prepare("INSERT INTO orders SELECT * FROM cart_tmp where CartKey = '$ck'"); + $i = $query->execute(); + + return $i; + } + + function insertShippingAddress($data){ + + $i = DB::table('shipping_addresses')->insert($data); + return $i; + } + + function getLastIdPaymentDetails(){ + + $i = DB::table('payment_details') + ->orderby('Id', 'DESC') + ->take(1) + ->get(); + // var_dump($i); + return $i; + } +} diff --git a/app/Models/teamstore/TeamStoreModel.php b/app/Models/teamstore/TeamStoreModel.php new file mode 100644 index 0000000..4202208 --- /dev/null +++ b/app/Models/teamstore/TeamStoreModel.php @@ -0,0 +1,231 @@ +where("IsActive", "true") + ->orderBy('Id', 'DESC') + ->paginate(16); + return $i; + } + + function selectTeamStoreProducts($field, $teamstoreId) // display all data from database + { + $i = DB::table('teamstore_products') + ->where($field, $teamstoreId) + ->orderBy('Ordering', 'ASC') + ->orderBy('Ordering', 'ASC')->get(); + return $i; + } + + function selectTeamStoreProductByIdHash($id) + { + $i = DB::table('teamstore_products') + ->where(DB::raw('md5(Id)') , $id) + ->get(); + return $i; + } + + function selectTeamStore($field, $teamstoreURL) + { + $i = DB::table('teamstores') + ->where($field, $teamstoreURL) + ->get(); + return $i; + } + + function checkStorePassword($storeid, $password) + { + $i = DB::table('teamstores') + ->where('Id', $storeid) + ->where('Password', $password) + ->get(); + return $i; + } + + function selectTeamStoreGroupByCartKey($cartKey) + { + $i = DB::table('cart_tmp') + ->where('CartKey', $cartKey) + ->groupby('CartKey') + ->get(); + return $i; + } + + function getProductThumbnails($productId){ + + $i = DB::table('teamstore_product_thumbnails') + ->where('ProductId', $productId) + ->orderby('Ordering', 'ASC') + ->get(); + return $i; + } + + function insertTeamStoreProduct($item_details){ + + $i = DB::table('teamstore_products')->insert($item_details); + $id = DB::getPdo()->lastInsertId(); + + return array( + 'i' => $i, + 'lastId' => $id + ); + } + + function insertTeamStoreProductThumbnails($item_details){ + + $i = DB::table('teamstore_product_thumbnails')->insert($item_details); + return $i; + } + + function getThumbnails($productId){ + + $i = DB::table('teamstore_product_thumbnails') + ->where('ProductId', $productId) + ->orderby('Ordering', 'ASC') + ->get(); + return $i; + } + + function getTeams($productId){ + + $i = DB::table('teams')->where('ProductId', $productId)->get(); + return $i; + } + + function getSizes(){ + + $i = DB::table('sizes') + ->where('IsActive', 'TRUE') + ->orderby('Ordering', 'ASC') + ->get(); + return $i; + } + + function getSizesByBracket($bracket){ + + $i = DB::table('sizes')->select('Size', 'SizeDisplay') + ->where('Bracket', $bracket) + ->where('IsActive', 'TRUE') + ->orderby('Ordering', 'ASC') + ->get(); + return $i; + } + + + function insertToCart($data){ + + $i = DB::table('cart_tmp')->insert($data); + $id = DB::getPdo()->lastInsertId(); + + return array( + 'i' => $i, + 'lastId' => $id + ); + // return $i; + } + + function selectDisplayCartThumb(){ + + $i = DB::table('teamstore_product_thumbnails') + ->where('ImageClass', 'active') + ->get(); + return $i; + } + + + + function myCart($cartKey){ + // echo $cartKey; + if($cartKey != ""){ + $i = DB::table('cart_tmp') + ->leftjoin('teamstore_voucher', 'cart_tmp.VoucherId', '=', 'teamstore_voucher.Id') + ->select('cart_tmp.*', 'teamstore_voucher.VoucherCode', 'teamstore_voucher.VoucherType', 'teamstore_voucher.VoucherValue', 'teamstore_voucher.VoucherExpiryDate', 'teamstore_voucher.Status') + ->where('cart_tmp.CartKey', $cartKey) + ->get(); + + // var_dump($i); + return $i; + } + } + + function myCartGroup($cartKey){ + if($cartKey != ""){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT *, COUNT(Id) AS qty, Price * SUM(Quantity) AS total_price FROM cart_tmp WHERE CartKey = :ck GROUP BY ProductId"); + $query->execute([':ck'=>$cartKey]); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + } + } + + + function getSubtotal($cartKey){ + + $i = DB::table('cart_tmp')->select(DB::raw('SUM(Quantity * Price) AS Subtotal')) + ->where('CartKey','=',$cartKey) + ->get(); + return $i; + + } + + function updateStoreItem($data, $url){ + $i = DB::table('teamstore_products')->where('ProductURL', $url) + ->update($data); + return $i; + } + + function getSoldQty($productId){ + $i = DB::table('orders')->select(DB::raw('SUM(Quantity) AS SoldQty')) + ->where('ProductId', $productId) + ->get(); + return $i; + } + + function selectVoucher($data){ + $i = DB::table('teamstore_voucher') + ->where(DB::raw('BINARY `VoucherCode`'), $data['voucher']) + ->where('TeamStoreId', $data['store_id']) + ->get(); + return $i; + } + + function selectVoucherWhereIn($data){ + $i = DB::table('teamstore_voucher') + ->whereIn('Id', $data) + ->get(); + return $i; + } + + function updateVoucherValueInCart($data, $id){ + $i = DB::table('cart_tmp') + ->where('Id', $id) + ->update($data); + return $i; + } + + function selectTeamstoreSearch($field, $value, $keyword){ + + $i = DB::table('teamstores') + ->where("StoreName", "LIKE","%$keyword%") + ->where("IsActive", "true") + ->orderby($field, $value) + ->paginate(16); + return $i; + } + + function selectTeamstoreFilter($field, $value){ + + $i = DB::table('teamstores') + ->where("IsActive", "true") + ->orderby($field, $value) + ->paginate(16); + return $i; + } + +} diff --git a/app/Models/user/UserModel.php b/app/Models/user/UserModel.php new file mode 100644 index 0000000..8481ce3 --- /dev/null +++ b/app/Models/user/UserModel.php @@ -0,0 +1,384 @@ +insert($data); + return $i; + } + + function selectAddresBook($field, $userId){ + + $i = DB::table('user_address_book') + ->where($field,'=',$userId) + ->get(); + return $i; + + } + + function saveUpdateAddressBook($data, $id){ + $i = DB::table('user_address_book')->where('Id', $id) + ->update($data); + + return $i; + } + + function selectProfileInfo($id){ + + $i = DB::table('user_logins')->select('user_logins.name', 'user_logins.username', 'user_logins.email', 'user_logins.email_is_verified','user_logins.other_email', 'user_logins.role', 'user_logins.store_id', 'user_info.ContactNumber', 'user_info.Gender', 'user_info.Birthday') + ->leftjoin('user_info', 'user_info.UserId','=','user_logins.id') + ->where('user_logins.id','=',$id) + ->get(); + return $i; + } + + function saveUpdateUserLogins($data, $id){ + $i = DB::table('user_logins')->where('id', $id) + ->update($data); + + return $i; + } + + function saveUpdateUserInfo($data, $id){ + $exists = DB::table('user_info')->where('UserId', $id)->first(); + + if(!$exists){ + $i = DB::table('user_info')->insert($data); + }else{ + $i = DB::table('user_info') + ->where('UserId', $id) + ->update($data); + } + return $i; + + } + + function saveUpdatePassword($password, $id){ + + $i = DB::table('user_logins')->where('id', $id) + ->update(['password' => $password]); + + return $i; + } + + function selectPaymentDetails($field, $val){ + + $i = DB::table('payment_details') + ->where($field, $val) + ->get(); + + return $i; + } + + function selectClientDesigns($userid){ + + $i = DB::table('client_designs')->where('ClientId', $userid) + ->orderBy('Id', 'DESC') + ->paginate(12) ; + + return $i; + } + + function selectClientDesignsbyCode($code){ + + $i = DB::table('client_designs')->where('DesignCode', $code) + ->get(); + + return $i; + } + + function selectTemplatePaths($field, $templateid){ + $i = DB::table('template_paths') + ->where($field, $templateid) + ->where('IsActive', 'TRUE') + ->get(); + return $i; + } + + function updateClientDesign($data, $id){ + $i = DB::table('client_designs')->where('DesignCode', $id) + ->update($data); + + return $i; + } + + function selectStoreInfo($storeId){ + $i = DB::table('teamstores')->where('Id', $storeId) + ->get(); + + return $i; + } + + function saveResendCode($data){ + + $res = DB::table('email_verification_codes')->where("EmailAddress", $data['EmailAddress']) + ->get(); + + if($res){ + $i = DB::table('email_verification_codes')->where('EmailAddress', $data['EmailAddress']) + ->update($data); + return $i; + }else{ + $i = DB::table('email_verification_codes')->insert($data); + return $i; + } + + } + + function validateCode($data){ + + $i = DB::table('email_verification_codes')->where('EmailAddress', $data['EmailAddress']) + ->where('VerCode', $data['Code']) + ->get(); + + return $i; + } + + function selectOrderItem($ck){ + $i = DB::table('orders') + ->where('CartKey', $ck) + ->get(); + return $i; + } + + function selectOrderItemWithStoreId($store_id, $ck){ + $i = DB::table('orders') + ->where('StoreId', $store_id) + ->where('CartKey', $ck) + ->get(); + return $i; + } + + function selectOrder($field, $value){ + $i = DB::table('orders') + ->where($field, $value) + ->get(); + return $i; + } + + // function selectStoreOrders($store_id){ + // $i = DB::table('orders')->select('orders.*', 'orders.Id as Order_Id', 'payment_details.InvoiceNumber', 'payment_details.Currency', 'payment_details.Payer_Email', 'payment_details.Payer_Firstname', 'payment_details.Payer_Lastname', 'shipping_addresses.*', 'tracking_steps.StepLabel') + // ->leftjoin('payment_details', 'payment_details.CartKey','=','orders.CartKey') + // ->leftjoin('shipping_addresses', 'shipping_addresses.PaymentDetail_Id','=','payment_details.Id') + // ->leftjoin('tracking', 'tracking.InvoiceNumber','=','payment_details.InvoiceNumber') + // ->leftjoin('tracking_steps', 'tracking_steps.Id','=','tracking.StepId') + // ->where('orders.StoreId', $store_id) + // ->orderby('orders.DateCreated', 'DESC') + // ->get(); + // return $i; + // } + + function selectStoreOrders($store_id){ + $i = DB::table('orders')->select('orders.*', 'orders.Id as Order_Id', 'payment_details.InvoiceNumber', 'payment_details.Currency', 'payment_details.Payer_Email', 'payment_details.Payer_Firstname', 'payment_details.Payer_Lastname', 'shipping_addresses.*', DB::raw('(SELECT tracking_steps.StepLabel FROM tracking LEFT JOIN tracking_steps ON tracking_steps.Id = tracking.StepId WHERE tracking.InvoiceNumber = payment_details.InvoiceNumber ORDER BY tracking.Id DESC LIMIT 1 ) AS StepLabel')) + ->leftjoin('payment_details', 'payment_details.CartKey','=','orders.CartKey') + ->leftjoin('shipping_addresses', 'shipping_addresses.PaymentDetail_Id','=','payment_details.Id') + ->where('orders.StoreId', $store_id) + ->orderby('orders.DateCreated', 'DESC') + ->get(); + return $i; + } + + + function itemGroup($cartKey){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT *, COUNT(Id) AS qty, Price * SUM(Quantity) AS total_price FROM orders WHERE CartKey = :ck GROUP BY ProductId"); + $query->execute([':ck'=>$cartKey]); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + + } + + + function itemGroupWithStoreId($store_id, $cartKey){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT *, COUNT(Id) AS qty, Price * SUM(Quantity) AS total_price FROM orders WHERE StoreId= :si AND CartKey = :ck GROUP BY ProductId"); + $query->execute(array(':si'=>$store_id, ':ck'=>$cartKey)); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + + } + + function selectDisplayItemThumb(){ + + $i = DB::table('teamstore_product_thumbnails') + ->where('ImageClass', 'active') + ->orderby('Ordering', 'ASC') + ->get(); + return $i; + } + + function selectDisplayItemThumbById($id){ + + $i = DB::table('teamstore_product_thumbnails') + ->where('ProductId', $id) + ->where('ImageClass', 'active') + ->get(); + return $i; + } + + function deleteImageThumb($field, $id){ + $i = DB::table('teamstore_product_thumbnails') + ->where($field, $id) + ->delete(); + return $i; + } + + function deleteStoreItem($id){ + $i = DB::table('teamstore_products') + ->where('Id', $id) + ->delete(); + $this->deleteImageThumb('ProductId', $id); + return $i; + } + + function selectItemsStoreId($ck){ + + $i = DB::table('cart_tmp') + ->select(DB::raw('StoreId')) + ->where('CartKey', $ck) + ->groupby('StoreId') + ->get(); + return $i; + } + + + function selectUserLogins($field, $value){ + + $i = DB::table('user_logins') + ->where($field, $value) + ->get(); + return $i; + } + + function insertNewProduct($data){ + $pdo = DB::connection()->getPdo(); + $i = DB::table('teamstore_products')->insert($data); + $id = DB::getPdo()->lastInsertId(); + return $id; + } + + function insertNewProductThumbnails($data){ + $i = DB::table('teamstore_product_thumbnails')->insert($data); + return $i; + } + + function updateProductCode($data, $id){ + $i = DB::table('teamstore_products')->where('Id', $id) + ->update($data); + + return $i; + } + + function selectTeamStoreName($ck){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT t.Id, t.StoreName FROM orders AS o INNER JOIN teamstores AS t ON t.Id = o.StoreId WHERE o.CartKey = :ck GROUP BY o.StoreId ORDER BY t.StoreName ASC"); + $query->execute(array(':ck'=>$ck)); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + } + + + + function updateActiveThumb($id, $product_id){ + DB::table('teamstore_product_thumbnails')->where('ProductId', $product_id) + ->update(['ImageClass' => null]); + $i = DB::table('teamstore_product_thumbnails')->where('Id', $id) + ->update(['ImageClass' => 'active']); + } + + function updateThumbnailOrdering($order, $id){ + $i = DB::table('teamstore_product_thumbnails')->where('Id', $id) + ->update(['Ordering' => $order]); + } + + function updateItemOrdering($order, $id){ + $i = DB::table('teamstore_products')->where('Id', $id) + ->update(['Ordering' => $order]); + } + + function updateTeamstore($id, $data){ + + $i = DB::table('teamstores') + ->where("Id", $id) + ->update($data); + return $i; + } + + function selectShippingAddress($field, $value){ + + $i = DB::table('shipping_addresses') + ->where($field, $value) + ->get(); + return $i; + } + + function selectUserLoginsWhereIn($ids){ + $i = DB::table('user_logins') + ->whereIn('store_id', $ids) + ->get(); + return $i; + } + + function selectShippingCost(){ + $i = DB::table('shipping_cost') + ->get(); + return $i; + } + + + function countStoreOrder($storeId){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT SUM(o.Quantity) AS count_order FROM orders AS o WHERE o.StoreId = :storeId"); + $query->execute([':storeId'=>$storeId]); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + } + + function storeIncome($storeId){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT SUM(o.Price) AS store_income FROM orders AS o WHERE o.StoreId = :storeId"); + $query->execute([':storeId'=>$storeId]); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + } + + function countStoreProduct($storeId){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT COUNT(Id) AS store_product_count FROM teamstore_products AS tp WHERE tp.TeamStoreId = :storeId"); + $query->execute([':storeId'=>$storeId]); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + } + + function countStorePublishedProduct($storeId){ + $pdo = DB::connection()->getPdo(); + $query = $pdo->prepare("SELECT COUNT(Id) AS store_published_product FROM teamstore_products AS tp WHERE tp.TeamStoreId = :storeId AND PrivacyStatus = 'public'"); + $query->execute([':storeId'=>$storeId]); + $row = $query->fetchAll(\PDO::FETCH_OBJ); + return $row; + } + + function getAnnouncement($storeId){ + $i = DB::table('store_announcement') + ->where('StoreId', $storeId) + ->get(); + return $i; + } + + function saveNewAnnouncement($data){ + $i = DB::table('store_announcement') + ->insert($data); + return $i; + } + + function updateAnnouncement($id, $data){ + $i = DB::table('store_announcement') + ->where('Id', $id) + ->update($data); + return $i; + } +} \ No newline at end of file diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..7b059a1 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,44 @@ +', $value); + }); + + Storage::extend('sftp', function ($app, $config) { + return new Filesystem(new SftpAdapter($config)); + }); + } + + /** + * Register any application services. + * + * This service provider is a great spot to register your various container + * bindings with the application. As you can see, we are registering our + * "Registrar" implementation here. You can add your own bindings too! + * + * @return void + */ + public function register() + { + $this->app->bind( + 'Illuminate\Contracts\Auth\Registrar', + 'App\Services\Registrar' + ); + } + +} diff --git a/app/Providers/BusServiceProvider.php b/app/Providers/BusServiceProvider.php new file mode 100644 index 0000000..f0d9be6 --- /dev/null +++ b/app/Providers/BusServiceProvider.php @@ -0,0 +1,34 @@ +mapUsing(function($command) + { + return Dispatcher::simpleMapping( + $command, 'App\Commands', 'App\Handlers\Commands' + ); + }); + } + + /** + * Register any application services. + * + * @return void + */ + public function register() + { + // + } + +} diff --git a/app/Providers/ConfigServiceProvider.php b/app/Providers/ConfigServiceProvider.php new file mode 100644 index 0000000..06e5799 --- /dev/null +++ b/app/Providers/ConfigServiceProvider.php @@ -0,0 +1,23 @@ + [ + 'EventListener', + ], + ]; + + /** + * Register any other events for your application. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + */ + public function boot(DispatcherContract $events) + { + parent::boot($events); + + // + } + +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..afa34c8 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,44 @@ +group(['namespace' => $this->namespace], function($router) + { + require app_path('Http/routes.php'); + }); + } + +} diff --git a/app/Services/Registrar.php b/app/Services/Registrar.php new file mode 100644 index 0000000..c22cb3e --- /dev/null +++ b/app/Services/Registrar.php @@ -0,0 +1,54 @@ +captchaCheck(); + + return Validator::make($data, [ + 'name' => 'required|max:255', + 'username' => 'required|max:255|unique:user_logins', + 'email' => 'required|email|max:255|unique:user_logins', + 'password' => 'required|confirmed|min:6', + 'g-recaptcha-response' => 'required', + 'captcha' => 'required|min:1' + ], + [ + 'g-recaptcha-response.required' => 'Captcha is required', + 'captcha.min' => 'Wrong captcha, please try again.' + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return User + */ + public function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'username' => $data['username'], + 'email' => $data['email'], + 'password' => bcrypt($data['password']), + 'role' => 'user' + ]); + } + +} diff --git a/app/Traits/CaptchaTrait.php b/app/Traits/CaptchaTrait.php new file mode 100644 index 0000000..e3a8cfc --- /dev/null +++ b/app/Traits/CaptchaTrait.php @@ -0,0 +1,25 @@ +verify($response, $remoteip); + if ($resp->isSuccess()) { + return 1; + } else { + return 0; + } + + } + +} \ No newline at end of file diff --git a/app/User.php b/app/User.php new file mode 100644 index 0000000..582dbed --- /dev/null +++ b/app/User.php @@ -0,0 +1,34 @@ +make('Illuminate\Contracts\Console\Kernel'); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running. We will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..f50a3f7 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + 'Illuminate\Contracts\Http\Kernel', + 'App\Http\Kernel' +); + +$app->singleton( + 'Illuminate\Contracts\Console\Kernel', + 'App\Console\Kernel' +); + +$app->singleton( + 'Illuminate\Contracts\Debug\ExceptionHandler', + 'App\Exceptions\Handler' +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php new file mode 100644 index 0000000..bc04666 --- /dev/null +++ b/bootstrap/autoload.php @@ -0,0 +1,35 @@ +=5.3.3", + "symfony/console": "~2.1", + "symfony/filesystem": "~2.1", + "symfony/finder": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "classpreloader.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "ClassPreloader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@cachethq.io" + } + ], + "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", + "keywords": [ + "autoload", + "class", + "preload" + ], + "time": "2015-05-26T10:57:51+00:00" + }, + { + "name": "danielstjules/stringy", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/danielstjules/Stringy.git", + "reference": "4749c205db47ee5b32e8d1adf6d9aff8db6caf3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danielstjules/Stringy/zipball/4749c205db47ee5b32e8d1adf6d9aff8db6caf3b", + "reference": "4749c205db47ee5b32e8d1adf6d9aff8db6caf3b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Stringy\\": "src/" + }, + "files": [ + "src/Create.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel St. Jules", + "email": "danielst.jules@gmail.com", + "homepage": "http://www.danielstjules.com" + } + ], + "description": "A string manipulation library with multibyte support", + "homepage": "https://github.com/danielstjules/Stringy", + "keywords": [ + "UTF", + "helpers", + "manipulation", + "methods", + "multibyte", + "string", + "utf-8", + "utility", + "utils" + ], + "time": "2015-07-23T00:54:12+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "0.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "@stable" + }, + "type": "project", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "time": "2014-10-24T07:27:01+00:00" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06T14:35:42+00:00" + }, + { + "name": "google/apiclient", + "version": "v1.1.8", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-api-php-client.git", + "reference": "85309a3520bb5f53368d43e35fd24f43c9556323" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/85309a3520bb5f53368d43e35fd24f43c9556323", + "reference": "85309a3520bb5f53368d43e35fd24f43c9556323", + "shasum": "" + }, + "require": { + "php": ">=5.2.1" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-v1-master": "1.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/Google/autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2016-06-06T21:22:48+00:00" + }, + { + "name": "google/recaptcha", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/google/recaptcha.git", + "reference": "98c4a6573b27e8b0990ea8789c74ea378795134c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/recaptcha/zipball/98c4a6573b27e8b0990ea8789c74ea378795134c", + "reference": "98c4a6573b27e8b0990ea8789c74ea378795134c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2.20|^2.15", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^4.8.36|^5.7.27|^6.59|^7.5.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "ReCaptcha\\": "src/ReCaptcha" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", + "homepage": "https://www.google.com/recaptcha/", + "keywords": [ + "Abuse", + "captcha", + "recaptcha", + "spam" + ], + "time": "2019-08-16T15:48:25+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "5.3.4", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b87eda7a7162f95574032da17e9323c9899cb6b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b87eda7a7162f95574032da17e9323c9899cb6b2", + "reference": "b87eda7a7162f95574032da17e9323c9899cb6b2", + "shasum": "" + }, + "require": { + "guzzlehttp/ringphp": "^1.1", + "php": ">=5.4.0", + "react/promise": "^2.2" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2019-10-30T09:32:00+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b", + "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "time": "2018-07-31T13:22:33+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2014-10-12T19:18:40+00:00" + }, + { + "name": "ircmaxell/password-compat", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20T16:49:30+00:00" + }, + { + "name": "jakub-onderka/php-console-color", + "version": "v0.2", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "1.0", + "jakub-onderka/php-parallel-lint": "1.0", + "jakub-onderka/php-var-dump-check": "0.*", + "phpunit/phpunit": "~4.3", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "JakubOnderka\\PhpConsoleColor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com" + } + ], + "time": "2018-09-29T17:23:10+00:00" + }, + { + "name": "jakub-onderka/php-console-highlighter", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", + "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "shasum": "" + }, + "require": { + "jakub-onderka/php-console-color": "~0.1", + "php": ">=5.3.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "~1.0", + "jakub-onderka/php-parallel-lint": "~0.5", + "jakub-onderka/php-var-dump-check": "~0.1", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JakubOnderka\\PhpConsoleHighlighter": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "acci@acci.cz", + "homepage": "http://www.acci.cz/" + } + ], + "time": "2015-04-20T18:58:01+00:00" + }, + { + "name": "jeremeamia/SuperClosure", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/jeremeamia/super_closure.git", + "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.2|^2.0|^3.0|^4.0", + "php": ">=5.4", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "SuperClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia", + "role": "Developer" + } + ], + "description": "Serialize Closure objects, including their context and binding", + "homepage": "https://github.com/jeremeamia/super_closure", + "keywords": [ + "closure", + "function", + "lambda", + "parser", + "serializable", + "serialize", + "tokenizer" + ], + "time": "2018-03-21T22:21:57+00:00" + }, + { + "name": "kylekatarnls/update-helper", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/5786fa188e0361b9adf9e8199d7280d1b2db165e", + "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "2.0.x-dev || ^2.0.0-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-07-29T11:03:54+00:00" + }, + { + "name": "laravel/framework", + "version": "v5.0.35", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "37151cf533f468e2227605e4b9ac596154f6b92b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/37151cf533f468e2227605e4b9ac596154f6b92b", + "reference": "37151cf533f468e2227605e4b9ac596154f6b92b", + "shasum": "" + }, + "require": { + "classpreloader/classpreloader": "~1.2", + "danielstjules/stringy": "~1.8", + "doctrine/inflector": "~1.0", + "ext-mbstring": "*", + "ext-mcrypt": "*", + "ext-openssl": "*", + "ircmaxell/password-compat": "~1.0", + "jeremeamia/superclosure": "~2.0", + "league/flysystem": "~1.0", + "monolog/monolog": "~1.11", + "mtdowling/cron-expression": "~1.0", + "nesbot/carbon": "~1.0", + "php": ">=5.4.0", + "psy/psysh": "0.4.*", + "swiftmailer/swiftmailer": "~5.1", + "symfony/console": "2.6.*", + "symfony/debug": "2.6.*", + "symfony/finder": "2.6.*", + "symfony/http-foundation": "2.6.*", + "symfony/http-kernel": "2.6.*", + "symfony/process": "2.6.*", + "symfony/routing": "2.6.*", + "symfony/security-core": "2.6.*", + "symfony/translation": "2.6.*", + "symfony/var-dumper": "2.6.*", + "vlucas/phpdotenv": "~1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/exception": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/foundation": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "~2.4", + "iron-io/iron_mq": "~1.5", + "mockery/mockery": "~0.9", + "pda/pheanstalk": "~3.0", + "phpunit/phpunit": "~4.0", + "predis/predis": "~1.0" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~2.4).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (~5.0).", + "iron-io/iron_mq": "Required to use the iron queue driver (~1.5).", + "league/flysystem-aws-s3-v2": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", + "predis/predis": "Required to use the redis cache and queue drivers (~1.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/Illuminate/Queue/IlluminateQueueClosure.php" + ], + "files": [ + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "http://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "time": "2016-02-02T14:55:52+00:00" + }, + { + "name": "league/flysystem", + "version": "1.0.57", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", + "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": ">=5.5.9" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7.10" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "time": "2019-10-16T21:01:05+00:00" + }, + { + "name": "league/flysystem-sftp", + "version": "1.0.22", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-sftp.git", + "reference": "cab59dd2277e02fe46f5f23195672a02ed49774d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/cab59dd2277e02fe46f5f23195672a02ed49774d", + "reference": "cab59dd2277e02fe46f5f23195672a02ed49774d", + "shasum": "" + }, + "require": { + "league/flysystem": "~1.0", + "php": ">=5.6.0", + "phpseclib/phpseclib": "~2.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^5.7.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Sftp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Flysystem adapter for SFTP", + "time": "2019-10-16T20:05:49+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.25.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/70e65a5470a42cfec1a7da00d30edb6e617e8dcf", + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2019-09-06T13:49:17+00:00" + }, + { + "name": "mtdowling/cron-expression", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/mtdowling/cron-expression.git", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2017-01-23T04:29:33+00:00" + }, + { + "name": "nesbot/carbon", + "version": "1.39.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4be0c005164249208ce1b5ca633cd57bdd42ff33", + "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33", + "shasum": "" + }, + "require": { + "kylekatarnls/update-helper": "^1.1", + "php": ">=5.3.9", + "symfony/translation": "~2.6 || ~3.0 || ~4.0" + }, + "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "bin": [ + "bin/upgrade-carbon" + ], + "type": "library", + "extra": { + "update-helper": "Carbon\\Upgrade", + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2019-10-14T05:51:36+00:00" + }, + { + "name": "netshell/paypal", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/net-shell/laravel-paypal.git", + "reference": "61cccff88b3fba4ab32bafc9542bf2e95c149b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/net-shell/laravel-paypal/zipball/61cccff88b3fba4ab32bafc9542bf2e95c149b5b", + "reference": "61cccff88b3fba4ab32bafc9542bf2e95c149b5b", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "illuminate/support": "~5.0", + "paypal/rest-api-sdk-php": "1.13.0", + "php": ">=5.3.0" + }, + "require-dev": { + "phpspec/phpspec": "~2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Netshell\\Paypal": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Boyan Balkanski", + "email": "balkanski@outlook.com" + } + ], + "description": "Laravel-Paypal is simple package help you process direct credit card payments, stored credit card payments and PayPal account payments with your Laravel 5 projects using paypal REST API SDK.", + "time": "2019-04-03T23:00:23+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2015-09-19T14:15:08+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v1.4.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "9b3899e3c3ddde89016f576edb8c489708ad64cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/9b3899e3c3ddde89016f576edb8c489708ad64cd", + "reference": "9b3899e3c3ddde89016f576edb8c489708ad64cd", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2018-04-04T21:48:54+00:00" + }, + { + "name": "paypal/rest-api-sdk-php", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/paypal/PayPal-PHP-SDK.git", + "reference": "192e217beed14c8e75624e821fdc8ec51e2a21f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paypal/PayPal-PHP-SDK/zipball/192e217beed14c8e75624e821fdc8ec51e2a21f5", + "reference": "192e217beed14c8e75624e821fdc8ec51e2a21f5", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.3.0", + "psr/log": "^1.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "PayPal": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "PayPal", + "homepage": "https://github.com/paypal/rest-api-sdk-php/contributors" + } + ], + "description": "PayPal's PHP SDK for REST APIs", + "homepage": "http://paypal.github.io/PayPal-PHP-SDK/", + "keywords": [ + "payments", + "paypal", + "rest", + "sdk" + ], + "time": "2017-11-13T19:21:59+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.23", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c78eb5058d5bb1a183133c36d4ba5b6675dfa099", + "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2019-09-17T03:41:22+00:00" + }, + { + "name": "psr/log", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2019-11-01T11:05:21+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.4.4", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "489816db71649bd95b416e3ed9062d40528ab0ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/489816db71649bd95b416e3ed9062d40528ab0ac", + "reference": "489816db71649bd95b416e3ed9062d40528ab0ac", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1", + "jakub-onderka/php-console-highlighter": "0.3.*", + "nikic/php-parser": "~1.0", + "php": ">=5.3.0", + "symfony/console": "~2.3.10|~2.4.2|~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "~1.5", + "phpunit/phpunit": "~3.7|~4.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/finder": "~2.1|~3.0" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.4.x-dev" + } + }, + "autoload": { + "files": [ + "src/Psy/functions.php" + ], + "psr-0": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2015-03-26T18:43:54+00:00" + }, + { + "name": "react/promise", + "version": "v2.7.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2019-01-07T21:25:54+00:00" + }, + { + "name": "spatie/laravel-analytics", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-analytics.git", + "reference": "957f8f698fd14b89dedfff1d90eb486d89b559c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-analytics/zipball/957f8f698fd14b89dedfff1d90eb486d89b559c8", + "reference": "957f8f698fd14b89dedfff1d90eb486d89b559c8", + "shasum": "" + }, + "require": { + "google/apiclient": "1.1.*", + "illuminate/contracts": "~5.0", + "illuminate/support": "~5.0", + "nesbot/carbon": "~1.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "4.*", + "scrutinizer/ocular": "~1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelAnalytics\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://murze.be", + "role": "Developer" + }, + { + "name": "Matthias De Winter", + "email": "dewinter.matthias@gmail.com", + "homepage": "https://github.com/MatthiasDeWinter", + "role": "Developer" + } + ], + "description": "An opinionated Laravel 5 package to retrieve Google Analytics data.", + "homepage": "https://github.com/spatie/laravel-analytics", + "keywords": [ + "analytics", + "google", + "laravel", + "reports", + "retrieve", + "spatie" + ], + "time": "2016-05-13T06:41:58+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.4.12", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", + "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "~3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2018-07-31T09:26:32+00:00" + }, + { + "name": "symfony/console", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0e5e18ae09d3f5c06367759be940e9ed3f568359" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0e5e18ae09d3f5c06367759be940e9ed3f568359", + "reference": "0e5e18ae09d3f5c06367759be940e9ed3f568359", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1", + "symfony/phpunit-bridge": "~2.7", + "symfony/process": "~2.1" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2015-07-26T09:08:40+00:00" + }, + { + "name": "symfony/debug", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Debug", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "fca5696e0c9787722baa8f2ad6940dfd7a6a6941" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/fca5696e0c9787722baa8f2ad6940dfd7a6a6941", + "reference": "fca5696e0c9787722baa8f2ad6940dfd7a6a6941", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2", + "symfony/http-foundation": "~2.1", + "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2", + "symfony/phpunit-bridge": "~2.7" + }, + "suggest": { + "symfony/http-foundation": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Debug\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2015-07-08T05:59:48+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.50", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0", + "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2018-11-21T14:20:20+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v2.8.50", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "7ae46872dad09dffb7fe1e93a0937097339d0080" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7ae46872dad09dffb7fe1e93a0937097339d0080", + "reference": "7ae46872dad09dffb7fe1e93a0937097339d0080", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2018-11-11T11:18:13+00:00" + }, + { + "name": "symfony/finder", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Finder", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "203a10f928ae30176deeba33512999233181dd28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/203a10f928ae30176deeba33512999233181dd28", + "reference": "203a10f928ae30176deeba33512999233181dd28", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Finder\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2015-07-09T16:02:48+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v2.6.13", + "target-dir": "Symfony/Component/HttpFoundation", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e8fd1b73ac1c3de1f76c73801ddf1a8ecb1c1c9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8fd1b73ac1c3de1f76c73801ddf1a8ecb1c1c9c", + "reference": "e8fd1b73ac1c3de1f76c73801ddf1a8ecb1c1c9c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/expression-language": "~2.4", + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "classmap": [ + "Symfony/Component/HttpFoundation/Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2015-07-22T10:08:40+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v2.6.13", + "target-dir": "Symfony/Component/HttpKernel", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "cdd991d304fed833514dc44d6aafcf19397c26cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cdd991d304fed833514dc44d6aafcf19397c26cb", + "reference": "cdd991d304fed833514dc44d6aafcf19397c26cb", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "psr/log": "~1.0", + "symfony/debug": "~2.6,>=2.6.2", + "symfony/event-dispatcher": "~2.6,>=2.6.7", + "symfony/http-foundation": "~2.5,>=2.5.4" + }, + "require-dev": { + "symfony/browser-kit": "~2.3", + "symfony/class-loader": "~2.1", + "symfony/config": "~2.0,>=2.0.5", + "symfony/console": "~2.3", + "symfony/css-selector": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.2", + "symfony/dom-crawler": "~2.0,>=2.0.5", + "symfony/expression-language": "~2.4", + "symfony/finder": "~2.0,>=2.0.5", + "symfony/phpunit-bridge": "~2.7", + "symfony/process": "~2.0,>=2.0.5", + "symfony/routing": "~2.2", + "symfony/stopwatch": "~2.3", + "symfony/templating": "~2.2", + "symfony/translation": "~2.0,>=2.0.5", + "symfony/var-dumper": "~2.6" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/class-loader": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "", + "symfony/var-dumper": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpKernel\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2016-01-14T10:11:16+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/0e3b212e96a51338639d8ce175c046d7729c3403", + "reference": "0e3b212e96a51338639d8ce175c046d7729c3403", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "4317de1386717b4c22caed7725350a8887ab205c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/4317de1386717b4c22caed7725350a8887ab205c", + "reference": "4317de1386717b4c22caed7725350a8887ab205c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/process", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Process", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "57f1e88bb5dafa449b83f9f265b11d52d517b3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/57f1e88bb5dafa449b83f9f265b11d52d517b3e9", + "reference": "57f1e88bb5dafa449b83f9f265b11d52d517b3e9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Process\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2015-06-30T16:10:16+00:00" + }, + { + "name": "symfony/routing", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Routing", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "0a1764d41bbb54f3864808c50569ac382b44d128" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/0a1764d41bbb54f3864808c50569ac382b44d128", + "reference": "0a1764d41bbb54f3864808c50569ac382b44d128", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/common": "~2.2", + "psr/log": "~1.0", + "symfony/config": "~2.2", + "symfony/expression-language": "~2.4", + "symfony/http-foundation": "~2.3", + "symfony/phpunit-bridge": "~2.7", + "symfony/yaml": "~2.0,>=2.0.5" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "time": "2015-07-09T16:02:48+00:00" + }, + { + "name": "symfony/security-core", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Security/Core", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "813cf2aaacccbbe1a4705aef8d4ac0d79d993a76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/813cf2aaacccbbe1a4705aef8d4ac0d79d993a76", + "reference": "813cf2aaacccbbe1a4705aef8d4ac0d79d993a76", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0", + "php": ">=5.3.3" + }, + "require-dev": { + "ircmaxell/password-compat": "1.0.*", + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1", + "symfony/expression-language": "~2.6", + "symfony/http-foundation": "~2.4", + "symfony/phpunit-bridge": "~2.7", + "symfony/translation": "~2.0,>=2.0.5", + "symfony/validator": "~2.5,>=2.5.5" + }, + "suggest": { + "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Security\\Core\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "time": "2016-01-14T09:04:34+00:00" + }, + { + "name": "symfony/translation", + "version": "v2.6.13", + "target-dir": "Symfony/Component/Translation", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d84291215b5892834dd8ca8ee52f9cbdb8274904" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d84291215b5892834dd8ca8ee52f9cbdb8274904", + "reference": "d84291215b5892834dd8ca8ee52f9cbdb8274904", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.3,>=2.3.12", + "symfony/intl": "~2.3", + "symfony/phpunit-bridge": "~2.7", + "symfony/yaml": "~2.2" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2015-07-08T05:59:48+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v2.6.13", + "target-dir": "Symfony/Component/VarDumper", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "5fba957a30161d8724aade093593cd22f815bea2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5fba957a30161d8724aade093593cd22f815bea2", + "reference": "5fba957a30161d8724aade093593cd22f815bea2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "suggest": { + "ext-symfony_debug": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-0": { + "Symfony\\Component\\VarDumper\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2015-07-01T10:03:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Dotenv": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "authors": [ + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "http://www.vancelucas.com" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "homepage": "http://github.com/vlucas/phpdotenv", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2015-05-30T15:59:26+00:00" + }, + { + "name": "webpatser/laravel-uuid", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/webpatser/laravel-uuid.git", + "reference": "c87d5c631938edad7aae96d27881e3ea3de23d80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webpatser/laravel-uuid/zipball/c87d5c631938edad7aae96d27881e3ea3de23d80", + "reference": "c87d5c631938edad7aae96d27881e3ea3de23d80", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "fzaninotto/faker": "1.5.*", + "phpunit/phpunit": "4.7.*" + }, + "suggest": { + "paragonie/random_compat": "A random_bytes Php 5.x polyfill." + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Uuid": "Webpatser\\Uuid\\Uuid" + } + } + }, + "autoload": { + "psr-0": { + "Webpatser\\Uuid": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoph Kempen", + "email": "christoph@downsized.nl" + } + ], + "description": "Class to generate a UUID according to the RFC 4122 standard. Support for version 1, 3, 4 and 5 UUID are built-in.", + "homepage": "https://github.com/webpatser/uuid", + "keywords": [ + "UUID RFC4122" + ], + "time": "2017-09-10T21:34:32+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/php-diff", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a", + "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton", + "role": "Original developer" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "time": "2013-11-01T13:02:21+00:00" + }, + { + "name": "phpspec/phpspec", + "version": "2.5.8", + "source": { + "type": "git", + "url": "https://github.com/phpspec/phpspec.git", + "reference": "d8a153dcb52f929b448c0bf2cc19c7388951adb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/phpspec/zipball/d8a153dcb52f929b448c0bf2cc19c7388951adb1", + "reference": "d8a153dcb52f929b448c0bf2cc19c7388951adb1", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.1", + "ext-tokenizer": "*", + "php": ">=5.3.3", + "phpspec/php-diff": "~1.0.0", + "phpspec/prophecy": "~1.4", + "sebastian/exporter": "~1.0|~2.0|^3.0", + "symfony/console": "~2.3|~3.0,!=3.2.8", + "symfony/event-dispatcher": "~2.1|~3.0", + "symfony/finder": "~2.1|~3.0", + "symfony/process": "^2.6|~3.0", + "symfony/yaml": "~2.1|~3.0" + }, + "require-dev": { + "behat/behat": "^3.0.11,!=3.3.1", + "ciaranmcnulty/versionbasedtestskipper": "^0.2.1", + "phpunit/phpunit": "~4.4", + "symfony/filesystem": "~2.1|~3.0" + }, + "suggest": { + "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters" + }, + "bin": [ + "bin/phpspec" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "PhpSpec": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "homepage": "http://marcelloduarte.net/" + } + ], + "description": "Specification-oriented BDD framework for PHP 5.3+", + "homepage": "http://phpspec.net/", + "keywords": [ + "BDD", + "SpecBDD", + "TDD", + "spec", + "specification", + "testing", + "tests" + ], + "time": "2017-07-29T17:19:38+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", + "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2019-10-03T11:07:50+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "abandoned": true, + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/af615970e265543a26ee712c958404eb9b7ac93d", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-01-20T15:04:53+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2019-08-24T08:43:50+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "netshell/paypal": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..c6b85c3 --- /dev/null +++ b/config/app.php @@ -0,0 +1,210 @@ + env('APP_DEBUG'), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => 'http://localhost', + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY', 'SomeRandomString'), + + 'cipher' => MCRYPT_RIJNDAEL_128, + + /* + |-------------------------------------------------------------------------- + | Logging Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure the log settings for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Settings: "single", "daily", "syslog", "errorlog" + | + */ + + 'log' => 'daily', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + 'Illuminate\Foundation\Providers\ArtisanServiceProvider', + 'Illuminate\Auth\AuthServiceProvider', + 'Illuminate\Bus\BusServiceProvider', + 'Illuminate\Cache\CacheServiceProvider', + 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', + 'Illuminate\Routing\ControllerServiceProvider', + 'Illuminate\Cookie\CookieServiceProvider', + 'Illuminate\Database\DatabaseServiceProvider', + 'Illuminate\Encryption\EncryptionServiceProvider', + 'Illuminate\Filesystem\FilesystemServiceProvider', + 'Illuminate\Foundation\Providers\FoundationServiceProvider', + 'Illuminate\Hashing\HashServiceProvider', + 'Illuminate\Mail\MailServiceProvider', + 'Illuminate\Pagination\PaginationServiceProvider', + 'Illuminate\Pipeline\PipelineServiceProvider', + 'Illuminate\Queue\QueueServiceProvider', + 'Illuminate\Redis\RedisServiceProvider', + 'Illuminate\Auth\Passwords\PasswordResetServiceProvider', + 'Illuminate\Session\SessionServiceProvider', + 'Illuminate\Translation\TranslationServiceProvider', + 'Illuminate\Validation\ValidationServiceProvider', + 'Illuminate\View\ViewServiceProvider', + + /* + * Application Service Providers... + */ + 'App\Providers\AppServiceProvider', + 'App\Providers\BusServiceProvider', + 'App\Providers\ConfigServiceProvider', + 'App\Providers\EventServiceProvider', + 'App\Providers\RouteServiceProvider', + + /* + * Paypal + */ + 'Netshell\Paypal\PaypalServiceProvider', + + /* + * Google analytics + */ + 'Spatie\LaravelAnalytics\LaravelAnalyticsServiceProvider', + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => 'Illuminate\Support\Facades\App', + 'Artisan' => 'Illuminate\Support\Facades\Artisan', + 'Auth' => 'Illuminate\Support\Facades\Auth', + 'Blade' => 'Illuminate\Support\Facades\Blade', + 'Bus' => 'Illuminate\Support\Facades\Bus', + 'Cache' => 'Illuminate\Support\Facades\Cache', + 'Config' => 'Illuminate\Support\Facades\Config', + 'Cookie' => 'Illuminate\Support\Facades\Cookie', + 'Crypt' => 'Illuminate\Support\Facades\Crypt', + 'DB' => 'Illuminate\Support\Facades\DB', + 'Eloquent' => 'Illuminate\Database\Eloquent\Model', + 'Event' => 'Illuminate\Support\Facades\Event', + 'File' => 'Illuminate\Support\Facades\File', + 'Hash' => 'Illuminate\Support\Facades\Hash', + 'Input' => 'Illuminate\Support\Facades\Input', + 'Inspiring' => 'Illuminate\Foundation\Inspiring', + 'Lang' => 'Illuminate\Support\Facades\Lang', + 'Log' => 'Illuminate\Support\Facades\Log', + 'Mail' => 'Illuminate\Support\Facades\Mail', + 'Password' => 'Illuminate\Support\Facades\Password', + 'Queue' => 'Illuminate\Support\Facades\Queue', + 'Redirect' => 'Illuminate\Support\Facades\Redirect', + 'Redis' => 'Illuminate\Support\Facades\Redis', + 'Request' => 'Illuminate\Support\Facades\Request', + 'Response' => 'Illuminate\Support\Facades\Response', + 'Route' => 'Illuminate\Support\Facades\Route', + 'Schema' => 'Illuminate\Support\Facades\Schema', + 'Session' => 'Illuminate\Support\Facades\Session', + 'Storage' => 'Illuminate\Support\Facades\Storage', + 'URL' => 'Illuminate\Support\Facades\URL', + 'Validator' => 'Illuminate\Support\Facades\Validator', + 'View' => 'Illuminate\Support\Facades\View', + 'Paypal' => 'Netshell\Paypal\Facades\Paypal', + 'Analytics' => 'Spatie\LaravelAnalytics\LaravelAnalyticsFacade', + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..177e552 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,67 @@ + 'eloquent', + + /* + |-------------------------------------------------------------------------- + | Authentication Model + |-------------------------------------------------------------------------- + | + | When using the "Eloquent" authentication driver, we need to know which + | Eloquent model should be used to retrieve your users. Of course, it + | is often just the "User" model but you may use whatever you like. + | + */ + + 'model' => 'App\User', + + /* + |-------------------------------------------------------------------------- + | Authentication Table + |-------------------------------------------------------------------------- + | + | When using the "Database" authentication driver, we need to know which + | table should be used to retrieve your users. We have chosen a basic + | default value but you may easily change it to any table you like. + | + */ + + 'table' => 'users', + + /* + |-------------------------------------------------------------------------- + | Password Reset Settings + |-------------------------------------------------------------------------- + | + | Here you may set the options for resetting passwords including the view + | that is your password reset e-mail. You can also set the name of the + | table that maintains all of the reset tokens for your application. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'password' => [ + 'email' => 'emails.password', + 'table' => 'password_resets', + // 'expire' => 60, + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..9ddd5f3 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,79 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc' + ], + + 'array' => [ + 'driver' => 'array' + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path().'/framework/cache', + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'servers' => [ + [ + 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100 + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => 'laravel', + +]; diff --git a/config/compile.php b/config/compile.php new file mode 100644 index 0000000..3a002fc --- /dev/null +++ b/config/compile.php @@ -0,0 +1,41 @@ + [ + + realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'), + realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'), + realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'), + realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'), + realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'), + + ], + + /* + |-------------------------------------------------------------------------- + | Compiled File Providers + |-------------------------------------------------------------------------- + | + | Here you may list service providers which define a "compiles" function + | that returns additional files that should be compiled, providing an + | easy way to get common files from any packages you are utilizing. + | + */ + + 'providers' => [ + // + ], + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..01e997d --- /dev/null +++ b/config/database.php @@ -0,0 +1,125 @@ + PDO::FETCH_CLASS, + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for all database work. Of course + | you may use many connections at once using the Database library. + | + */ + + 'default' => 'mysql', + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'database' => storage_path().'/database.sqlite', + 'prefix' => '', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'custom_design'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + 'strict' => false, + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'prefix' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'cluster' => false, + + 'default' => [ + 'host' => '127.0.0.1', + 'port' => 6379, + 'database' => 0, + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..3e7e6cf --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,91 @@ + 'local', + + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ + + 'cloud' => 's3', + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path().'/app', + ], + + 'localdir' => [ + 'driver' => 'local', + 'root' => '/var/www/html/uploads/images', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => 'your-key', + 'secret' => 'your-secret', + 'region' => 'your-region', + 'bucket' => 'your-bucket', + ], + + 'rackspace' => [ + 'driver' => 'rackspace', + 'username' => 'your-username', + 'key' => 'your-key', + 'container' => 'your-container', + 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', + 'region' => 'IAD', + 'url_type' => 'publicURL' + ], + + 'sftp' => [ + 'driver' => 'sftp', + 'host' => '35.232.234.8', + 'port' => 22, + 'username' => 'root', + 'password' => '', + 'privateKey' => '/var/www/html/_key/instance2/root.ppk', + 'root' => '/var/www/html/images', + 'timeout' => 10 + ], + + 'uploads' => [ + 'driver' => 'local', + 'root' => '/var/www/html/uploads/images', + ], + ], + +]; diff --git a/config/laravel-analytics.php b/config/laravel-analytics.php new file mode 100644 index 0000000..fb85f54 --- /dev/null +++ b/config/laravel-analytics.php @@ -0,0 +1,48 @@ + env('ANALYTICS_SITE_ID'), + + /* + * Set the client id + * + * Should look like: + * xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com + */ + 'clientId' => env('ANALYTICS_CLIENT_ID'), + + /* + * Set the service account name + * + * Should look like: + * xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com + */ + 'serviceEmail' => env('ANALYTICS_SERVICE_EMAIL'), + + /* + * You need to download a p12-certifciate from the Google API console + * Be sure to store this file in a secure location. + */ + 'certificatePath' => storage_path('laravel-analytics/hardy-beach-228905-7755a62c7a35.p12'), + + /* + * The amount of minutes the Google API responses will be cached. + * If you set this to zero, the responses won't be cached at all. + */ + 'cacheLifetime' => 60 * 24 * 2, + + /* + * The amount of seconds the Google API responses will be cached for + * queries that use the real time query method. If you set this to zero, + * the responses of real time queries won't be cached at all. + */ + 'realTimeCacheLifetimeInSeconds' => 5, + ]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..02e757e --- /dev/null +++ b/config/mail.php @@ -0,0 +1,127 @@ + env('MAIL_DRIVER', 'smtp'), + 'driver' => env('MAIL_DRIVER'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + // 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'host' => env('MAIL_HOST'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + // 'port' => env('MAIL_PORT', 587), + 'port' => env('MAIL_PORT'), + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => ['address' => 'noreply@crewsportswear.com', 'name' => 'no-reply'], + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => 'tls', + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => env('MAIL_USERNAME'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Password + |-------------------------------------------------------------------------- + | + | Here you may set the password required by your SMTP server to send out + | messages from your application. This will be given to the server on + | connection so that the application will be able to send messages. + | + */ + + 'password' => env('MAIL_PASSWORD'), + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Mail "Pretend" + |-------------------------------------------------------------------------- + | + | When this option is enabled, e-mail will not actually be sent over the + | web and will instead be written to your application's logs files so + | you may inspect the message. This is great for local development. + | + */ + + 'pretend' => false, + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..9c39a13 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,92 @@ + env('QUEUE_DRIVER', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'expire' => 60, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'ttr' => 60, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'queue' => 'your-queue-url', + 'region' => 'us-east-1', + ], + + 'iron' => [ + 'driver' => 'iron', + 'host' => 'mq-aws-us-east-1.iron.io', + 'token' => 'your-token', + 'project' => 'your-project-id', + 'queue' => 'your-queue-name', + 'encrypt' => true, + ], + + 'redis' => [ + 'driver' => 'redis', + 'queue' => 'default', + 'expire' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'database' => 'mysql', 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..f4ddf3b --- /dev/null +++ b/config/services.php @@ -0,0 +1,49 @@ + [ + 'domain' => '', + 'secret' => '', + ], + + 'mandrill' => [ + 'secret' => '', + ], + + 'ses' => [ + 'key' => '', + 'secret' => '', + 'region' => 'us-east-1', + ], + + 'stripe' => [ + 'model' => 'App\User', + 'secret' => '', + ], + + // sandbox + // 'paypal' => [ + // 'client_id' => 'AQuz-HKzQiL7FygkG8skSekaWf-RP6Rgj4f1XeX1Ghp86bUFj7tQXVT1xbpluu5_WCGRbQpOVGtlJKVB', + // 'secret' => 'EJAMKxQsl-mFkL_4J_90cvTamYfcsgswqgIxz9wQPiRAwJ6sy_wNsttMlmrXIpxI96JpYzdMXkLCHAPz' + // ], + + // live + 'paypal' => [ + 'client_id' => 'AUqBUFW5lfyYmrlBtFZA3RNw45sttM3ltbvS_d4qCVBMrkcMG9rEeivGvtNFSy8XTiEp50YyQ6khKxbq', + 'secret' => 'ELlnuiupoFKwGUSc2g5j-sD1EmsvKpdhth1gFV7njpfvyNtKsK8WwIKUMOS0ehJcRatV865eMhfgsnd_' + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..38b7201 --- /dev/null +++ b/config/session.php @@ -0,0 +1,154 @@ + 'database', + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => 120, + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path().'/framework/sessions', + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + // 'cookie' => 'laravel_session', + 'cookie' => 'crewsportswear_laravel_session', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => null, + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => false, + +]; diff --git a/config/site_config.php b/config/site_config.php new file mode 100644 index 0000000..56d7efa --- /dev/null +++ b/config/site_config.php @@ -0,0 +1,24 @@ + env('COMPANY_NAME','Acme Inc'), + // 'company_email' => env('COMPANY_email','contact@acme.inc'), + + 'prod_private_server_ip' => env('https://crewsportswear.app', 'https://crewsportswear.app'), + 'images_url' => env('https://crewsportswear.app:5955', 'https://crewsportswear.app:5955'), + 'uploads' => env('https://crewsportswear.com/uploads/images/', 'https://crewsportswear.com/uploads/images/'), // local + + +]; \ No newline at end of file diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..88fc534 --- /dev/null +++ b/config/view.php @@ -0,0 +1,33 @@ + [ + realpath(base_path('resources/views')) + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => realpath(storage_path().'/framework/views'), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b1dffd --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/2019_01_25_152539_create_session_table.php b/database/migrations/2019_01_25_152539_create_session_table.php new file mode 100644 index 0000000..2aac433 --- /dev/null +++ b/database/migrations/2019_01_25_152539_create_session_table.php @@ -0,0 +1,32 @@ +string('id')->unique(); + $t->text('payload'); + $t->integer('last_activity'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('sessions'); + } + +} diff --git a/database/migrations/2020_11_17_214014_create_api_models_table.php b/database/migrations/2020_11_17_214014_create_api_models_table.php new file mode 100644 index 0000000..4ca30dc --- /dev/null +++ b/database/migrations/2020_11_17_214014_create_api_models_table.php @@ -0,0 +1,32 @@ +increments('id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('api_models'); + } + +} diff --git a/database/seeds/.gitkeep b/database/seeds/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100644 index 0000000..b3c69b5 --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,20 @@ +call('UserTableSeeder'); + } + +} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..7cf6267 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,16 @@ +var elixir = require('laravel-elixir'); + +/* + |-------------------------------------------------------------------------- + | Elixir Asset Management + |-------------------------------------------------------------------------- + | + | Elixir provides a clean, fluent API for defining some basic Gulp tasks + | for your Laravel application. By default, we are compiling the Less + | file for our application, as well as publishing vendor resources. + | + */ + +elixir(function(mix) { + mix.less('app.less'); +}); diff --git a/index.php b/index.php new file mode 100644 index 0000000..036d90e --- /dev/null +++ b/index.php @@ -0,0 +1,57 @@ + + */ + +/* +|-------------------------------------------------------------------------- +| Register The Auto Loader +|-------------------------------------------------------------------------- +| +| Composer provides a convenient, automatically generated class loader for +| our application. We just need to utilize it! We'll simply require it +| into the script here so that we don't have to worry about manual +| loading any of our classes later on. It feels nice to relax. +| +*/ + +require __DIR__.'/bootstrap/autoload.php'; + +/* +|-------------------------------------------------------------------------- +| Turn On The Lights +|-------------------------------------------------------------------------- +| +| We need to illuminate PHP development, so let us turn on the lights. +| This bootstraps the framework and gets it ready for use, then it +| will load up this application so that we can run it and send +| the responses back to the browser and delight our users. +| +*/ + +$app = require_once __DIR__.'/bootstrap/app.php'; + +/* +|-------------------------------------------------------------------------- +| Run The Application +|-------------------------------------------------------------------------- +| +| Once we have the application, we can simply call the run method, +| which will execute the request and send the response back to +| the client's browser allowing them to enjoy the creative +| and wonderful application we have prepared for them. +| +*/ + +$kernel = $app->make('Illuminate\Contracts\Http\Kernel'); + +$response = $kernel->handle( + $request = Illuminate\Http\Request::capture() +); + +$response->send(); + +$kernel->terminate($request, $response); diff --git a/package.json b/package.json new file mode 100644 index 0000000..5595f07 --- /dev/null +++ b/package.json @@ -0,0 +1,7 @@ +{ + "private": true, + "devDependencies": { + "gulp": "^3.8.8", + "laravel-elixir": "*" + } +} diff --git a/phpspec.yml b/phpspec.yml new file mode 100644 index 0000000..eb57939 --- /dev/null +++ b/phpspec.yml @@ -0,0 +1,5 @@ +suites: + main: + namespace: App + psr4_prefix: App + src_path: app \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..d66acd0 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,23 @@ + + + + + ./tests/ + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..173b620 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,15 @@ + + + Options -MultiViews + + + RewriteEngine On + + # Redirect Trailing Slashes... + RewriteRule ^(.*)/$ /$1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/api/usaCities.json b/public/api/usaCities.json new file mode 100644 index 0000000..85c8117 --- /dev/null +++ b/public/api/usaCities.json @@ -0,0 +1,23909 @@ +[{ + "city": "Abbeville", + "state": "Louisiana" + }, + { + "city": "Aberdeen", + "state": "Maryland" + }, + { + "city": "Aberdeen", + "state": "Mississippi" + }, + { + "city": "Aberdeen", + "state": "South Dakota" + }, + { + "city": "Aberdeen", + "state": "Washington" + }, + { + "city": "Abilene", + "state": "Texas" + }, + { + "city": "Abilene", + "state": "Kansas" + }, + { + "city": "Abingdon", + "state": "Virginia" + }, + { + "city": "Abington", + "state": "Massachusetts" + }, + { + "city": "Abington", + "state": "Massachusetts" + }, + { + "city": "Absecon", + "state": "New Jersey" + }, + { + "city": "Accokeek", + "state": "Maryland" + }, + { + "city": "Acton", + "state": "Massachusetts" + }, + { + "city": "Acushnet", + "state": "Massachusetts" + }, + { + "city": "Acworth", + "state": "Georgia" + }, + { + "city": "Ada", + "state": "Oklahoma" + }, + { + "city": "Adams", + "state": "Massachusetts" + }, + { + "city": "Addison", + "state": "Illinois" + }, + { + "city": "Addison", + "state": "Texas" + }, + { + "city": "Adelanto", + "state": "California" + }, + { + "city": "Adelphi", + "state": "Maryland" + }, + { + "city": "Adrian", + "state": "Michigan" + }, + { + "city": "Affton", + "state": "Missouri" + }, + { + "city": "Agawam", + "state": "Massachusetts" + }, + { + "city": "Agoura Hills", + "state": "California" + }, + { + "city": "Ahuimanu", + "state": "Hawaii" + }, + { + "city": "Aiea", + "state": "Hawaii" + }, + { + "city": "Aiken", + "state": "South Carolina" + }, + { + "city": "Air Force Academy", + "state": "Colorado" + }, + { + "city": "Airmont", + "state": "New York" + }, + { + "city": "Akron", + "state": "Ohio" + }, + { + "city": "Alabaster", + "state": "Alabama" + }, + { + "city": "Alachua", + "state": "Florida" + }, + { + "city": "Alameda", + "state": "California" + }, + { + "city": "Alamo", + "state": "California" + }, + { + "city": "Alamo", + "state": "Texas" + }, + { + "city": "Alamo Heights", + "state": "Texas" + }, + { + "city": "Alamogordo", + "state": "New Mexico" + }, + { + "city": "Alamosa", + "state": "Colorado" + }, + { + "city": "Albany", + "state": "Georgia" + }, + { + "city": "Albany", + "state": "California" + }, + { + "city": "Albany", + "state": "New York" + }, + { + "city": "Albany", + "state": "Oregon" + }, + { + "city": "Albemarle", + "state": "North Carolina" + }, + { + "city": "Albert Lea", + "state": "Minnesota" + }, + { + "city": "Albertville", + "state": "Alabama" + }, + { + "city": "Albion", + "state": "Michigan" + }, + { + "city": "Albion", + "state": "New York" + }, + { + "city": "Albion", + "state": "New York" + }, + { + "city": "Albuquerque", + "state": "New Mexico" + }, + { + "city": "Alcoa", + "state": "Tennessee" + }, + { + "city": "Alden", + "state": "New York" + }, + { + "city": "Alderwood Manor", + "state": "Washington" + }, + { + "city": "Aldine", + "state": "Texas" + }, + { + "city": "Alexander City", + "state": "Alabama" + }, + { + "city": "Alexandria", + "state": "Indiana" + }, + { + "city": "Alexandria", + "state": "Minnesota" + }, + { + "city": "Alexandria", + "state": "Kentucky" + }, + { + "city": "Alexandria", + "state": "Louisiana" + }, + { + "city": "Alexandria", + "state": "Virginia" + }, + { + "city": "Algonquin", + "state": "Illinois" + }, + { + "city": "Alhambra", + "state": "California" + }, + { + "city": "Alice", + "state": "Texas" + }, + { + "city": "Aliquippa", + "state": "Pennsylvania" + }, + { + "city": "Aliso Viejo", + "state": "California" + }, + { + "city": "Allegany", + "state": "New York" + }, + { + "city": "Allen", + "state": "Texas" + }, + { + "city": "Allen Park", + "state": "Michigan" + }, + { + "city": "Allendale", + "state": "Michigan" + }, + { + "city": "Allendale", + "state": "New Jersey" + }, + { + "city": "Allentown", + "state": "Pennsylvania" + }, + { + "city": "Alliance", + "state": "Ohio" + }, + { + "city": "Alliance", + "state": "Nebraska" + }, + { + "city": "Allouez", + "state": "Wisconsin" + }, + { + "city": "Alma", + "state": "Michigan" + }, + { + "city": "Aloha", + "state": "Oregon" + }, + { + "city": "Alondra Park", + "state": "California" + }, + { + "city": "Alpena", + "state": "Michigan" + }, + { + "city": "Alpharetta", + "state": "Georgia" + }, + { + "city": "Alpine", + "state": "California" + }, + { + "city": "Alpine", + "state": "Utah" + }, + { + "city": "Alsip", + "state": "Illinois" + }, + { + "city": "Alta Sierra", + "state": "California" + }, + { + "city": "Altadena", + "state": "California" + }, + { + "city": "Altamont", + "state": "Oregon" + }, + { + "city": "Altamont", + "state": "New York" + }, + { + "city": "Altamonte Springs", + "state": "Florida" + }, + { + "city": "Alton", + "state": "Illinois" + }, + { + "city": "Altoona", + "state": "Iowa" + }, + { + "city": "Altoona", + "state": "Pennsylvania" + }, + { + "city": "Altoona", + "state": "Wisconsin" + }, + { + "city": "Altus", + "state": "Oklahoma" + }, + { + "city": "Alum Rock", + "state": "California" + }, + { + "city": "Alvin", + "state": "Texas" + }, + { + "city": "Amarillo", + "state": "Texas" + }, + { + "city": "Ambler", + "state": "Pennsylvania" + }, + { + "city": "Ambridge", + "state": "Pennsylvania" + }, + { + "city": "American Canyon", + "state": "California" + }, + { + "city": "American Fork", + "state": "Utah" + }, + { + "city": "Americus", + "state": "Georgia" + }, + { + "city": "Ames", + "state": "Iowa" + }, + { + "city": "Amesbury", + "state": "Massachusetts" + }, + { + "city": "Amesbury", + "state": "Massachusetts" + }, + { + "city": "Amherst", + "state": "New Hampshire" + }, + { + "city": "Amherst", + "state": "Massachusetts" + }, + { + "city": "Amherst", + "state": "Ohio" + }, + { + "city": "Amherst", + "state": "New York" + }, + { + "city": "Amherst Center", + "state": "Massachusetts" + }, + { + "city": "Amityville", + "state": "New York" + }, + { + "city": "Ammon", + "state": "Idaho" + }, + { + "city": "Amory", + "state": "Mississippi" + }, + { + "city": "Amsterdam", + "state": "New York" + }, + { + "city": "Anaconda-Deer Lodge County", + "state": "Montana" + }, + { + "city": "Anacortes", + "state": "Washington" + }, + { + "city": "Anadarko", + "state": "Oklahoma" + }, + { + "city": "Anaheim", + "state": "California" + }, + { + "city": "Anchorage", + "state": "Alaska" + }, + { + "city": "Andalusia", + "state": "Alabama" + }, + { + "city": "Anderson", + "state": "California" + }, + { + "city": "Anderson", + "state": "Indiana" + }, + { + "city": "Anderson", + "state": "South Carolina" + }, + { + "city": "Anderson Mill", + "state": "Texas" + }, + { + "city": "Andover", + "state": "Florida" + }, + { + "city": "Andover", + "state": "Minnesota" + }, + { + "city": "Andover", + "state": "Massachusetts" + }, + { + "city": "Andover", + "state": "Kansas" + }, + { + "city": "Andover", + "state": "Massachusetts" + }, + { + "city": "Andrews", + "state": "Texas" + }, + { + "city": "Andrews AFB", + "state": "Maryland" + }, + { + "city": "Angleton", + "state": "Texas" + }, + { + "city": "Angola", + "state": "Indiana" + }, + { + "city": "Ankeny", + "state": "Iowa" + }, + { + "city": "Ann Arbor", + "state": "Michigan" + }, + { + "city": "Annandale", + "state": "Virginia" + }, + { + "city": "Annapolis", + "state": "Maryland" + }, + { + "city": "Anniston", + "state": "Alabama" + }, + { + "city": "Anoka", + "state": "Minnesota" + }, + { + "city": "Ansonia", + "state": "Connecticut" + }, + { + "city": "Ansonia", + "state": "Connecticut" + }, + { + "city": "Anthony", + "state": "New Mexico" + }, + { + "city": "Antigo", + "state": "Wisconsin" + }, + { + "city": "Antioch", + "state": "Illinois" + }, + { + "city": "Antioch", + "state": "California" + }, + { + "city": "Apache Junction", + "state": "Arizona" + }, + { + "city": "Apex", + "state": "North Carolina" + }, + { + "city": "Apollo Beach", + "state": "Florida" + }, + { + "city": "Apopka", + "state": "Florida" + }, + { + "city": "Apple Valley", + "state": "California" + }, + { + "city": "Apple Valley", + "state": "Minnesota" + }, + { + "city": "Appleton", + "state": "Wisconsin" + }, + { + "city": "Applewood", + "state": "Colorado" + }, + { + "city": "Aptos", + "state": "California" + }, + { + "city": "Aquia Harbour", + "state": "Virginia" + }, + { + "city": "Arab", + "state": "Alabama" + }, + { + "city": "Arabi", + "state": "Louisiana" + }, + { + "city": "Aransas Pass", + "state": "Texas" + }, + { + "city": "Arbutus", + "state": "Maryland" + }, + { + "city": "Arcadia", + "state": "California" + }, + { + "city": "Arcadia", + "state": "Florida" + }, + { + "city": "Arcadia", + "state": "New York" + }, + { + "city": "Arcata", + "state": "California" + }, + { + "city": "Archbald", + "state": "Pennsylvania" + }, + { + "city": "Archdale", + "state": "North Carolina" + }, + { + "city": "Arden Hills", + "state": "Minnesota" + }, + { + "city": "Arden-Arcade", + "state": "California" + }, + { + "city": "Ardmore", + "state": "Oklahoma" + }, + { + "city": "Ardmore", + "state": "Pennsylvania" + }, + { + "city": "Arkadelphia", + "state": "Arkansas" + }, + { + "city": "Arkansas City", + "state": "Kansas" + }, + { + "city": "Arlington", + "state": "Massachusetts" + }, + { + "city": "Arlington", + "state": "Massachusetts" + }, + { + "city": "Arlington", + "state": "Texas" + }, + { + "city": "Arlington", + "state": "New York" + }, + { + "city": "Arlington", + "state": "Virginia" + }, + { + "city": "Arlington", + "state": "Washington" + }, + { + "city": "Arlington Heights", + "state": "Illinois" + }, + { + "city": "Arnold", + "state": "Missouri" + }, + { + "city": "Arnold", + "state": "Maryland" + }, + { + "city": "Arroyo Grande", + "state": "California" + }, + { + "city": "Artesia", + "state": "California" + }, + { + "city": "Artesia", + "state": "New Mexico" + }, + { + "city": "Artondale", + "state": "Washington" + }, + { + "city": "Arvada", + "state": "Colorado" + }, + { + "city": "Arvin", + "state": "California" + }, + { + "city": "Asbury Park", + "state": "New Jersey" + }, + { + "city": "Asheboro", + "state": "North Carolina" + }, + { + "city": "Asheville", + "state": "North Carolina" + }, + { + "city": "Ashland", + "state": "Oregon" + }, + { + "city": "Ashland", + "state": "Ohio" + }, + { + "city": "Ashland", + "state": "Virginia" + }, + { + "city": "Ashland", + "state": "Wisconsin" + }, + { + "city": "Ashland", + "state": "New Jersey" + }, + { + "city": "Ashland", + "state": "Massachusetts" + }, + { + "city": "Ashland", + "state": "Kentucky" + }, + { + "city": "Ashland", + "state": "California" + }, + { + "city": "Ashtabula", + "state": "Ohio" + }, + { + "city": "Ashwaubenon", + "state": "Wisconsin" + }, + { + "city": "Aspen Hill", + "state": "Maryland" + }, + { + "city": "Astoria", + "state": "Oregon" + }, + { + "city": "Atascadero", + "state": "California" + }, + { + "city": "Atascocita", + "state": "Texas" + }, + { + "city": "Atchison", + "state": "Kansas" + }, + { + "city": "Athens", + "state": "Alabama" + }, + { + "city": "Athens", + "state": "Texas" + }, + { + "city": "Athens", + "state": "Tennessee" + }, + { + "city": "Athens", + "state": "Ohio" + }, + { + "city": "Athens-Clarke County", + "state": "Georgia" + }, + { + "city": "Atherton", + "state": "California" + }, + { + "city": "Athol", + "state": "Massachusetts" + }, + { + "city": "Athol", + "state": "Massachusetts" + }, + { + "city": "Atkinson", + "state": "New Hampshire" + }, + { + "city": "Atlanta", + "state": "Georgia" + }, + { + "city": "Atlantic", + "state": "Iowa" + }, + { + "city": "Atlantic Beach", + "state": "Florida" + }, + { + "city": "Atlantic City", + "state": "New Jersey" + }, + { + "city": "Atmore", + "state": "Alabama" + }, + { + "city": "Attalla", + "state": "Alabama" + }, + { + "city": "Attica", + "state": "New York" + }, + { + "city": "Attleboro", + "state": "Massachusetts" + }, + { + "city": "Atwater", + "state": "California" + }, + { + "city": "Auburn", + "state": "California" + }, + { + "city": "Auburn", + "state": "Alabama" + }, + { + "city": "Auburn", + "state": "Georgia" + }, + { + "city": "Auburn", + "state": "Indiana" + }, + { + "city": "Auburn", + "state": "Massachusetts" + }, + { + "city": "Auburn", + "state": "Maine" + }, + { + "city": "Auburn", + "state": "New York" + }, + { + "city": "Auburn", + "state": "Washington" + }, + { + "city": "Auburn Hills", + "state": "Michigan" + }, + { + "city": "Auburndale", + "state": "Florida" + }, + { + "city": "Audubon", + "state": "New Jersey" + }, + { + "city": "Audubon", + "state": "Pennsylvania" + }, + { + "city": "August", + "state": "California" + }, + { + "city": "Augusta", + "state": "Maine" + }, + { + "city": "Augusta", + "state": "Kansas" + }, + { + "city": "Augusta-Richmond County", + "state": "Georgia" + }, + { + "city": "Aurora", + "state": "Illinois" + }, + { + "city": "Aurora", + "state": "Colorado" + }, + { + "city": "Aurora", + "state": "Missouri" + }, + { + "city": "Aurora", + "state": "New York" + }, + { + "city": "Aurora", + "state": "Ohio" + }, + { + "city": "Austin", + "state": "Texas" + }, + { + "city": "Austin", + "state": "Minnesota" + }, + { + "city": "Austintown", + "state": "Ohio" + }, + { + "city": "Avenal", + "state": "California" + }, + { + "city": "Avenel", + "state": "New Jersey" + }, + { + "city": "Aventura", + "state": "Florida" + }, + { + "city": "Avocado Heights", + "state": "California" + }, + { + "city": "Avon", + "state": "Connecticut" + }, + { + "city": "Avon", + "state": "Indiana" + }, + { + "city": "Avon", + "state": "Ohio" + }, + { + "city": "Avon", + "state": "New York" + }, + { + "city": "Avon Lake", + "state": "Ohio" + }, + { + "city": "Avon Park", + "state": "Florida" + }, + { + "city": "Avondale", + "state": "Arizona" + }, + { + "city": "Ayer", + "state": "Massachusetts" + }, + { + "city": "Azalea Park", + "state": "Florida" + }, + { + "city": "Azle", + "state": "Texas" + }, + { + "city": "Aztec", + "state": "New Mexico" + }, + { + "city": "Azusa", + "state": "California" + }, + { + "city": "Babylon", + "state": "New York" + }, + { + "city": "Babylon", + "state": "New York" + }, + { + "city": "Back Mountain", + "state": "Pennsylvania" + }, + { + "city": "Bacliff", + "state": "Texas" + }, + { + "city": "Bailey’s Crossroads", + "state": "Virginia" + }, + { + "city": "Bainbridge", + "state": "Georgia" + }, + { + "city": "Bainbridge Island", + "state": "Washington" + }, + { + "city": "Baker", + "state": "Louisiana" + }, + { + "city": "Baker City", + "state": "Oregon" + }, + { + "city": "Bakersfield", + "state": "California" + }, + { + "city": "Balch Springs", + "state": "Texas" + }, + { + "city": "Baldwin", + "state": "Pennsylvania" + }, + { + "city": "Baldwin", + "state": "New York" + }, + { + "city": "Baldwin Harbor", + "state": "New York" + }, + { + "city": "Baldwin Park", + "state": "California" + }, + { + "city": "Baldwinsville", + "state": "New York" + }, + { + "city": "Ballenger Creek", + "state": "Maryland" + }, + { + "city": "Ballston", + "state": "New York" + }, + { + "city": "Ballwin", + "state": "Missouri" + }, + { + "city": "Baltimore", + "state": "Maryland" + }, + { + "city": "Bangor", + "state": "Maine" + }, + { + "city": "Bangor Trident Base", + "state": "Washington" + }, + { + "city": "Banning", + "state": "California" + }, + { + "city": "Baraboo", + "state": "Wisconsin" + }, + { + "city": "Barberton", + "state": "Ohio" + }, + { + "city": "Barclay-Kingston", + "state": "New Jersey" + }, + { + "city": "Bardstown", + "state": "Kentucky" + }, + { + "city": "Barnhart", + "state": "Missouri" + }, + { + "city": "Barnstable Town", + "state": "Massachusetts" + }, + { + "city": "Barre", + "state": "Vermont" + }, + { + "city": "Barre", + "state": "Vermont" + }, + { + "city": "Barrington", + "state": "Rhode Island" + }, + { + "city": "Barrington", + "state": "Rhode Island" + }, + { + "city": "Barrington", + "state": "New Jersey" + }, + { + "city": "Barrington", + "state": "New Hampshire" + }, + { + "city": "Barrington", + "state": "Illinois" + }, + { + "city": "Barstow", + "state": "California" + }, + { + "city": "Bartlesville", + "state": "Oklahoma" + }, + { + "city": "Bartlett", + "state": "Illinois" + }, + { + "city": "Bartlett", + "state": "Tennessee" + }, + { + "city": "Barton", + "state": "New York" + }, + { + "city": "Bartonville", + "state": "Illinois" + }, + { + "city": "Bartow", + "state": "Florida" + }, + { + "city": "Bastrop", + "state": "Louisiana" + }, + { + "city": "Batavia", + "state": "Illinois" + }, + { + "city": "Batavia", + "state": "New York" + }, + { + "city": "Batesville", + "state": "Mississippi" + }, + { + "city": "Batesville", + "state": "Indiana" + }, + { + "city": "Batesville", + "state": "Arkansas" + }, + { + "city": "Bath", + "state": "Maine" + }, + { + "city": "Bath", + "state": "New York" + }, + { + "city": "Baton Rouge", + "state": "Louisiana" + }, + { + "city": "Battle Creek", + "state": "Michigan" + }, + { + "city": "Battle Ground", + "state": "Washington" + }, + { + "city": "Bay City", + "state": "Texas" + }, + { + "city": "Bay City", + "state": "Michigan" + }, + { + "city": "Bay Minette", + "state": "Alabama" + }, + { + "city": "Bay Point", + "state": "California" + }, + { + "city": "Bay Shore", + "state": "New York" + }, + { + "city": "Bay St. Louis", + "state": "Mississippi" + }, + { + "city": "Bay Village", + "state": "Ohio" + }, + { + "city": "Bayonet Point", + "state": "Florida" + }, + { + "city": "Bayonne", + "state": "New Jersey" + }, + { + "city": "Bayou Cane", + "state": "Louisiana" + }, + { + "city": "Bayport", + "state": "New York" + }, + { + "city": "Bayshore Gardens", + "state": "Florida" + }, + { + "city": "Baytown", + "state": "Texas" + }, + { + "city": "Bayville", + "state": "New York" + }, + { + "city": "Baywood", + "state": "New York" + }, + { + "city": "Baywood-Los Osos", + "state": "California" + }, + { + "city": "Beach Park", + "state": "Illinois" + }, + { + "city": "Beachwood", + "state": "Ohio" + }, + { + "city": "Beachwood", + "state": "New Jersey" + }, + { + "city": "Beacon", + "state": "New York" + }, + { + "city": "Beacon Square", + "state": "Florida" + }, + { + "city": "Bear", + "state": "Delaware" + }, + { + "city": "Beatrice", + "state": "Nebraska" + }, + { + "city": "Beaufort", + "state": "South Carolina" + }, + { + "city": "Beaumont", + "state": "Texas" + }, + { + "city": "Beaumont", + "state": "California" + }, + { + "city": "Beaver Dam", + "state": "Wisconsin" + }, + { + "city": "Beaver Falls", + "state": "Pennsylvania" + }, + { + "city": "Beavercreek", + "state": "Ohio" + }, + { + "city": "Beaverton", + "state": "Oregon" + }, + { + "city": "Beckett Ridge", + "state": "Ohio" + }, + { + "city": "Beckley", + "state": "West Virginia" + }, + { + "city": "Bedford", + "state": "Virginia" + }, + { + "city": "Bedford", + "state": "Texas" + }, + { + "city": "Bedford", + "state": "Ohio" + }, + { + "city": "Bedford", + "state": "New York" + }, + { + "city": "Bedford", + "state": "New Hampshire" + }, + { + "city": "Bedford", + "state": "Massachusetts" + }, + { + "city": "Bedford", + "state": "Indiana" + }, + { + "city": "Bedford Heights", + "state": "Ohio" + }, + { + "city": "Bee Ridge", + "state": "Florida" + }, + { + "city": "Beech Grove", + "state": "Indiana" + }, + { + "city": "Beecher", + "state": "Michigan" + }, + { + "city": "Beekman", + "state": "New York" + }, + { + "city": "Beeville", + "state": "Texas" + }, + { + "city": "Bel Air", + "state": "Maryland" + }, + { + "city": "Bel Air North", + "state": "Maryland" + }, + { + "city": "Bel Air South", + "state": "Maryland" + }, + { + "city": "Belchertown", + "state": "Massachusetts" + }, + { + "city": "Belen", + "state": "New Mexico" + }, + { + "city": "Belfast", + "state": "Maine" + }, + { + "city": "Bell", + "state": "California" + }, + { + "city": "Bell Gardens", + "state": "California" + }, + { + "city": "Bella Vista", + "state": "Arkansas" + }, + { + "city": "Bellair-Meadowbrook Terrace", + "state": "Florida" + }, + { + "city": "Bellaire", + "state": "Texas" + }, + { + "city": "Bellbrook", + "state": "Ohio" + }, + { + "city": "Belle Chasse", + "state": "Louisiana" + }, + { + "city": "Belle Glade", + "state": "Florida" + }, + { + "city": "Belle Haven", + "state": "Virginia" + }, + { + "city": "Bellefontaine", + "state": "Ohio" + }, + { + "city": "Bellefontaine Neighbors", + "state": "Missouri" + }, + { + "city": "Bellefonte", + "state": "Pennsylvania" + }, + { + "city": "Belleville", + "state": "New Jersey" + }, + { + "city": "Belleville", + "state": "Illinois" + }, + { + "city": "Bellevue", + "state": "Kentucky" + }, + { + "city": "Bellevue", + "state": "Nebraska" + }, + { + "city": "Bellevue", + "state": "Ohio" + }, + { + "city": "Bellevue", + "state": "Pennsylvania" + }, + { + "city": "Bellevue", + "state": "Wisconsin" + }, + { + "city": "Bellevue", + "state": "Washington" + }, + { + "city": "Bellevue Town", + "state": "Wisconsin" + }, + { + "city": "Bellflower", + "state": "California" + }, + { + "city": "Bellingham", + "state": "Massachusetts" + }, + { + "city": "Bellingham", + "state": "Washington" + }, + { + "city": "Bellmawr", + "state": "New Jersey" + }, + { + "city": "Bellmead", + "state": "Texas" + }, + { + "city": "Bellmore", + "state": "New York" + }, + { + "city": "Bellview", + "state": "Florida" + }, + { + "city": "Bellwood", + "state": "Illinois" + }, + { + "city": "Belmar", + "state": "New Jersey" + }, + { + "city": "Belmont", + "state": "Massachusetts" + }, + { + "city": "Belmont", + "state": "Massachusetts" + }, + { + "city": "Belmont", + "state": "New Hampshire" + }, + { + "city": "Belmont", + "state": "North Carolina" + }, + { + "city": "Belmont", + "state": "California" + }, + { + "city": "Beloit", + "state": "Wisconsin" + }, + { + "city": "Beloit", + "state": "Wisconsin" + }, + { + "city": "Belpre", + "state": "Ohio" + }, + { + "city": "Belton", + "state": "Missouri" + }, + { + "city": "Belton", + "state": "Texas" + }, + { + "city": "Beltsville", + "state": "Maryland" + }, + { + "city": "Belvedere Park", + "state": "Georgia" + }, + { + "city": "Belvidere", + "state": "Illinois" + }, + { + "city": "Bemidji", + "state": "Minnesota" + }, + { + "city": "Benbrook", + "state": "Texas" + }, + { + "city": "Bend", + "state": "Oregon" + }, + { + "city": "Benicia", + "state": "California" + }, + { + "city": "Bennettsville", + "state": "South Carolina" + }, + { + "city": "Bennington", + "state": "Vermont" + }, + { + "city": "Bennington", + "state": "Vermont" + }, + { + "city": "Bennsville", + "state": "Maryland" + }, + { + "city": "Bensenville", + "state": "Illinois" + }, + { + "city": "Benton", + "state": "Illinois" + }, + { + "city": "Benton", + "state": "Arkansas" + }, + { + "city": "Benton Harbor", + "state": "Michigan" + }, + { + "city": "Bentonville", + "state": "Arkansas" + }, + { + "city": "Berea", + "state": "Kentucky" + }, + { + "city": "Berea", + "state": "Ohio" + }, + { + "city": "Berea", + "state": "South Carolina" + }, + { + "city": "Bergenfield", + "state": "New Jersey" + }, + { + "city": "Berkeley", + "state": "Missouri" + }, + { + "city": "Berkeley", + "state": "California" + }, + { + "city": "Berkeley Heights", + "state": "New Jersey" + }, + { + "city": "Berkley", + "state": "Michigan" + }, + { + "city": "Berkley", + "state": "Colorado" + }, + { + "city": "Berlin", + "state": "Connecticut" + }, + { + "city": "Berlin", + "state": "New Jersey" + }, + { + "city": "Berlin", + "state": "New Hampshire" + }, + { + "city": "Bermuda Dunes", + "state": "California" + }, + { + "city": "Bernalillo", + "state": "New Mexico" + }, + { + "city": "Bernardsville", + "state": "New Jersey" + }, + { + "city": "Berwick", + "state": "Maine" + }, + { + "city": "Berwick", + "state": "Pennsylvania" + }, + { + "city": "Berwyn", + "state": "Illinois" + }, + { + "city": "Bessemer", + "state": "Alabama" + }, + { + "city": "Bethalto", + "state": "Illinois" + }, + { + "city": "Bethany", + "state": "Oklahoma" + }, + { + "city": "Bethel", + "state": "Connecticut" + }, + { + "city": "Bethel", + "state": "Connecticut" + }, + { + "city": "Bethel Park", + "state": "Pennsylvania" + }, + { + "city": "Bethesda", + "state": "Maryland" + }, + { + "city": "Bethlehem", + "state": "New York" + }, + { + "city": "Bethlehem", + "state": "Pennsylvania" + }, + { + "city": "Bethpage", + "state": "New York" + }, + { + "city": "Bettendorf", + "state": "Iowa" + }, + { + "city": "Beverly", + "state": "Massachusetts" + }, + { + "city": "Beverly Hills", + "state": "Michigan" + }, + { + "city": "Beverly Hills", + "state": "Florida" + }, + { + "city": "Beverly Hills", + "state": "California" + }, + { + "city": "Bexley", + "state": "Ohio" + }, + { + "city": "Biddeford", + "state": "Maine" + }, + { + "city": "Big Flats", + "state": "New York" + }, + { + "city": "Big Lake", + "state": "Minnesota" + }, + { + "city": "Big Rapids", + "state": "Michigan" + }, + { + "city": "Big Spring", + "state": "Texas" + }, + { + "city": "Billerica", + "state": "Massachusetts" + }, + { + "city": "Billings", + "state": "Montana" + }, + { + "city": "Biloxi", + "state": "Mississippi" + }, + { + "city": "Binghamton", + "state": "New York" + }, + { + "city": "Birmingham", + "state": "Michigan" + }, + { + "city": "Birmingham", + "state": "Alabama" + }, + { + "city": "Bisbee", + "state": "Arizona" + }, + { + "city": "Bismarck", + "state": "North Dakota" + }, + { + "city": "Bixby", + "state": "Oklahoma" + }, + { + "city": "Black Forest", + "state": "Colorado" + }, + { + "city": "Black Jack", + "state": "Missouri" + }, + { + "city": "Black Mountain", + "state": "North Carolina" + }, + { + "city": "Blackfoot", + "state": "Idaho" + }, + { + "city": "Blackhawk-Camino Tassajara", + "state": "California" + }, + { + "city": "Blacklick Estates", + "state": "Ohio" + }, + { + "city": "Blacksburg", + "state": "Virginia" + }, + { + "city": "Blackstone", + "state": "Massachusetts" + }, + { + "city": "Blackwell", + "state": "Oklahoma" + }, + { + "city": "Bladensburg", + "state": "Maryland" + }, + { + "city": "Blaine", + "state": "Minnesota" + }, + { + "city": "Blair", + "state": "Nebraska" + }, + { + "city": "Blakely", + "state": "Pennsylvania" + }, + { + "city": "Bloomfield", + "state": "New Jersey" + }, + { + "city": "Bloomfield", + "state": "New Mexico" + }, + { + "city": "Bloomfield", + "state": "Connecticut" + }, + { + "city": "Bloomfield Township", + "state": "Michigan" + }, + { + "city": "Blooming Grove", + "state": "New York" + }, + { + "city": "Bloomingdale", + "state": "New Jersey" + }, + { + "city": "Bloomingdale", + "state": "Florida" + }, + { + "city": "Bloomingdale", + "state": "Illinois" + }, + { + "city": "Bloomingdale", + "state": "Tennessee" + }, + { + "city": "Bloomington", + "state": "Illinois" + }, + { + "city": "Bloomington", + "state": "Indiana" + }, + { + "city": "Bloomington", + "state": "California" + }, + { + "city": "Bloomington", + "state": "Minnesota" + }, + { + "city": "Bloomsburg", + "state": "Pennsylvania" + }, + { + "city": "Blue Ash", + "state": "Ohio" + }, + { + "city": "Blue Bell", + "state": "Pennsylvania" + }, + { + "city": "Blue Island", + "state": "Illinois" + }, + { + "city": "Blue Springs", + "state": "Missouri" + }, + { + "city": "Bluefield", + "state": "West Virginia" + }, + { + "city": "Bluffton", + "state": "Indiana" + }, + { + "city": "Blythe", + "state": "California" + }, + { + "city": "Blytheville", + "state": "Arkansas" + }, + { + "city": "Boardman", + "state": "Ohio" + }, + { + "city": "Boaz", + "state": "Alabama" + }, + { + "city": "Boca Del Mar", + "state": "Florida" + }, + { + "city": "Boca Raton", + "state": "Florida" + }, + { + "city": "Boerne", + "state": "Texas" + }, + { + "city": "Bogalusa", + "state": "Louisiana" + }, + { + "city": "Bogota", + "state": "New Jersey" + }, + { + "city": "Bohemia", + "state": "New York" + }, + { + "city": "Boise City", + "state": "Idaho" + }, + { + "city": "Bolingbrook", + "state": "Illinois" + }, + { + "city": "Bolivar", + "state": "Missouri" + }, + { + "city": "Bon Air", + "state": "Virginia" + }, + { + "city": "Bonadelle Ranchos-Madera Ranchos", + "state": "California" + }, + { + "city": "Bonham", + "state": "Texas" + }, + { + "city": "Bonita", + "state": "California" + }, + { + "city": "Bonita Springs", + "state": "Florida" + }, + { + "city": "Bonner Springs", + "state": "Kansas" + }, + { + "city": "Bonney Lake", + "state": "Washington" + }, + { + "city": "Boone", + "state": "Iowa" + }, + { + "city": "Boone", + "state": "North Carolina" + }, + { + "city": "Booneville", + "state": "Mississippi" + }, + { + "city": "Boonton", + "state": "New Jersey" + }, + { + "city": "Boonville", + "state": "Missouri" + }, + { + "city": "Boonville", + "state": "Indiana" + }, + { + "city": "Borger", + "state": "Texas" + }, + { + "city": "Bossier City", + "state": "Louisiana" + }, + { + "city": "Boston", + "state": "Massachusetts" + }, + { + "city": "Boston", + "state": "New York" + }, + { + "city": "Bostonia", + "state": "California" + }, + { + "city": "Bothell", + "state": "Washington" + }, + { + "city": "Boulder", + "state": "Colorado" + }, + { + "city": "Boulder City", + "state": "Nevada" + }, + { + "city": "Boulder Hill", + "state": "Illinois" + }, + { + "city": "Bound Brook", + "state": "New Jersey" + }, + { + "city": "Bountiful", + "state": "Utah" + }, + { + "city": "Bourbonnais", + "state": "Illinois" + }, + { + "city": "Bourne", + "state": "Massachusetts" + }, + { + "city": "Bow", + "state": "New Hampshire" + }, + { + "city": "Bowie", + "state": "Maryland" + }, + { + "city": "Bowleys Quarters", + "state": "Maryland" + }, + { + "city": "Bowling Green", + "state": "Kentucky" + }, + { + "city": "Bowling Green", + "state": "Ohio" + }, + { + "city": "Boxford", + "state": "Massachusetts" + }, + { + "city": "Boyes Hot Springs", + "state": "California" + }, + { + "city": "Boynton Beach", + "state": "Florida" + }, + { + "city": "Bozeman", + "state": "Montana" + }, + { + "city": "Bradenton", + "state": "Florida" + }, + { + "city": "Bradford", + "state": "Pennsylvania" + }, + { + "city": "Bradley", + "state": "Illinois" + }, + { + "city": "Brainerd", + "state": "Minnesota" + }, + { + "city": "Braintree", + "state": "Massachusetts" + }, + { + "city": "Braintree", + "state": "Massachusetts" + }, + { + "city": "Brandon", + "state": "Mississippi" + }, + { + "city": "Brandon", + "state": "Florida" + }, + { + "city": "Branford", + "state": "Connecticut" + }, + { + "city": "Branson", + "state": "Missouri" + }, + { + "city": "Brattleboro", + "state": "Vermont" + }, + { + "city": "Brattleboro", + "state": "Vermont" + }, + { + "city": "Brawley", + "state": "California" + }, + { + "city": "Brazil", + "state": "Indiana" + }, + { + "city": "Brea", + "state": "California" + }, + { + "city": "Breaux Bridge", + "state": "Louisiana" + }, + { + "city": "Brecksville", + "state": "Ohio" + }, + { + "city": "Bremerton", + "state": "Washington" + }, + { + "city": "Brenham", + "state": "Texas" + }, + { + "city": "Brent", + "state": "Florida" + }, + { + "city": "Brentwood", + "state": "California" + }, + { + "city": "Brentwood", + "state": "New York" + }, + { + "city": "Brentwood", + "state": "Missouri" + }, + { + "city": "Brentwood", + "state": "Pennsylvania" + }, + { + "city": "Brentwood", + "state": "Tennessee" + }, + { + "city": "Brevard", + "state": "North Carolina" + }, + { + "city": "Brewer", + "state": "Maine" + }, + { + "city": "Brewster", + "state": "Massachusetts" + }, + { + "city": "Briarcliff Manor", + "state": "New York" + }, + { + "city": "Bridge City", + "state": "Louisiana" + }, + { + "city": "Bridge City", + "state": "Texas" + }, + { + "city": "Bridgeport", + "state": "West Virginia" + }, + { + "city": "Bridgeport", + "state": "Connecticut" + }, + { + "city": "Bridgeport", + "state": "Connecticut" + }, + { + "city": "Bridgeport", + "state": "Michigan" + }, + { + "city": "Bridgeton", + "state": "Missouri" + }, + { + "city": "Bridgeton", + "state": "New Jersey" + }, + { + "city": "Bridgetown North", + "state": "Ohio" + }, + { + "city": "Bridgeview", + "state": "Illinois" + }, + { + "city": "Bridgewater", + "state": "Massachusetts" + }, + { + "city": "Bridgewater", + "state": "Massachusetts" + }, + { + "city": "Brier", + "state": "Washington" + }, + { + "city": "Brigantine", + "state": "New Jersey" + }, + { + "city": "Brigham City", + "state": "Utah" + }, + { + "city": "Brighton", + "state": "Michigan" + }, + { + "city": "Brighton", + "state": "New York" + }, + { + "city": "Brighton", + "state": "New York" + }, + { + "city": "Brighton", + "state": "Colorado" + }, + { + "city": "Bristol", + "state": "Connecticut" + }, + { + "city": "Bristol", + "state": "Connecticut" + }, + { + "city": "Bristol", + "state": "Rhode Island" + }, + { + "city": "Bristol", + "state": "Tennessee" + }, + { + "city": "Bristol", + "state": "Rhode Island" + }, + { + "city": "Bristol", + "state": "Virginia" + }, + { + "city": "Bristol", + "state": "Pennsylvania" + }, + { + "city": "Broadview", + "state": "Illinois" + }, + { + "city": "Broadview Heights", + "state": "Ohio" + }, + { + "city": "Broadview Park", + "state": "Florida" + }, + { + "city": "Brockport", + "state": "New York" + }, + { + "city": "Brockton", + "state": "Massachusetts" + }, + { + "city": "Broken Arrow", + "state": "Oklahoma" + }, + { + "city": "Bronxville", + "state": "New York" + }, + { + "city": "Brook Park", + "state": "Ohio" + }, + { + "city": "Brookfield", + "state": "Connecticut" + }, + { + "city": "Brookfield", + "state": "Illinois" + }, + { + "city": "Brookfield", + "state": "Wisconsin" + }, + { + "city": "Brookfield", + "state": "Wisconsin" + }, + { + "city": "Brookhaven", + "state": "Pennsylvania" + }, + { + "city": "Brookhaven", + "state": "New York" + }, + { + "city": "Brookhaven", + "state": "Mississippi" + }, + { + "city": "Brookings", + "state": "South Dakota" + }, + { + "city": "Brookline", + "state": "Massachusetts" + }, + { + "city": "Brookline", + "state": "Massachusetts" + }, + { + "city": "Brooklyn", + "state": "Ohio" + }, + { + "city": "Brooklyn", + "state": "Connecticut" + }, + { + "city": "Brooklyn Center", + "state": "Minnesota" + }, + { + "city": "Brooklyn Park", + "state": "Minnesota" + }, + { + "city": "Brooklyn Park", + "state": "Maryland" + }, + { + "city": "Brookside", + "state": "Delaware" + }, + { + "city": "Brooksville", + "state": "Florida" + }, + { + "city": "Broomall", + "state": "Pennsylvania" + }, + { + "city": "Broomfield", + "state": "Colorado" + }, + { + "city": "Brown Deer", + "state": "Wisconsin" + }, + { + "city": "Brownfield", + "state": "Texas" + }, + { + "city": "Browns Mills", + "state": "New Jersey" + }, + { + "city": "Brownsburg", + "state": "Indiana" + }, + { + "city": "Brownsville", + "state": "Florida" + }, + { + "city": "Brownsville", + "state": "Texas" + }, + { + "city": "Brownsville", + "state": "Tennessee" + }, + { + "city": "Brownsville-Bawcomville", + "state": "Louisiana" + }, + { + "city": "Brownwood", + "state": "Texas" + }, + { + "city": "Brunswick", + "state": "Maine" + }, + { + "city": "Brunswick", + "state": "Maine" + }, + { + "city": "Brunswick", + "state": "Georgia" + }, + { + "city": "Brunswick", + "state": "Ohio" + }, + { + "city": "Brunswick", + "state": "New York" + }, + { + "city": "Brushy Creek", + "state": "Texas" + }, + { + "city": "Bryan", + "state": "Texas" + }, + { + "city": "Bryan", + "state": "Ohio" + }, + { + "city": "Bryant", + "state": "Arkansas" + }, + { + "city": "Bryn Mawr-Skyway", + "state": "Washington" + }, + { + "city": "Buckeye", + "state": "Arizona" + }, + { + "city": "Bucyrus", + "state": "Ohio" + }, + { + "city": "Budd Lake", + "state": "New Jersey" + }, + { + "city": "Buechel", + "state": "Kentucky" + }, + { + "city": "Buena Park", + "state": "California" + }, + { + "city": "Buena Vista", + "state": "Michigan" + }, + { + "city": "Buena Vista", + "state": "Virginia" + }, + { + "city": "Buffalo", + "state": "Minnesota" + }, + { + "city": "Buffalo", + "state": "New York" + }, + { + "city": "Buffalo Grove", + "state": "Illinois" + }, + { + "city": "Buford", + "state": "Georgia" + }, + { + "city": "Bull Run", + "state": "Virginia" + }, + { + "city": "Bullhead City", + "state": "Arizona" + }, + { + "city": "Burbank", + "state": "California" + }, + { + "city": "Burbank", + "state": "Illinois" + }, + { + "city": "Burien", + "state": "Washington" + }, + { + "city": "Burkburnett", + "state": "Texas" + }, + { + "city": "Burke", + "state": "Virginia" + }, + { + "city": "Burleson", + "state": "Texas" + }, + { + "city": "Burley", + "state": "Idaho" + }, + { + "city": "Burlingame", + "state": "California" + }, + { + "city": "Burlington", + "state": "Connecticut" + }, + { + "city": "Burlington", + "state": "Kentucky" + }, + { + "city": "Burlington", + "state": "Iowa" + }, + { + "city": "Burlington", + "state": "North Carolina" + }, + { + "city": "Burlington", + "state": "Massachusetts" + }, + { + "city": "Burlington", + "state": "Massachusetts" + }, + { + "city": "Burlington", + "state": "New Jersey" + }, + { + "city": "Burlington", + "state": "Vermont" + }, + { + "city": "Burlington", + "state": "Washington" + }, + { + "city": "Burlington", + "state": "Wisconsin" + }, + { + "city": "Burlington", + "state": "Wisconsin" + }, + { + "city": "Burnsville", + "state": "Minnesota" + }, + { + "city": "Burr Ridge", + "state": "Illinois" + }, + { + "city": "Burrillville", + "state": "Rhode Island" + }, + { + "city": "Burton", + "state": "South Carolina" + }, + { + "city": "Burton", + "state": "Michigan" + }, + { + "city": "Burtonsville", + "state": "Maryland" + }, + { + "city": "Busti", + "state": "New York" + }, + { + "city": "Butler", + "state": "New Jersey" + }, + { + "city": "Butler", + "state": "Pennsylvania" + }, + { + "city": "Butte-Silver Bow", + "state": "Montana" + }, + { + "city": "Buxton", + "state": "Maine" + }, + { + "city": "Byram", + "state": "Mississippi" + }, + { + "city": "Cabot", + "state": "Arkansas" + }, + { + "city": "Cadillac", + "state": "Michigan" + }, + { + "city": "Cahokia", + "state": "Illinois" + }, + { + "city": "Cairo", + "state": "Georgia" + }, + { + "city": "Cairo", + "state": "New York" + }, + { + "city": "Calabasas", + "state": "California" + }, + { + "city": "Caldwell", + "state": "New Jersey" + }, + { + "city": "Caldwell", + "state": "Idaho" + }, + { + "city": "Caledonia", + "state": "Wisconsin" + }, + { + "city": "Calexico", + "state": "California" + }, + { + "city": "Calhoun", + "state": "Georgia" + }, + { + "city": "California", + "state": "Maryland" + }, + { + "city": "California City", + "state": "California" + }, + { + "city": "Calimesa", + "state": "California" + }, + { + "city": "Calipatria", + "state": "California" + }, + { + "city": "Callaway", + "state": "Florida" + }, + { + "city": "Calumet City", + "state": "Illinois" + }, + { + "city": "Calumet Park", + "state": "Illinois" + }, + { + "city": "Calverton", + "state": "Maryland" + }, + { + "city": "Camano", + "state": "Washington" + }, + { + "city": "Camarillo", + "state": "California" + }, + { + "city": "Camas", + "state": "Washington" + }, + { + "city": "Cambria", + "state": "California" + }, + { + "city": "Cambridge", + "state": "Maryland" + }, + { + "city": "Cambridge", + "state": "Massachusetts" + }, + { + "city": "Cambridge", + "state": "Ohio" + }, + { + "city": "Camden", + "state": "South Carolina" + }, + { + "city": "Camden", + "state": "New Jersey" + }, + { + "city": "Camden", + "state": "Arkansas" + }, + { + "city": "Cameron", + "state": "Missouri" + }, + { + "city": "Cameron Park", + "state": "California" + }, + { + "city": "Camillus", + "state": "New York" + }, + { + "city": "Camp Hill", + "state": "Pennsylvania" + }, + { + "city": "Camp Pendleton North", + "state": "California" + }, + { + "city": "Camp Pendleton South", + "state": "California" + }, + { + "city": "Camp Springs", + "state": "Maryland" + }, + { + "city": "Camp Verde", + "state": "Arizona" + }, + { + "city": "Campbell", + "state": "California" + }, + { + "city": "Campbell", + "state": "Ohio" + }, + { + "city": "Campbellsville", + "state": "Kentucky" + }, + { + "city": "Canandaigua", + "state": "New York" + }, + { + "city": "Canandaigua", + "state": "New York" + }, + { + "city": "Canby", + "state": "Oregon" + }, + { + "city": "Candler-McAfee", + "state": "Georgia" + }, + { + "city": "Canfield", + "state": "Ohio" + }, + { + "city": "Canon City", + "state": "Colorado" + }, + { + "city": "Canonsburg", + "state": "Pennsylvania" + }, + { + "city": "Canton", + "state": "Ohio" + }, + { + "city": "Canton", + "state": "Georgia" + }, + { + "city": "Canton", + "state": "Illinois" + }, + { + "city": "Canton", + "state": "Connecticut" + }, + { + "city": "Canton", + "state": "New York" + }, + { + "city": "Canton", + "state": "Mississippi" + }, + { + "city": "Canton", + "state": "Massachusetts" + }, + { + "city": "Canton", + "state": "Michigan" + }, + { + "city": "Canyon", + "state": "Texas" + }, + { + "city": "Canyon Lake", + "state": "Texas" + }, + { + "city": "Canyon Lake", + "state": "California" + }, + { + "city": "Canyon Rim", + "state": "Utah" + }, + { + "city": "Cape Canaveral", + "state": "Florida" + }, + { + "city": "Cape Coral", + "state": "Florida" + }, + { + "city": "Cape Elizabeth", + "state": "Maine" + }, + { + "city": "Cape Girardeau", + "state": "Missouri" + }, + { + "city": "Cape St. Claire", + "state": "Maryland" + }, + { + "city": "Capitola", + "state": "California" + }, + { + "city": "Carbondale", + "state": "Illinois" + }, + { + "city": "Carbondale", + "state": "Pennsylvania" + }, + { + "city": "Carencro", + "state": "Louisiana" + }, + { + "city": "Caribou", + "state": "Maine" + }, + { + "city": "Carlisle", + "state": "Pennsylvania" + }, + { + "city": "Carlsbad", + "state": "New Mexico" + }, + { + "city": "Carlsbad", + "state": "California" + }, + { + "city": "Carmel", + "state": "Indiana" + }, + { + "city": "Carmel", + "state": "New York" + }, + { + "city": "Carmichael", + "state": "California" + }, + { + "city": "Carnegie", + "state": "Pennsylvania" + }, + { + "city": "Carney", + "state": "Maryland" + }, + { + "city": "Carneys Point", + "state": "New Jersey" + }, + { + "city": "Carnot-Moon", + "state": "Pennsylvania" + }, + { + "city": "Carol City", + "state": "Florida" + }, + { + "city": "Carol Stream", + "state": "Illinois" + }, + { + "city": "Carpentersville", + "state": "Illinois" + }, + { + "city": "Carpinteria", + "state": "California" + }, + { + "city": "Carrboro", + "state": "North Carolina" + }, + { + "city": "Carroll", + "state": "Iowa" + }, + { + "city": "Carrollton", + "state": "Michigan" + }, + { + "city": "Carrollton", + "state": "Georgia" + }, + { + "city": "Carrollton", + "state": "Texas" + }, + { + "city": "Carson", + "state": "California" + }, + { + "city": "Carson City", + "state": "Nevada" + }, + { + "city": "Carteret", + "state": "New Jersey" + }, + { + "city": "Cartersville", + "state": "Georgia" + }, + { + "city": "Carthage", + "state": "Missouri" + }, + { + "city": "Carthage", + "state": "Texas" + }, + { + "city": "Caruthersville", + "state": "Missouri" + }, + { + "city": "Carver", + "state": "Massachusetts" + }, + { + "city": "Cary", + "state": "Illinois" + }, + { + "city": "Cary", + "state": "North Carolina" + }, + { + "city": "Casa de Oro-Mount Helix", + "state": "California" + }, + { + "city": "Casa Grande", + "state": "Arizona" + }, + { + "city": "Casas Adobes", + "state": "Arizona" + }, + { + "city": "Cascade-Fairwood", + "state": "Washington" + }, + { + "city": "Casper", + "state": "Wyoming" + }, + { + "city": "Casselberry", + "state": "Florida" + }, + { + "city": "Castle Rock", + "state": "Colorado" + }, + { + "city": "Castle Shannon", + "state": "Pennsylvania" + }, + { + "city": "Castlewood", + "state": "Colorado" + }, + { + "city": "Castro Valley", + "state": "California" + }, + { + "city": "Castroville", + "state": "California" + }, + { + "city": "Catalina", + "state": "Arizona" + }, + { + "city": "Catalina Foothills", + "state": "Arizona" + }, + { + "city": "Catasauqua", + "state": "Pennsylvania" + }, + { + "city": "Cathedral City", + "state": "California" + }, + { + "city": "Catonsville", + "state": "Maryland" + }, + { + "city": "Catskill", + "state": "New York" + }, + { + "city": "Cave Spring", + "state": "Virginia" + }, + { + "city": "Cayce", + "state": "South Carolina" + }, + { + "city": "Cazenovia", + "state": "New York" + }, + { + "city": "Cedar City", + "state": "Utah" + }, + { + "city": "Cedar Falls", + "state": "Iowa" + }, + { + "city": "Cedar Grove", + "state": "New Jersey" + }, + { + "city": "Cedar Hill", + "state": "Texas" + }, + { + "city": "Cedar Hills", + "state": "Oregon" + }, + { + "city": "Cedar Lake", + "state": "Indiana" + }, + { + "city": "Cedar Mill", + "state": "Oregon" + }, + { + "city": "Cedar Park", + "state": "Texas" + }, + { + "city": "Cedar Rapids", + "state": "Iowa" + }, + { + "city": "Cedarburg", + "state": "Wisconsin" + }, + { + "city": "Cedarhurst", + "state": "New York" + }, + { + "city": "Cedartown", + "state": "Georgia" + }, + { + "city": "Celina", + "state": "Ohio" + }, + { + "city": "Center Line", + "state": "Michigan" + }, + { + "city": "Center Moriches", + "state": "New York" + }, + { + "city": "Center Point", + "state": "Alabama" + }, + { + "city": "Centereach", + "state": "New York" + }, + { + "city": "Centerville", + "state": "Ohio" + }, + { + "city": "Centerville", + "state": "Utah" + }, + { + "city": "Central Falls", + "state": "Rhode Island" + }, + { + "city": "Central Islip", + "state": "New York" + }, + { + "city": "Central Manchester", + "state": "Connecticut" + }, + { + "city": "Central Point", + "state": "Oregon" + }, + { + "city": "Centralia", + "state": "Washington" + }, + { + "city": "Centralia", + "state": "Illinois" + }, + { + "city": "Centreville", + "state": "Virginia" + }, + { + "city": "Century Village", + "state": "Florida" + }, + { + "city": "Ceres", + "state": "California" + }, + { + "city": "Cerritos", + "state": "California" + }, + { + "city": "Chalco", + "state": "Nebraska" + }, + { + "city": "Chalmette", + "state": "Louisiana" + }, + { + "city": "Chambersburg", + "state": "Pennsylvania" + }, + { + "city": "Chamblee", + "state": "Georgia" + }, + { + "city": "Champaign", + "state": "Illinois" + }, + { + "city": "Champlin", + "state": "Minnesota" + }, + { + "city": "Chandler", + "state": "Arizona" + }, + { + "city": "Chanhassen", + "state": "Minnesota" + }, + { + "city": "Channahon", + "state": "Illinois" + }, + { + "city": "Channelview", + "state": "Texas" + }, + { + "city": "Chantilly", + "state": "Virginia" + }, + { + "city": "Chanute", + "state": "Kansas" + }, + { + "city": "Chaparral", + "state": "New Mexico" + }, + { + "city": "Chapel Hill", + "state": "North Carolina" + }, + { + "city": "Chappaqua", + "state": "New York" + }, + { + "city": "Charles City", + "state": "Iowa" + }, + { + "city": "Charleston", + "state": "Illinois" + }, + { + "city": "Charleston", + "state": "West Virginia" + }, + { + "city": "Charleston", + "state": "South Carolina" + }, + { + "city": "Charlestown", + "state": "Rhode Island" + }, + { + "city": "Charlotte", + "state": "North Carolina" + }, + { + "city": "Charlotte", + "state": "Michigan" + }, + { + "city": "Charlottesville", + "state": "Virginia" + }, + { + "city": "Charlton", + "state": "Massachusetts" + }, + { + "city": "Charter Oak", + "state": "California" + }, + { + "city": "Chaska", + "state": "Minnesota" + }, + { + "city": "Chatham", + "state": "Massachusetts" + }, + { + "city": "Chatham", + "state": "New Jersey" + }, + { + "city": "Chatham", + "state": "Illinois" + }, + { + "city": "Chattanooga", + "state": "Tennessee" + }, + { + "city": "Cheat Lake", + "state": "West Virginia" + }, + { + "city": "Cheektowaga", + "state": "New York" + }, + { + "city": "Cheektowaga", + "state": "New York" + }, + { + "city": "Chehalis", + "state": "Washington" + }, + { + "city": "Chelmsford", + "state": "Massachusetts" + }, + { + "city": "Chelsea", + "state": "Massachusetts" + }, + { + "city": "Chenango", + "state": "New York" + }, + { + "city": "Cheney", + "state": "Washington" + }, + { + "city": "Cherry Hill Mall", + "state": "New Jersey" + }, + { + "city": "Cherryland", + "state": "California" + }, + { + "city": "Chesapeake", + "state": "Virginia" + }, + { + "city": "Chesapeake Ranch Estates-Drum Point", + "state": "Maryland" + }, + { + "city": "Cheshire", + "state": "Connecticut" + }, + { + "city": "Chester", + "state": "New York" + }, + { + "city": "Chester", + "state": "Virginia" + }, + { + "city": "Chester", + "state": "South Carolina" + }, + { + "city": "Chester", + "state": "Pennsylvania" + }, + { + "city": "Chesterfield", + "state": "Missouri" + }, + { + "city": "Chesterton", + "state": "Indiana" + }, + { + "city": "Chestnut Ridge", + "state": "New York" + }, + { + "city": "Cheval", + "state": "Florida" + }, + { + "city": "Cheverly", + "state": "Maryland" + }, + { + "city": "Cheviot", + "state": "Ohio" + }, + { + "city": "Chevy Chase", + "state": "Maryland" + }, + { + "city": "Cheyenne", + "state": "Wyoming" + }, + { + "city": "Chicago", + "state": "Illinois" + }, + { + "city": "Chicago Heights", + "state": "Illinois" + }, + { + "city": "Chicago Ridge", + "state": "Illinois" + }, + { + "city": "Chickasaw", + "state": "Alabama" + }, + { + "city": "Chickasha", + "state": "Oklahoma" + }, + { + "city": "Chico", + "state": "California" + }, + { + "city": "Chicopee", + "state": "Massachusetts" + }, + { + "city": "Childress", + "state": "Texas" + }, + { + "city": "Chili", + "state": "New York" + }, + { + "city": "Chillicothe", + "state": "Missouri" + }, + { + "city": "Chillicothe", + "state": "Ohio" + }, + { + "city": "Chillum", + "state": "Maryland" + }, + { + "city": "Chino", + "state": "California" + }, + { + "city": "Chino Hills", + "state": "California" + }, + { + "city": "Chino Valley", + "state": "Arizona" + }, + { + "city": "Chippewa Falls", + "state": "Wisconsin" + }, + { + "city": "Choctaw", + "state": "Oklahoma" + }, + { + "city": "Chowchilla", + "state": "California" + }, + { + "city": "Christiansburg", + "state": "Virginia" + }, + { + "city": "Chubbuck", + "state": "Idaho" + }, + { + "city": "Chula Vista", + "state": "California" + }, + { + "city": "Cicero", + "state": "Illinois" + }, + { + "city": "Cicero", + "state": "New York" + }, + { + "city": "Cimarron Hills", + "state": "Colorado" + }, + { + "city": "Cincinnati", + "state": "Ohio" + }, + { + "city": "Cinco Ranch", + "state": "Texas" + }, + { + "city": "Circleville", + "state": "Ohio" + }, + { + "city": "Citrus", + "state": "California" + }, + { + "city": "Citrus Heights", + "state": "California" + }, + { + "city": "Citrus Park", + "state": "Florida" + }, + { + "city": "Citrus Ridge", + "state": "Florida" + }, + { + "city": "City of The Dalles", + "state": "Oregon" + }, + { + "city": "Claiborne", + "state": "Louisiana" + }, + { + "city": "Clairton", + "state": "Pennsylvania" + }, + { + "city": "Clanton", + "state": "Alabama" + }, + { + "city": "Claremont", + "state": "California" + }, + { + "city": "Claremont", + "state": "New Hampshire" + }, + { + "city": "Claremore", + "state": "Oklahoma" + }, + { + "city": "Clarence", + "state": "New York" + }, + { + "city": "Clarendon Hills", + "state": "Illinois" + }, + { + "city": "Clarion", + "state": "Pennsylvania" + }, + { + "city": "Clark", + "state": "New Jersey" + }, + { + "city": "Clarksburg", + "state": "West Virginia" + }, + { + "city": "Clarksdale", + "state": "Mississippi" + }, + { + "city": "Clarkson", + "state": "New York" + }, + { + "city": "Clarkston", + "state": "Georgia" + }, + { + "city": "Clarkston", + "state": "Washington" + }, + { + "city": "Clarkston Heights-Vineland", + "state": "Washington" + }, + { + "city": "Clarkstown", + "state": "New York" + }, + { + "city": "Clarksville", + "state": "Indiana" + }, + { + "city": "Clarksville", + "state": "Arkansas" + }, + { + "city": "Clarksville", + "state": "Tennessee" + }, + { + "city": "Claverack", + "state": "New York" + }, + { + "city": "Clawson", + "state": "Michigan" + }, + { + "city": "Clay", + "state": "New York" + }, + { + "city": "Claymont", + "state": "Delaware" + }, + { + "city": "Clayton", + "state": "California" + }, + { + "city": "Clayton", + "state": "Missouri" + }, + { + "city": "Clayton", + "state": "New Jersey" + }, + { + "city": "Clayton", + "state": "Ohio" + }, + { + "city": "Clayton", + "state": "North Carolina" + }, + { + "city": "Clear Lake", + "state": "Iowa" + }, + { + "city": "Clearfield", + "state": "Pennsylvania" + }, + { + "city": "Clearfield", + "state": "Utah" + }, + { + "city": "Clearlake", + "state": "California" + }, + { + "city": "Clearwater", + "state": "Florida" + }, + { + "city": "Cleburne", + "state": "Texas" + }, + { + "city": "Clemmons", + "state": "North Carolina" + }, + { + "city": "Clemson", + "state": "South Carolina" + }, + { + "city": "Clermont", + "state": "Florida" + }, + { + "city": "Cleveland", + "state": "Mississippi" + }, + { + "city": "Cleveland", + "state": "Tennessee" + }, + { + "city": "Cleveland", + "state": "Texas" + }, + { + "city": "Cleveland", + "state": "Ohio" + }, + { + "city": "Cleveland Heights", + "state": "Ohio" + }, + { + "city": "Clewiston", + "state": "Florida" + }, + { + "city": "Cliffside Park", + "state": "New Jersey" + }, + { + "city": "Clifton", + "state": "New Jersey" + }, + { + "city": "Clifton", + "state": "Colorado" + }, + { + "city": "Clifton Heights", + "state": "Pennsylvania" + }, + { + "city": "Clifton Park", + "state": "New York" + }, + { + "city": "Clinton", + "state": "Mississippi" + }, + { + "city": "Clinton", + "state": "Missouri" + }, + { + "city": "Clinton", + "state": "Iowa" + }, + { + "city": "Clinton", + "state": "Maryland" + }, + { + "city": "Clinton", + "state": "Michigan" + }, + { + "city": "Clinton", + "state": "Massachusetts" + }, + { + "city": "Clinton", + "state": "Massachusetts" + }, + { + "city": "Clinton", + "state": "Connecticut" + }, + { + "city": "Clinton", + "state": "Illinois" + }, + { + "city": "Clinton", + "state": "Oklahoma" + }, + { + "city": "Clinton", + "state": "North Carolina" + }, + { + "city": "Clinton", + "state": "Tennessee" + }, + { + "city": "Clinton", + "state": "South Carolina" + }, + { + "city": "Clinton", + "state": "Utah" + }, + { + "city": "Clive", + "state": "Iowa" + }, + { + "city": "Cloquet", + "state": "Minnesota" + }, + { + "city": "Closter", + "state": "New Jersey" + }, + { + "city": "Cloverdale", + "state": "California" + }, + { + "city": "Cloverleaf", + "state": "Texas" + }, + { + "city": "Cloverly", + "state": "Maryland" + }, + { + "city": "Clovis", + "state": "New Mexico" + }, + { + "city": "Clovis", + "state": "California" + }, + { + "city": "Clute", + "state": "Texas" + }, + { + "city": "Clyde", + "state": "Ohio" + }, + { + "city": "Coachella", + "state": "California" + }, + { + "city": "Coalinga", + "state": "California" + }, + { + "city": "Coatesville", + "state": "Pennsylvania" + }, + { + "city": "Cobleskill", + "state": "New York" + }, + { + "city": "Cochituate", + "state": "Massachusetts" + }, + { + "city": "Cockeysville", + "state": "Maryland" + }, + { + "city": "Cocoa", + "state": "Florida" + }, + { + "city": "Cocoa Beach", + "state": "Florida" + }, + { + "city": "Coconut Creek", + "state": "Florida" + }, + { + "city": "Cody", + "state": "Wyoming" + }, + { + "city": "Coeur d’Alene", + "state": "Idaho" + }, + { + "city": "Coeymans", + "state": "New York" + }, + { + "city": "Coffeyville", + "state": "Kansas" + }, + { + "city": "Cohasset", + "state": "Massachusetts" + }, + { + "city": "Cohoes", + "state": "New York" + }, + { + "city": "Colchester", + "state": "Vermont" + }, + { + "city": "Colchester", + "state": "Connecticut" + }, + { + "city": "Coldwater", + "state": "Michigan" + }, + { + "city": "Colesville", + "state": "Maryland" + }, + { + "city": "College", + "state": "Alaska" + }, + { + "city": "College Park", + "state": "Georgia" + }, + { + "city": "College Park", + "state": "Maryland" + }, + { + "city": "College Place", + "state": "Washington" + }, + { + "city": "College Station", + "state": "Texas" + }, + { + "city": "Collegedale", + "state": "Tennessee" + }, + { + "city": "Collegeville", + "state": "Pennsylvania" + }, + { + "city": "Colleyville", + "state": "Texas" + }, + { + "city": "Collier Manor-Cresthaven", + "state": "Florida" + }, + { + "city": "Collierville", + "state": "Tennessee" + }, + { + "city": "Collingdale", + "state": "Pennsylvania" + }, + { + "city": "Collingswood", + "state": "New Jersey" + }, + { + "city": "Collins", + "state": "New York" + }, + { + "city": "Collinsville", + "state": "Illinois" + }, + { + "city": "Collinsville", + "state": "Virginia" + }, + { + "city": "Colonia", + "state": "New Jersey" + }, + { + "city": "Colonial Heights", + "state": "Virginia" + }, + { + "city": "Colonial Heights", + "state": "Tennessee" + }, + { + "city": "Colonial Park", + "state": "Pennsylvania" + }, + { + "city": "Colonie", + "state": "New York" + }, + { + "city": "Colonie", + "state": "New York" + }, + { + "city": "Colorado Springs", + "state": "Colorado" + }, + { + "city": "Colton", + "state": "California" + }, + { + "city": "Columbia", + "state": "Illinois" + }, + { + "city": "Columbia", + "state": "Missouri" + }, + { + "city": "Columbia", + "state": "Mississippi" + }, + { + "city": "Columbia", + "state": "Maryland" + }, + { + "city": "Columbia", + "state": "Pennsylvania" + }, + { + "city": "Columbia", + "state": "Tennessee" + }, + { + "city": "Columbia", + "state": "South Carolina" + }, + { + "city": "Columbia City", + "state": "Indiana" + }, + { + "city": "Columbia Heights", + "state": "Minnesota" + }, + { + "city": "Columbine", + "state": "Colorado" + }, + { + "city": "Columbus", + "state": "Indiana" + }, + { + "city": "Columbus", + "state": "Georgia" + }, + { + "city": "Columbus", + "state": "Mississippi" + }, + { + "city": "Columbus", + "state": "Nebraska" + }, + { + "city": "Columbus", + "state": "Ohio" + }, + { + "city": "Commack", + "state": "New York" + }, + { + "city": "Commerce", + "state": "Texas" + }, + { + "city": "Commerce", + "state": "California" + }, + { + "city": "Commerce City", + "state": "Colorado" + }, + { + "city": "Compton", + "state": "California" + }, + { + "city": "Comstock Park", + "state": "Michigan" + }, + { + "city": "Concord", + "state": "Massachusetts" + }, + { + "city": "Concord", + "state": "Missouri" + }, + { + "city": "Concord", + "state": "New Hampshire" + }, + { + "city": "Concord", + "state": "New York" + }, + { + "city": "Concord", + "state": "California" + }, + { + "city": "Concord", + "state": "North Carolina" + }, + { + "city": "Congers", + "state": "New York" + }, + { + "city": "Conley", + "state": "Georgia" + }, + { + "city": "Conneaut", + "state": "Ohio" + }, + { + "city": "Connellsville", + "state": "Pennsylvania" + }, + { + "city": "Connersville", + "state": "Indiana" + }, + { + "city": "Conning Towers-Nautilus Park", + "state": "Connecticut" + }, + { + "city": "Conover", + "state": "North Carolina" + }, + { + "city": "Conroe", + "state": "Texas" + }, + { + "city": "Conshohocken", + "state": "Pennsylvania" + }, + { + "city": "Converse", + "state": "Texas" + }, + { + "city": "Conway", + "state": "South Carolina" + }, + { + "city": "Conway", + "state": "Florida" + }, + { + "city": "Conway", + "state": "Arkansas" + }, + { + "city": "Conway", + "state": "New Hampshire" + }, + { + "city": "Conyers", + "state": "Georgia" + }, + { + "city": "Cookeville", + "state": "Tennessee" + }, + { + "city": "Coolidge", + "state": "Arizona" + }, + { + "city": "Coon Rapids", + "state": "Minnesota" + }, + { + "city": "Cooper City", + "state": "Florida" + }, + { + "city": "Coos Bay", + "state": "Oregon" + }, + { + "city": "Copiague", + "state": "New York" + }, + { + "city": "Coppell", + "state": "Texas" + }, + { + "city": "Copperas Cove", + "state": "Texas" + }, + { + "city": "Coral Gables", + "state": "Florida" + }, + { + "city": "Coral Hills", + "state": "Maryland" + }, + { + "city": "Coral Springs", + "state": "Florida" + }, + { + "city": "Coral Terrace", + "state": "Florida" + }, + { + "city": "Coralville", + "state": "Iowa" + }, + { + "city": "Coram", + "state": "New York" + }, + { + "city": "Coraopolis", + "state": "Pennsylvania" + }, + { + "city": "Corbin", + "state": "Kentucky" + }, + { + "city": "Corcoran", + "state": "California" + }, + { + "city": "Cordele", + "state": "Georgia" + }, + { + "city": "Corinth", + "state": "Mississippi" + }, + { + "city": "Corinth", + "state": "Texas" + }, + { + "city": "Cornelius", + "state": "Oregon" + }, + { + "city": "Cornelius", + "state": "North Carolina" + }, + { + "city": "Corning", + "state": "New York" + }, + { + "city": "Corning", + "state": "New York" + }, + { + "city": "Corning", + "state": "California" + }, + { + "city": "Cornwall", + "state": "New York" + }, + { + "city": "Corona", + "state": "California" + }, + { + "city": "Coronado", + "state": "California" + }, + { + "city": "Corpus Christi", + "state": "Texas" + }, + { + "city": "Corrales", + "state": "New Mexico" + }, + { + "city": "Corry", + "state": "Pennsylvania" + }, + { + "city": "Corsicana", + "state": "Texas" + }, + { + "city": "Corte Madera", + "state": "California" + }, + { + "city": "Cortez", + "state": "Colorado" + }, + { + "city": "Cortland", + "state": "New York" + }, + { + "city": "Cortland", + "state": "Ohio" + }, + { + "city": "Cortlandt", + "state": "New York" + }, + { + "city": "Cortlandville", + "state": "New York" + }, + { + "city": "Corvallis", + "state": "Oregon" + }, + { + "city": "Coshocton", + "state": "Ohio" + }, + { + "city": "Costa Mesa", + "state": "California" + }, + { + "city": "Cotati", + "state": "California" + }, + { + "city": "Coto de Caza", + "state": "California" + }, + { + "city": "Cottage Grove", + "state": "Minnesota" + }, + { + "city": "Cottage Grove", + "state": "Oregon" + }, + { + "city": "Cottage Lake", + "state": "Washington" + }, + { + "city": "Cottonwood", + "state": "Arizona" + }, + { + "city": "Cottonwood Heights", + "state": "Utah" + }, + { + "city": "Cottonwood West", + "state": "Utah" + }, + { + "city": "Cottonwood-Verde Village", + "state": "Arizona" + }, + { + "city": "Council Bluffs", + "state": "Iowa" + }, + { + "city": "Country Club", + "state": "California" + }, + { + "city": "Country Club", + "state": "Florida" + }, + { + "city": "Country Club Estates", + "state": "Georgia" + }, + { + "city": "Country Club Hills", + "state": "Illinois" + }, + { + "city": "Country Walk", + "state": "Florida" + }, + { + "city": "Covedale", + "state": "Ohio" + }, + { + "city": "Coventry", + "state": "Rhode Island" + }, + { + "city": "Coventry", + "state": "Connecticut" + }, + { + "city": "Covina", + "state": "California" + }, + { + "city": "Covington", + "state": "Georgia" + }, + { + "city": "Covington", + "state": "Kentucky" + }, + { + "city": "Covington", + "state": "Louisiana" + }, + { + "city": "Covington", + "state": "Washington" + }, + { + "city": "Covington", + "state": "Virginia" + }, + { + "city": "Covington", + "state": "Tennessee" + }, + { + "city": "Coweta", + "state": "Oklahoma" + }, + { + "city": "Coxsackie", + "state": "New York" + }, + { + "city": "Crafton", + "state": "Pennsylvania" + }, + { + "city": "Craig", + "state": "Colorado" + }, + { + "city": "Cranford", + "state": "New Jersey" + }, + { + "city": "Cranston", + "state": "Rhode Island" + }, + { + "city": "Crawford", + "state": "New York" + }, + { + "city": "Crawfordsville", + "state": "Indiana" + }, + { + "city": "Cresskill", + "state": "New Jersey" + }, + { + "city": "Crest Hill", + "state": "Illinois" + }, + { + "city": "Crestline", + "state": "California" + }, + { + "city": "Creston", + "state": "Iowa" + }, + { + "city": "Crestview", + "state": "Florida" + }, + { + "city": "Crestwood", + "state": "Illinois" + }, + { + "city": "Crestwood", + "state": "Missouri" + }, + { + "city": "Crestwood Village", + "state": "New Jersey" + }, + { + "city": "Crete", + "state": "Nebraska" + }, + { + "city": "Crete", + "state": "Illinois" + }, + { + "city": "Creve Coeur", + "state": "Missouri" + }, + { + "city": "Crockett", + "state": "Texas" + }, + { + "city": "Crofton", + "state": "Maryland" + }, + { + "city": "Cromwell", + "state": "Connecticut" + }, + { + "city": "Crookston", + "state": "Minnesota" + }, + { + "city": "Cross Lanes", + "state": "West Virginia" + }, + { + "city": "Crossett", + "state": "Arkansas" + }, + { + "city": "Crossville", + "state": "Tennessee" + }, + { + "city": "Croton-on-Hudson", + "state": "New York" + }, + { + "city": "Crowley", + "state": "Texas" + }, + { + "city": "Crowley", + "state": "Louisiana" + }, + { + "city": "Crown Point", + "state": "Indiana" + }, + { + "city": "Croydon", + "state": "Pennsylvania" + }, + { + "city": "Crystal", + "state": "Minnesota" + }, + { + "city": "Crystal City", + "state": "Texas" + }, + { + "city": "Crystal Lake", + "state": "Illinois" + }, + { + "city": "Cudahy", + "state": "California" + }, + { + "city": "Cudahy", + "state": "Wisconsin" + }, + { + "city": "Cuero", + "state": "Texas" + }, + { + "city": "Cullman", + "state": "Alabama" + }, + { + "city": "Culpeper", + "state": "Virginia" + }, + { + "city": "Culver City", + "state": "California" + }, + { + "city": "Cumberland", + "state": "Maine" + }, + { + "city": "Cumberland", + "state": "Maryland" + }, + { + "city": "Cumberland", + "state": "Rhode Island" + }, + { + "city": "Cumberland Hill", + "state": "Rhode Island" + }, + { + "city": "Cupertino", + "state": "California" + }, + { + "city": "Cushing", + "state": "Oklahoma" + }, + { + "city": "Cutler", + "state": "Florida" + }, + { + "city": "Cutler Ridge", + "state": "Florida" + }, + { + "city": "Cutlerville", + "state": "Michigan" + }, + { + "city": "Cuyahoga Falls", + "state": "Ohio" + }, + { + "city": "Cynthiana", + "state": "Kentucky" + }, + { + "city": "Cypress", + "state": "California" + }, + { + "city": "Cypress Gardens", + "state": "Florida" + }, + { + "city": "Cypress Lake", + "state": "Florida" + }, + { + "city": "D’Iberville", + "state": "Mississippi" + }, + { + "city": "Dade City", + "state": "Florida" + }, + { + "city": "Dale City", + "state": "Virginia" + }, + { + "city": "Dalhart", + "state": "Texas" + }, + { + "city": "Dallas", + "state": "Texas" + }, + { + "city": "Dallas", + "state": "Oregon" + }, + { + "city": "Dalton", + "state": "Massachusetts" + }, + { + "city": "Dalton", + "state": "Georgia" + }, + { + "city": "Daly City", + "state": "California" + }, + { + "city": "Damascus", + "state": "Maryland" + }, + { + "city": "Dana Point", + "state": "California" + }, + { + "city": "Danbury", + "state": "Connecticut" + }, + { + "city": "Danbury", + "state": "Connecticut" + }, + { + "city": "Dania Beach", + "state": "Florida" + }, + { + "city": "Danvers", + "state": "Massachusetts" + }, + { + "city": "Danvers", + "state": "Massachusetts" + }, + { + "city": "Danville", + "state": "California" + }, + { + "city": "Danville", + "state": "Kentucky" + }, + { + "city": "Danville", + "state": "Indiana" + }, + { + "city": "Danville", + "state": "Illinois" + }, + { + "city": "Danville", + "state": "Virginia" + }, + { + "city": "Daphne", + "state": "Alabama" + }, + { + "city": "Darby", + "state": "Pennsylvania" + }, + { + "city": "Darby Township", + "state": "Pennsylvania" + }, + { + "city": "Darien", + "state": "Connecticut" + }, + { + "city": "Darien", + "state": "Connecticut" + }, + { + "city": "Darien", + "state": "Illinois" + }, + { + "city": "Darlington", + "state": "South Carolina" + }, + { + "city": "Darnestown", + "state": "Maryland" + }, + { + "city": "Dartmouth", + "state": "Massachusetts" + }, + { + "city": "Davenport", + "state": "Iowa" + }, + { + "city": "Davidson", + "state": "North Carolina" + }, + { + "city": "Davie", + "state": "Florida" + }, + { + "city": "Davis", + "state": "California" + }, + { + "city": "Dayton", + "state": "Ohio" + }, + { + "city": "Dayton", + "state": "New Jersey" + }, + { + "city": "Dayton", + "state": "Tennessee" + }, + { + "city": "Daytona Beach", + "state": "Florida" + }, + { + "city": "De Bary", + "state": "Florida" + }, + { + "city": "De Land", + "state": "Florida" + }, + { + "city": "De Pere", + "state": "Wisconsin" + }, + { + "city": "De Ridder", + "state": "Louisiana" + }, + { + "city": "De Soto", + "state": "Missouri" + }, + { + "city": "De Witt", + "state": "New York" + }, + { + "city": "Dearborn", + "state": "Michigan" + }, + { + "city": "Dearborn Heights", + "state": "Michigan" + }, + { + "city": "Decatur", + "state": "Indiana" + }, + { + "city": "Decatur", + "state": "Illinois" + }, + { + "city": "Decatur", + "state": "Georgia" + }, + { + "city": "Decatur", + "state": "Alabama" + }, + { + "city": "Decorah", + "state": "Iowa" + }, + { + "city": "Dedham", + "state": "Massachusetts" + }, + { + "city": "Dedham", + "state": "Massachusetts" + }, + { + "city": "Deer Park", + "state": "New York" + }, + { + "city": "Deer Park", + "state": "Texas" + }, + { + "city": "Deerfield", + "state": "Illinois" + }, + { + "city": "Deerfield Beach", + "state": "Florida" + }, + { + "city": "Deerpark", + "state": "New York" + }, + { + "city": "Defiance", + "state": "Ohio" + }, + { + "city": "DeForest", + "state": "Wisconsin" + }, + { + "city": "DeKalb", + "state": "Illinois" + }, + { + "city": "Del Aire", + "state": "California" + }, + { + "city": "Del City", + "state": "Oklahoma" + }, + { + "city": "Del Rio", + "state": "Texas" + }, + { + "city": "Delafield", + "state": "Wisconsin" + }, + { + "city": "Delafield", + "state": "Wisconsin" + }, + { + "city": "Delano", + "state": "California" + }, + { + "city": "Delavan", + "state": "Wisconsin" + }, + { + "city": "Delaware", + "state": "Ohio" + }, + { + "city": "Delhi", + "state": "California" + }, + { + "city": "Delmar", + "state": "New York" + }, + { + "city": "Delphos", + "state": "Ohio" + }, + { + "city": "Delray Beach", + "state": "Florida" + }, + { + "city": "Delta", + "state": "Colorado" + }, + { + "city": "Deltona", + "state": "Florida" + }, + { + "city": "Deming", + "state": "New Mexico" + }, + { + "city": "Demopolis", + "state": "Alabama" + }, + { + "city": "Denham Springs", + "state": "Louisiana" + }, + { + "city": "Denison", + "state": "Iowa" + }, + { + "city": "Denison", + "state": "Texas" + }, + { + "city": "Dennis", + "state": "Massachusetts" + }, + { + "city": "Dent", + "state": "Ohio" + }, + { + "city": "Denton", + "state": "Texas" + }, + { + "city": "Dentsville", + "state": "South Carolina" + }, + { + "city": "Denver", + "state": "Colorado" + }, + { + "city": "Depew", + "state": "New York" + }, + { + "city": "Derby", + "state": "Colorado" + }, + { + "city": "Derby", + "state": "Connecticut" + }, + { + "city": "Derby", + "state": "Connecticut" + }, + { + "city": "Derby", + "state": "Kansas" + }, + { + "city": "Derry", + "state": "New Hampshire" + }, + { + "city": "Derry", + "state": "New Hampshire" + }, + { + "city": "Des Moines", + "state": "Iowa" + }, + { + "city": "Des Moines", + "state": "Washington" + }, + { + "city": "Des Peres", + "state": "Missouri" + }, + { + "city": "Des Plaines", + "state": "Illinois" + }, + { + "city": "Desert Hot Springs", + "state": "California" + }, + { + "city": "DeSoto", + "state": "Texas" + }, + { + "city": "Destin", + "state": "Florida" + }, + { + "city": "Destrehan", + "state": "Louisiana" + }, + { + "city": "Detroit", + "state": "Michigan" + }, + { + "city": "Detroit Lakes", + "state": "Minnesota" + }, + { + "city": "Devils Lake", + "state": "North Dakota" + }, + { + "city": "Dewey-Humboldt", + "state": "Arizona" + }, + { + "city": "Dexter", + "state": "Missouri" + }, + { + "city": "Diamond Bar", + "state": "California" + }, + { + "city": "Dickinson", + "state": "North Dakota" + }, + { + "city": "Dickinson", + "state": "Texas" + }, + { + "city": "Dickson", + "state": "Tennessee" + }, + { + "city": "Dickson City", + "state": "Pennsylvania" + }, + { + "city": "Dighton", + "state": "Massachusetts" + }, + { + "city": "Dillon", + "state": "South Carolina" + }, + { + "city": "Dinuba", + "state": "California" + }, + { + "city": "Discovery Bay", + "state": "California" + }, + { + "city": "Dishman", + "state": "Washington" + }, + { + "city": "Dix Hills", + "state": "New York" + }, + { + "city": "Dixon", + "state": "California" + }, + { + "city": "Dixon", + "state": "Illinois" + }, + { + "city": "Dobbs Ferry", + "state": "New York" + }, + { + "city": "Dock Junction", + "state": "Georgia" + }, + { + "city": "Doctor Phillips", + "state": "Florida" + }, + { + "city": "Dodge City", + "state": "Kansas" + }, + { + "city": "Dolton", + "state": "Illinois" + }, + { + "city": "Donaldsonville", + "state": "Louisiana" + }, + { + "city": "Donna", + "state": "Texas" + }, + { + "city": "Doral", + "state": "Florida" + }, + { + "city": "Doraville", + "state": "Georgia" + }, + { + "city": "Dormont", + "state": "Pennsylvania" + }, + { + "city": "Dothan", + "state": "Alabama" + }, + { + "city": "Douglas", + "state": "Arizona" + }, + { + "city": "Douglas", + "state": "Georgia" + }, + { + "city": "Douglas", + "state": "Massachusetts" + }, + { + "city": "Douglasville", + "state": "Georgia" + }, + { + "city": "Dover", + "state": "Delaware" + }, + { + "city": "Dover", + "state": "New Hampshire" + }, + { + "city": "Dover", + "state": "New York" + }, + { + "city": "Dover", + "state": "New Jersey" + }, + { + "city": "Dover", + "state": "Ohio" + }, + { + "city": "Dowagiac", + "state": "Michigan" + }, + { + "city": "Downers Grove", + "state": "Illinois" + }, + { + "city": "Downey", + "state": "California" + }, + { + "city": "Downingtown", + "state": "Pennsylvania" + }, + { + "city": "Doylestown", + "state": "Pennsylvania" + }, + { + "city": "Dracut", + "state": "Massachusetts" + }, + { + "city": "Draper", + "state": "Utah" + }, + { + "city": "Drexel Heights", + "state": "Arizona" + }, + { + "city": "Drexel Hill", + "state": "Pennsylvania" + }, + { + "city": "Druid Hills", + "state": "Georgia" + }, + { + "city": "Dry Run", + "state": "Ohio" + }, + { + "city": "Dryden", + "state": "New York" + }, + { + "city": "Du Quoin", + "state": "Illinois" + }, + { + "city": "Duarte", + "state": "California" + }, + { + "city": "Dublin", + "state": "California" + }, + { + "city": "Dublin", + "state": "Georgia" + }, + { + "city": "Dublin", + "state": "Ohio" + }, + { + "city": "DuBois", + "state": "Pennsylvania" + }, + { + "city": "Dubuque", + "state": "Iowa" + }, + { + "city": "Dudley", + "state": "Massachusetts" + }, + { + "city": "Duluth", + "state": "Minnesota" + }, + { + "city": "Duluth", + "state": "Georgia" + }, + { + "city": "Dumas", + "state": "Texas" + }, + { + "city": "Dumbarton", + "state": "Virginia" + }, + { + "city": "Dumont", + "state": "New Jersey" + }, + { + "city": "Dunbar", + "state": "West Virginia" + }, + { + "city": "Duncan", + "state": "Oklahoma" + }, + { + "city": "Duncanville", + "state": "Texas" + }, + { + "city": "Dundalk", + "state": "Maryland" + }, + { + "city": "Dunedin", + "state": "Florida" + }, + { + "city": "Dunellen", + "state": "New Jersey" + }, + { + "city": "Dunkirk", + "state": "New York" + }, + { + "city": "Dunmore", + "state": "Pennsylvania" + }, + { + "city": "Dunn", + "state": "North Carolina" + }, + { + "city": "Dunn Loring", + "state": "Virginia" + }, + { + "city": "Dunwoody", + "state": "Georgia" + }, + { + "city": "Duquesne", + "state": "Pennsylvania" + }, + { + "city": "Durango", + "state": "Colorado" + }, + { + "city": "Durant", + "state": "Oklahoma" + }, + { + "city": "Durham", + "state": "Connecticut" + }, + { + "city": "Durham", + "state": "North Carolina" + }, + { + "city": "Durham", + "state": "New Hampshire" + }, + { + "city": "Durham", + "state": "New Hampshire" + }, + { + "city": "Duxbury", + "state": "Massachusetts" + }, + { + "city": "Dyer", + "state": "Indiana" + }, + { + "city": "Dyersburg", + "state": "Tennessee" + }, + { + "city": "Eagan", + "state": "Minnesota" + }, + { + "city": "Eagle", + "state": "Idaho" + }, + { + "city": "Eagle Mountain", + "state": "Texas" + }, + { + "city": "Eagle Pass", + "state": "Texas" + }, + { + "city": "Earlimart", + "state": "California" + }, + { + "city": "Easley", + "state": "South Carolina" + }, + { + "city": "East Alton", + "state": "Illinois" + }, + { + "city": "East Aurora", + "state": "New York" + }, + { + "city": "East Bethel", + "state": "Minnesota" + }, + { + "city": "East Brainerd", + "state": "Tennessee" + }, + { + "city": "East Bridgewater", + "state": "Massachusetts" + }, + { + "city": "East Brunswick", + "state": "New Jersey" + }, + { + "city": "East Chicago", + "state": "Indiana" + }, + { + "city": "East Cleveland", + "state": "Ohio" + }, + { + "city": "East Compton", + "state": "California" + }, + { + "city": "East Falmouth", + "state": "Massachusetts" + }, + { + "city": "East Fishkill", + "state": "New York" + }, + { + "city": "East Foothills", + "state": "California" + }, + { + "city": "East Glenville", + "state": "New York" + }, + { + "city": "East Grand Forks", + "state": "Minnesota" + }, + { + "city": "East Grand Rapids", + "state": "Michigan" + }, + { + "city": "East Greenbush", + "state": "New York" + }, + { + "city": "East Greenwich", + "state": "Rhode Island" + }, + { + "city": "East Haddam", + "state": "Connecticut" + }, + { + "city": "East Hampton", + "state": "Connecticut" + }, + { + "city": "East Hampton", + "state": "New York" + }, + { + "city": "East Hartford", + "state": "Connecticut" + }, + { + "city": "East Hartford", + "state": "Connecticut" + }, + { + "city": "East Haven", + "state": "Connecticut" + }, + { + "city": "East Haven", + "state": "Connecticut" + }, + { + "city": "East Hemet", + "state": "California" + }, + { + "city": "East Highland Park", + "state": "Virginia" + }, + { + "city": "East Hill-Meridian", + "state": "Washington" + }, + { + "city": "East Hills", + "state": "New York" + }, + { + "city": "East Islip", + "state": "New York" + }, + { + "city": "East La Mirada", + "state": "California" + }, + { + "city": "East Lake", + "state": "Florida" + }, + { + "city": "East Lansing", + "state": "Michigan" + }, + { + "city": "East Liverpool", + "state": "Ohio" + }, + { + "city": "East Longmeadow", + "state": "Massachusetts" + }, + { + "city": "East Los Angeles", + "state": "California" + }, + { + "city": "East Lyme", + "state": "Connecticut" + }, + { + "city": "East Massapequa", + "state": "New York" + }, + { + "city": "East Meadow", + "state": "New York" + }, + { + "city": "East Millcreek", + "state": "Utah" + }, + { + "city": "East Moline", + "state": "Illinois" + }, + { + "city": "East Norriton", + "state": "Pennsylvania" + }, + { + "city": "East Northport", + "state": "New York" + }, + { + "city": "East Orange", + "state": "New Jersey" + }, + { + "city": "East Palo Alto", + "state": "California" + }, + { + "city": "East Pasadena", + "state": "California" + }, + { + "city": "East Patchogue", + "state": "New York" + }, + { + "city": "East Peoria", + "state": "Illinois" + }, + { + "city": "East Perrine", + "state": "Florida" + }, + { + "city": "East Point", + "state": "Georgia" + }, + { + "city": "East Porterville", + "state": "California" + }, + { + "city": "East Providence", + "state": "Rhode Island" + }, + { + "city": "East Renton Highlands", + "state": "Washington" + }, + { + "city": "East Ridge", + "state": "Tennessee" + }, + { + "city": "East Riverdale", + "state": "Maryland" + }, + { + "city": "East Rochester", + "state": "New York" + }, + { + "city": "East Rochester", + "state": "New York" + }, + { + "city": "East Rockaway", + "state": "New York" + }, + { + "city": "East Rutherford", + "state": "New Jersey" + }, + { + "city": "East San Gabriel", + "state": "California" + }, + { + "city": "East St. Louis", + "state": "Illinois" + }, + { + "city": "East Stroudsburg", + "state": "Pennsylvania" + }, + { + "city": "East Wenatchee Bench", + "state": "Washington" + }, + { + "city": "East Windsor", + "state": "Connecticut" + }, + { + "city": "East York", + "state": "Pennsylvania" + }, + { + "city": "Eastchester", + "state": "New York" + }, + { + "city": "Eastchester", + "state": "New York" + }, + { + "city": "Easthampton", + "state": "Massachusetts" + }, + { + "city": "Eastlake", + "state": "Ohio" + }, + { + "city": "Easton", + "state": "Pennsylvania" + }, + { + "city": "Easton", + "state": "Maryland" + }, + { + "city": "Easton", + "state": "Massachusetts" + }, + { + "city": "Easton", + "state": "Connecticut" + }, + { + "city": "Eastpointe", + "state": "Michigan" + }, + { + "city": "Eastwood", + "state": "Michigan" + }, + { + "city": "Eaton", + "state": "Ohio" + }, + { + "city": "Eatonton", + "state": "Georgia" + }, + { + "city": "Eatontown", + "state": "New Jersey" + }, + { + "city": "Eau Claire", + "state": "Wisconsin" + }, + { + "city": "Echelon", + "state": "New Jersey" + }, + { + "city": "Economy", + "state": "Pennsylvania" + }, + { + "city": "Ecorse", + "state": "Michigan" + }, + { + "city": "Eden", + "state": "New York" + }, + { + "city": "Eden", + "state": "North Carolina" + }, + { + "city": "Eden Isle", + "state": "Louisiana" + }, + { + "city": "Eden Prairie", + "state": "Minnesota" + }, + { + "city": "Edgemere", + "state": "Maryland" + }, + { + "city": "Edgewater", + "state": "New Jersey" + }, + { + "city": "Edgewater", + "state": "Florida" + }, + { + "city": "Edgewood", + "state": "Kentucky" + }, + { + "city": "Edgewood", + "state": "Maryland" + }, + { + "city": "Edgewood", + "state": "Washington" + }, + { + "city": "Edina", + "state": "Minnesota" + }, + { + "city": "Edinboro", + "state": "Pennsylvania" + }, + { + "city": "Edinburg", + "state": "Texas" + }, + { + "city": "Edison", + "state": "New Jersey" + }, + { + "city": "Edmond", + "state": "Oklahoma" + }, + { + "city": "Edmonds", + "state": "Washington" + }, + { + "city": "Edwards", + "state": "Colorado" + }, + { + "city": "Edwardsville", + "state": "Illinois" + }, + { + "city": "Effingham", + "state": "Illinois" + }, + { + "city": "Eglin AFB", + "state": "Florida" + }, + { + "city": "Egypt Lake-Leto", + "state": "Florida" + }, + { + "city": "Eidson Road", + "state": "Texas" + }, + { + "city": "El Cajon", + "state": "California" + }, + { + "city": "El Campo", + "state": "Texas" + }, + { + "city": "El Centro", + "state": "California" + }, + { + "city": "El Cerrito", + "state": "California" + }, + { + "city": "El Dorado", + "state": "Arkansas" + }, + { + "city": "El Dorado", + "state": "Kansas" + }, + { + "city": "El Dorado Hills", + "state": "California" + }, + { + "city": "El Mirage", + "state": "Arizona" + }, + { + "city": "El Monte", + "state": "California" + }, + { + "city": "El Paso", + "state": "Texas" + }, + { + "city": "El Paso de Robles", + "state": "California" + }, + { + "city": "El Reno", + "state": "Oklahoma" + }, + { + "city": "El Rio", + "state": "California" + }, + { + "city": "El Segundo", + "state": "California" + }, + { + "city": "El Sobrante", + "state": "California" + }, + { + "city": "Elbridge", + "state": "New York" + }, + { + "city": "Eldersburg", + "state": "Maryland" + }, + { + "city": "Elfers", + "state": "Florida" + }, + { + "city": "Elgin", + "state": "Illinois" + }, + { + "city": "Elizabeth", + "state": "New Jersey" + }, + { + "city": "Elizabeth City", + "state": "North Carolina" + }, + { + "city": "Elizabethton", + "state": "Tennessee" + }, + { + "city": "Elizabethtown", + "state": "Pennsylvania" + }, + { + "city": "Elizabethtown", + "state": "Kentucky" + }, + { + "city": "Elk City", + "state": "Oklahoma" + }, + { + "city": "Elk Grove", + "state": "California" + }, + { + "city": "Elk Grove Village", + "state": "Illinois" + }, + { + "city": "Elk Plain", + "state": "Washington" + }, + { + "city": "Elk River", + "state": "Minnesota" + }, + { + "city": "Elkhart", + "state": "Indiana" + }, + { + "city": "Elkhorn", + "state": "Nebraska" + }, + { + "city": "Elkhorn", + "state": "Wisconsin" + }, + { + "city": "Elkins", + "state": "West Virginia" + }, + { + "city": "Elko", + "state": "Nevada" + }, + { + "city": "Elkridge", + "state": "Maryland" + }, + { + "city": "Elkton", + "state": "Maryland" + }, + { + "city": "Ellensburg", + "state": "Washington" + }, + { + "city": "Ellicott", + "state": "New York" + }, + { + "city": "Ellicott City", + "state": "Maryland" + }, + { + "city": "Ellington", + "state": "Connecticut" + }, + { + "city": "Ellisville", + "state": "Missouri" + }, + { + "city": "Ellsworth", + "state": "Maine" + }, + { + "city": "Ellwood City", + "state": "Pennsylvania" + }, + { + "city": "Elm Grove", + "state": "Wisconsin" + }, + { + "city": "Elma", + "state": "New York" + }, + { + "city": "Elmhurst", + "state": "Illinois" + }, + { + "city": "Elmira", + "state": "New York" + }, + { + "city": "Elmira", + "state": "New York" + }, + { + "city": "Elmont", + "state": "New York" + }, + { + "city": "Elmwood Park", + "state": "New Jersey" + }, + { + "city": "Elmwood Park", + "state": "Illinois" + }, + { + "city": "Elon College", + "state": "North Carolina" + }, + { + "city": "Eloy", + "state": "Arizona" + }, + { + "city": "Elsmere", + "state": "Kentucky" + }, + { + "city": "Elwood", + "state": "Indiana" + }, + { + "city": "Elwood", + "state": "New York" + }, + { + "city": "Elyria", + "state": "Ohio" + }, + { + "city": "Emerson", + "state": "New Jersey" + }, + { + "city": "Emeryville", + "state": "California" + }, + { + "city": "Emmaus", + "state": "Pennsylvania" + }, + { + "city": "Emporia", + "state": "Kansas" + }, + { + "city": "Encinitas", + "state": "California" + }, + { + "city": "Endicott", + "state": "New York" + }, + { + "city": "Endwell", + "state": "New York" + }, + { + "city": "Enfield", + "state": "Connecticut" + }, + { + "city": "Englewood", + "state": "Colorado" + }, + { + "city": "Englewood", + "state": "Florida" + }, + { + "city": "Englewood", + "state": "New Jersey" + }, + { + "city": "Englewood", + "state": "Ohio" + }, + { + "city": "Enid", + "state": "Oklahoma" + }, + { + "city": "Ennis", + "state": "Texas" + }, + { + "city": "Ensley", + "state": "Florida" + }, + { + "city": "Enterprise", + "state": "Alabama" + }, + { + "city": "Enterprise", + "state": "Nevada" + }, + { + "city": "Enumclaw", + "state": "Washington" + }, + { + "city": "Ephrata", + "state": "Washington" + }, + { + "city": "Ephrata", + "state": "Pennsylvania" + }, + { + "city": "Erie", + "state": "Pennsylvania" + }, + { + "city": "Erie", + "state": "Colorado" + }, + { + "city": "Erlanger", + "state": "Kentucky" + }, + { + "city": "Erlton-Ellisburg", + "state": "New Jersey" + }, + { + "city": "Erwin", + "state": "New York" + }, + { + "city": "Escanaba", + "state": "Michigan" + }, + { + "city": "Escondido", + "state": "California" + }, + { + "city": "Esopus", + "state": "New York" + }, + { + "city": "Espanola", + "state": "New Mexico" + }, + { + "city": "Essex", + "state": "Maryland" + }, + { + "city": "Essex", + "state": "Connecticut" + }, + { + "city": "Essex", + "state": "Vermont" + }, + { + "city": "Essex Junction", + "state": "Vermont" + }, + { + "city": "Estelle", + "state": "Louisiana" + }, + { + "city": "Estero", + "state": "Florida" + }, + { + "city": "Estherville", + "state": "Iowa" + }, + { + "city": "Euclid", + "state": "Ohio" + }, + { + "city": "Eufaula", + "state": "Alabama" + }, + { + "city": "Eugene", + "state": "Oregon" + }, + { + "city": "Euless", + "state": "Texas" + }, + { + "city": "Eunice", + "state": "Louisiana" + }, + { + "city": "Eureka", + "state": "California" + }, + { + "city": "Eureka", + "state": "Missouri" + }, + { + "city": "Eustis", + "state": "Florida" + }, + { + "city": "Evans", + "state": "Georgia" + }, + { + "city": "Evans", + "state": "Colorado" + }, + { + "city": "Evans", + "state": "New York" + }, + { + "city": "Evanston", + "state": "Illinois" + }, + { + "city": "Evanston", + "state": "Wyoming" + }, + { + "city": "Evansville", + "state": "Indiana" + }, + { + "city": "Everett", + "state": "Massachusetts" + }, + { + "city": "Everett", + "state": "Washington" + }, + { + "city": "Evergreen", + "state": "Montana" + }, + { + "city": "Evergreen", + "state": "Colorado" + }, + { + "city": "Evergreen Park", + "state": "Illinois" + }, + { + "city": "Ewa Beach", + "state": "Hawaii" + }, + { + "city": "Ewing", + "state": "New Jersey" + }, + { + "city": "Excelsior Springs", + "state": "Missouri" + }, + { + "city": "Exeter", + "state": "New Hampshire" + }, + { + "city": "Exeter", + "state": "New Hampshire" + }, + { + "city": "Exeter", + "state": "California" + }, + { + "city": "Exeter", + "state": "Rhode Island" + }, + { + "city": "Fabens", + "state": "Texas" + }, + { + "city": "Fair Lawn", + "state": "New Jersey" + }, + { + "city": "Fair Oaks", + "state": "California" + }, + { + "city": "Fair Oaks", + "state": "Georgia" + }, + { + "city": "Fair Plain", + "state": "Michigan" + }, + { + "city": "Fairbanks", + "state": "Alaska" + }, + { + "city": "Fairborn", + "state": "Ohio" + }, + { + "city": "Fairdale", + "state": "Kentucky" + }, + { + "city": "Fairfax", + "state": "California" + }, + { + "city": "Fairfax", + "state": "Virginia" + }, + { + "city": "Fairfield", + "state": "Ohio" + }, + { + "city": "Fairfield", + "state": "New Jersey" + }, + { + "city": "Fairfield", + "state": "California" + }, + { + "city": "Fairfield", + "state": "Alabama" + }, + { + "city": "Fairfield", + "state": "Connecticut" + }, + { + "city": "Fairfield", + "state": "Iowa" + }, + { + "city": "Fairfield", + "state": "Maine" + }, + { + "city": "Fairhaven", + "state": "Massachusetts" + }, + { + "city": "Fairhope", + "state": "Alabama" + }, + { + "city": "Fairland", + "state": "Maryland" + }, + { + "city": "Fairlawn", + "state": "Ohio" + }, + { + "city": "Fairless Hills", + "state": "Pennsylvania" + }, + { + "city": "Fairmont", + "state": "West Virginia" + }, + { + "city": "Fairmont", + "state": "Minnesota" + }, + { + "city": "Fairmount", + "state": "New York" + }, + { + "city": "Fairview", + "state": "Oregon" + }, + { + "city": "Fairview", + "state": "New Jersey" + }, + { + "city": "Fairview", + "state": "California" + }, + { + "city": "Fairview", + "state": "Georgia" + }, + { + "city": "Fairview Heights", + "state": "Illinois" + }, + { + "city": "Fairview Park", + "state": "Ohio" + }, + { + "city": "Fairview Shores", + "state": "Florida" + }, + { + "city": "Fairwood", + "state": "Washington" + }, + { + "city": "Fall River", + "state": "Massachusetts" + }, + { + "city": "Fallbrook", + "state": "California" + }, + { + "city": "Fallon", + "state": "Nevada" + }, + { + "city": "Falls Church", + "state": "Virginia" + }, + { + "city": "Fallsburg", + "state": "New York" + }, + { + "city": "Fallston", + "state": "Maryland" + }, + { + "city": "Falmouth", + "state": "Maine" + }, + { + "city": "Falmouth", + "state": "Massachusetts" + }, + { + "city": "Fanwood", + "state": "New Jersey" + }, + { + "city": "Fargo", + "state": "North Dakota" + }, + { + "city": "Faribault", + "state": "Minnesota" + }, + { + "city": "Farmers Branch", + "state": "Texas" + }, + { + "city": "Farmersville", + "state": "California" + }, + { + "city": "Farmingdale", + "state": "New York" + }, + { + "city": "Farmington", + "state": "New Mexico" + }, + { + "city": "Farmington", + "state": "New York" + }, + { + "city": "Farmington", + "state": "Utah" + }, + { + "city": "Farmington", + "state": "Minnesota" + }, + { + "city": "Farmington", + "state": "Missouri" + }, + { + "city": "Farmington", + "state": "Maine" + }, + { + "city": "Farmington", + "state": "Michigan" + }, + { + "city": "Farmington", + "state": "Connecticut" + }, + { + "city": "Farmington Hills", + "state": "Michigan" + }, + { + "city": "Farmingville", + "state": "New York" + }, + { + "city": "Farmville", + "state": "Virginia" + }, + { + "city": "Farragut", + "state": "Tennessee" + }, + { + "city": "Farrell", + "state": "Pennsylvania" + }, + { + "city": "Fayetteville", + "state": "North Carolina" + }, + { + "city": "Fayetteville", + "state": "Tennessee" + }, + { + "city": "Fayetteville", + "state": "Arkansas" + }, + { + "city": "Fayetteville", + "state": "Georgia" + }, + { + "city": "Feasterville-Trevose", + "state": "Pennsylvania" + }, + { + "city": "Federal Heights", + "state": "Colorado" + }, + { + "city": "Federal Way", + "state": "Washington" + }, + { + "city": "Fenton", + "state": "New York" + }, + { + "city": "Fenton", + "state": "Michigan" + }, + { + "city": "Fergus Falls", + "state": "Minnesota" + }, + { + "city": "Ferguson", + "state": "Missouri" + }, + { + "city": "Fern Creek", + "state": "Kentucky" + }, + { + "city": "Fern Park", + "state": "Florida" + }, + { + "city": "Fernandina Beach", + "state": "Florida" + }, + { + "city": "Ferndale", + "state": "Maryland" + }, + { + "city": "Ferndale", + "state": "Michigan" + }, + { + "city": "Ferndale", + "state": "Washington" + }, + { + "city": "Fernley", + "state": "Nevada" + }, + { + "city": "Fernway", + "state": "Pennsylvania" + }, + { + "city": "Ferry Pass", + "state": "Florida" + }, + { + "city": "Festus", + "state": "Missouri" + }, + { + "city": "Fillmore", + "state": "California" + }, + { + "city": "Findlay", + "state": "Ohio" + }, + { + "city": "Finneytown", + "state": "Ohio" + }, + { + "city": "Fishers", + "state": "Indiana" + }, + { + "city": "Fishkill", + "state": "New York" + }, + { + "city": "Fitchburg", + "state": "Wisconsin" + }, + { + "city": "Fitchburg", + "state": "Massachusetts" + }, + { + "city": "Fitzgerald", + "state": "Georgia" + }, + { + "city": "Five Corners", + "state": "Washington" + }, + { + "city": "Five Forks", + "state": "South Carolina" + }, + { + "city": "Flagstaff", + "state": "Arizona" + }, + { + "city": "Flat Rock", + "state": "Michigan" + }, + { + "city": "Flatwoods", + "state": "Kentucky" + }, + { + "city": "Flint", + "state": "Michigan" + }, + { + "city": "Floral Park", + "state": "New York" + }, + { + "city": "Florence", + "state": "South Carolina" + }, + { + "city": "Florence", + "state": "Oregon" + }, + { + "city": "Florence", + "state": "Kentucky" + }, + { + "city": "Florence", + "state": "Arizona" + }, + { + "city": "Florence", + "state": "Alabama" + }, + { + "city": "Florence-Graham", + "state": "California" + }, + { + "city": "Florence-Roebling", + "state": "New Jersey" + }, + { + "city": "Florham Park", + "state": "New Jersey" + }, + { + "city": "Florida City", + "state": "Florida" + }, + { + "city": "Florida Ridge", + "state": "Florida" + }, + { + "city": "Florin", + "state": "California" + }, + { + "city": "Florissant", + "state": "Missouri" + }, + { + "city": "Flossmoor", + "state": "Illinois" + }, + { + "city": "Flower Mound", + "state": "Texas" + }, + { + "city": "Flowing Wells", + "state": "Arizona" + }, + { + "city": "Flushing", + "state": "Michigan" + }, + { + "city": "Folcroft", + "state": "Pennsylvania" + }, + { + "city": "Foley", + "state": "Alabama" + }, + { + "city": "Folsom", + "state": "California" + }, + { + "city": "Folsom", + "state": "Pennsylvania" + }, + { + "city": "Fond du Lac", + "state": "Wisconsin" + }, + { + "city": "Fontana", + "state": "California" + }, + { + "city": "Foothill Farms", + "state": "California" + }, + { + "city": "Foothill Ranch", + "state": "California" + }, + { + "city": "Fords", + "state": "New Jersey" + }, + { + "city": "Forest", + "state": "Virginia" + }, + { + "city": "Forest Acres", + "state": "South Carolina" + }, + { + "city": "Forest City", + "state": "North Carolina" + }, + { + "city": "Forest City", + "state": "Florida" + }, + { + "city": "Forest Glen", + "state": "Maryland" + }, + { + "city": "Forest Grove", + "state": "Oregon" + }, + { + "city": "Forest Hill", + "state": "Texas" + }, + { + "city": "Forest Hills", + "state": "Pennsylvania" + }, + { + "city": "Forest Hills", + "state": "Michigan" + }, + { + "city": "Forest Lake", + "state": "Minnesota" + }, + { + "city": "Forest Park", + "state": "Illinois" + }, + { + "city": "Forest Park", + "state": "Georgia" + }, + { + "city": "Forest Park", + "state": "Ohio" + }, + { + "city": "Forestdale", + "state": "Alabama" + }, + { + "city": "Forestville", + "state": "Maryland" + }, + { + "city": "Forestville", + "state": "Ohio" + }, + { + "city": "Forrest City", + "state": "Arkansas" + }, + { + "city": "Fort Ann", + "state": "New York" + }, + { + "city": "Fort Atkinson", + "state": "Wisconsin" + }, + { + "city": "Fort Belvoir", + "state": "Virginia" + }, + { + "city": "Fort Benning South", + "state": "Georgia" + }, + { + "city": "Fort Bliss", + "state": "Texas" + }, + { + "city": "Fort Bragg", + "state": "North Carolina" + }, + { + "city": "Fort Bragg", + "state": "California" + }, + { + "city": "Fort Campbell North", + "state": "Kentucky" + }, + { + "city": "Fort Carson", + "state": "Colorado" + }, + { + "city": "Fort Collins", + "state": "Colorado" + }, + { + "city": "Fort Dix", + "state": "New Jersey" + }, + { + "city": "Fort Dodge", + "state": "Iowa" + }, + { + "city": "Fort Drum", + "state": "New York" + }, + { + "city": "Fort Hood", + "state": "Texas" + }, + { + "city": "Fort Hunt", + "state": "Virginia" + }, + { + "city": "Fort Knox", + "state": "Kentucky" + }, + { + "city": "Fort Lauderdale", + "state": "Florida" + }, + { + "city": "Fort Lee", + "state": "New Jersey" + }, + { + "city": "Fort Lee", + "state": "Virginia" + }, + { + "city": "Fort Leonard Wood", + "state": "Missouri" + }, + { + "city": "Fort Lewis", + "state": "Washington" + }, + { + "city": "Fort Lupton", + "state": "Colorado" + }, + { + "city": "Fort Madison", + "state": "Iowa" + }, + { + "city": "Fort Meade", + "state": "Maryland" + }, + { + "city": "Fort Mill", + "state": "South Carolina" + }, + { + "city": "Fort Mitchell", + "state": "Kentucky" + }, + { + "city": "Fort Morgan", + "state": "Colorado" + }, + { + "city": "Fort Myers", + "state": "Florida" + }, + { + "city": "Fort Myers Beach", + "state": "Florida" + }, + { + "city": "Fort Oglethorpe", + "state": "Georgia" + }, + { + "city": "Fort Payne", + "state": "Alabama" + }, + { + "city": "Fort Pierce", + "state": "Florida" + }, + { + "city": "Fort Pierce North", + "state": "Florida" + }, + { + "city": "Fort Polk South", + "state": "Louisiana" + }, + { + "city": "Fort Riley North", + "state": "Kansas" + }, + { + "city": "Fort Rucker", + "state": "Alabama" + }, + { + "city": "Fort Salonga", + "state": "New York" + }, + { + "city": "Fort Scott", + "state": "Kansas" + }, + { + "city": "Fort Smith", + "state": "Arkansas" + }, + { + "city": "Fort Stewart", + "state": "Georgia" + }, + { + "city": "Fort Stockton", + "state": "Texas" + }, + { + "city": "Fort Thomas", + "state": "Kentucky" + }, + { + "city": "Fort Valley", + "state": "Georgia" + }, + { + "city": "Fort Walton Beach", + "state": "Florida" + }, + { + "city": "Fort Washington", + "state": "Maryland" + }, + { + "city": "Fort Wayne", + "state": "Indiana" + }, + { + "city": "Fort Worth", + "state": "Texas" + }, + { + "city": "Fortuna", + "state": "California" + }, + { + "city": "Fortuna Foothills", + "state": "Arizona" + }, + { + "city": "Foster City", + "state": "California" + }, + { + "city": "Fostoria", + "state": "Ohio" + }, + { + "city": "Fountain", + "state": "Colorado" + }, + { + "city": "Fountain Hills", + "state": "Arizona" + }, + { + "city": "Fountain Inn", + "state": "South Carolina" + }, + { + "city": "Fountain Valley", + "state": "California" + }, + { + "city": "Fountainbleau", + "state": "Florida" + }, + { + "city": "Four Corners", + "state": "Oregon" + }, + { + "city": "Fox Lake", + "state": "Illinois" + }, + { + "city": "Fox Point", + "state": "Wisconsin" + }, + { + "city": "Foxborough", + "state": "Massachusetts" + }, + { + "city": "Framingham", + "state": "Massachusetts" + }, + { + "city": "Framingham", + "state": "Massachusetts" + }, + { + "city": "Franconia", + "state": "Virginia" + }, + { + "city": "Frankfort", + "state": "New York" + }, + { + "city": "Frankfort", + "state": "Indiana" + }, + { + "city": "Frankfort", + "state": "Kentucky" + }, + { + "city": "Frankfort", + "state": "Illinois" + }, + { + "city": "Frankfort Square", + "state": "Illinois" + }, + { + "city": "Franklin", + "state": "Kentucky" + }, + { + "city": "Franklin", + "state": "Indiana" + }, + { + "city": "Franklin", + "state": "Louisiana" + }, + { + "city": "Franklin", + "state": "Massachusetts" + }, + { + "city": "Franklin", + "state": "New Hampshire" + }, + { + "city": "Franklin", + "state": "Ohio" + }, + { + "city": "Franklin", + "state": "Virginia" + }, + { + "city": "Franklin", + "state": "Pennsylvania" + }, + { + "city": "Franklin", + "state": "Wisconsin" + }, + { + "city": "Franklin", + "state": "Tennessee" + }, + { + "city": "Franklin Lakes", + "state": "New Jersey" + }, + { + "city": "Franklin Park", + "state": "Illinois" + }, + { + "city": "Franklin Park", + "state": "Pennsylvania" + }, + { + "city": "Franklin Square", + "state": "New York" + }, + { + "city": "Fraser", + "state": "Michigan" + }, + { + "city": "Frederick", + "state": "Maryland" + }, + { + "city": "Fredericksburg", + "state": "Virginia" + }, + { + "city": "Fredericksburg", + "state": "Texas" + }, + { + "city": "Fredonia", + "state": "New York" + }, + { + "city": "Freehold", + "state": "New Jersey" + }, + { + "city": "Freeport", + "state": "Maine" + }, + { + "city": "Freeport", + "state": "Illinois" + }, + { + "city": "Freeport", + "state": "New York" + }, + { + "city": "Freeport", + "state": "Texas" + }, + { + "city": "Freetown", + "state": "Massachusetts" + }, + { + "city": "Fremont", + "state": "California" + }, + { + "city": "Fremont", + "state": "Ohio" + }, + { + "city": "Fremont", + "state": "Nebraska" + }, + { + "city": "Fresno", + "state": "Texas" + }, + { + "city": "Fresno", + "state": "California" + }, + { + "city": "Fridley", + "state": "Minnesota" + }, + { + "city": "Friendly", + "state": "Maryland" + }, + { + "city": "Friendswood", + "state": "Texas" + }, + { + "city": "Frisco", + "state": "Texas" + }, + { + "city": "Front Royal", + "state": "Virginia" + }, + { + "city": "Frostburg", + "state": "Maryland" + }, + { + "city": "Fruit Cove", + "state": "Florida" + }, + { + "city": "Fruita", + "state": "Colorado" + }, + { + "city": "Fruitvale", + "state": "Colorado" + }, + { + "city": "Fruitville", + "state": "Florida" + }, + { + "city": "Fullerton", + "state": "California" + }, + { + "city": "Fullerton", + "state": "Pennsylvania" + }, + { + "city": "Fulton", + "state": "New York" + }, + { + "city": "Fulton", + "state": "Missouri" + }, + { + "city": "Fultondale", + "state": "Alabama" + }, + { + "city": "Fuquay-Varina", + "state": "North Carolina" + }, + { + "city": "Gadsden", + "state": "Alabama" + }, + { + "city": "Gaffney", + "state": "South Carolina" + }, + { + "city": "Gages Lake", + "state": "Illinois" + }, + { + "city": "Gahanna", + "state": "Ohio" + }, + { + "city": "Gainesville", + "state": "Texas" + }, + { + "city": "Gainesville", + "state": "Georgia" + }, + { + "city": "Gainesville", + "state": "Florida" + }, + { + "city": "Gaithersburg", + "state": "Maryland" + }, + { + "city": "Galax", + "state": "Virginia" + }, + { + "city": "Galena Park", + "state": "Texas" + }, + { + "city": "Galesburg", + "state": "Illinois" + }, + { + "city": "Galion", + "state": "Ohio" + }, + { + "city": "Gallatin", + "state": "Tennessee" + }, + { + "city": "Galliano", + "state": "Louisiana" + }, + { + "city": "Gallup", + "state": "New Mexico" + }, + { + "city": "Galt", + "state": "California" + }, + { + "city": "Galveston", + "state": "Texas" + }, + { + "city": "Gantt", + "state": "South Carolina" + }, + { + "city": "Garden Acres", + "state": "California" + }, + { + "city": "Garden City", + "state": "Georgia" + }, + { + "city": "Garden City", + "state": "Kansas" + }, + { + "city": "Garden City", + "state": "Idaho" + }, + { + "city": "Garden City", + "state": "Michigan" + }, + { + "city": "Garden City", + "state": "South Carolina" + }, + { + "city": "Garden City", + "state": "New York" + }, + { + "city": "Garden City Park", + "state": "New York" + }, + { + "city": "Garden Grove", + "state": "California" + }, + { + "city": "Garden Home-Whitford", + "state": "Oregon" + }, + { + "city": "Gardena", + "state": "California" + }, + { + "city": "Gardendale", + "state": "Alabama" + }, + { + "city": "Gardere", + "state": "Louisiana" + }, + { + "city": "Gardiner", + "state": "Maine" + }, + { + "city": "Gardner", + "state": "Kansas" + }, + { + "city": "Gardner", + "state": "Massachusetts" + }, + { + "city": "Gardnerville Ranchos", + "state": "Nevada" + }, + { + "city": "Garfield", + "state": "New Jersey" + }, + { + "city": "Garfield Heights", + "state": "Ohio" + }, + { + "city": "Garland", + "state": "Texas" + }, + { + "city": "Garner", + "state": "North Carolina" + }, + { + "city": "Garrison", + "state": "Maryland" + }, + { + "city": "Gary", + "state": "Indiana" + }, + { + "city": "Gastonia", + "state": "North Carolina" + }, + { + "city": "Gates", + "state": "New York" + }, + { + "city": "Gates-North Gates", + "state": "New York" + }, + { + "city": "Gatesville", + "state": "Texas" + }, + { + "city": "Gautier", + "state": "Mississippi" + }, + { + "city": "Geddes", + "state": "New York" + }, + { + "city": "Genesee", + "state": "Wisconsin" + }, + { + "city": "Geneseo", + "state": "New York" + }, + { + "city": "Geneseo", + "state": "New York" + }, + { + "city": "Geneseo", + "state": "Illinois" + }, + { + "city": "Geneva", + "state": "Illinois" + }, + { + "city": "Geneva", + "state": "New York" + }, + { + "city": "Geneva", + "state": "Ohio" + }, + { + "city": "Georgetown", + "state": "Texas" + }, + { + "city": "Georgetown", + "state": "South Carolina" + }, + { + "city": "Georgetown", + "state": "Georgia" + }, + { + "city": "Georgetown", + "state": "Massachusetts" + }, + { + "city": "Georgetown", + "state": "Kentucky" + }, + { + "city": "Georgetown County", + "state": "South Carolina" + }, + { + "city": "Gering", + "state": "Nebraska" + }, + { + "city": "German Flatts", + "state": "New York" + }, + { + "city": "Germantown", + "state": "Tennessee" + }, + { + "city": "Germantown", + "state": "Wisconsin" + }, + { + "city": "Germantown", + "state": "Maryland" + }, + { + "city": "Gettysburg", + "state": "Pennsylvania" + }, + { + "city": "Gibsonton", + "state": "Florida" + }, + { + "city": "Gifford", + "state": "Florida" + }, + { + "city": "Gig Harbor", + "state": "Washington" + }, + { + "city": "Gilbert", + "state": "Arizona" + }, + { + "city": "Gilford", + "state": "New Hampshire" + }, + { + "city": "Gillette", + "state": "Wyoming" + }, + { + "city": "Gilroy", + "state": "California" + }, + { + "city": "Girard", + "state": "Ohio" + }, + { + "city": "Gladeview", + "state": "Florida" + }, + { + "city": "Gladewater", + "state": "Texas" + }, + { + "city": "Gladstone", + "state": "Oregon" + }, + { + "city": "Gladstone", + "state": "Missouri" + }, + { + "city": "Glasgow", + "state": "Kentucky" + }, + { + "city": "Glasgow", + "state": "Delaware" + }, + { + "city": "Glassboro", + "state": "New Jersey" + }, + { + "city": "Glastonbury", + "state": "Connecticut" + }, + { + "city": "Glastonbury Center", + "state": "Connecticut" + }, + { + "city": "Glen Allen", + "state": "Virginia" + }, + { + "city": "Glen Avon", + "state": "California" + }, + { + "city": "Glen Burnie", + "state": "Maryland" + }, + { + "city": "Glen Carbon", + "state": "Illinois" + }, + { + "city": "Glen Cove", + "state": "New York" + }, + { + "city": "Glen Ellyn", + "state": "Illinois" + }, + { + "city": "Glen Ridge", + "state": "New Jersey" + }, + { + "city": "Glen Rock", + "state": "New Jersey" + }, + { + "city": "Glenarden", + "state": "Maryland" + }, + { + "city": "Glencoe", + "state": "Illinois" + }, + { + "city": "Glendale", + "state": "California" + }, + { + "city": "Glendale", + "state": "Arizona" + }, + { + "city": "Glendale", + "state": "Wisconsin" + }, + { + "city": "Glendale Heights", + "state": "Illinois" + }, + { + "city": "Glendora", + "state": "California" + }, + { + "city": "Glenn Dale", + "state": "Maryland" + }, + { + "city": "Glenn Heights", + "state": "Texas" + }, + { + "city": "Glenolden", + "state": "Pennsylvania" + }, + { + "city": "Glenpool", + "state": "Oklahoma" + }, + { + "city": "Glens Falls", + "state": "New York" + }, + { + "city": "Glens Falls North", + "state": "New York" + }, + { + "city": "Glenside", + "state": "Pennsylvania" + }, + { + "city": "Glenvar Heights", + "state": "Florida" + }, + { + "city": "Glenview", + "state": "Illinois" + }, + { + "city": "Glenville", + "state": "New York" + }, + { + "city": "Glenwood", + "state": "Illinois" + }, + { + "city": "Glenwood Springs", + "state": "Colorado" + }, + { + "city": "Globe", + "state": "Arizona" + }, + { + "city": "Glocester", + "state": "Rhode Island" + }, + { + "city": "Gloucester", + "state": "Massachusetts" + }, + { + "city": "Gloucester City", + "state": "New Jersey" + }, + { + "city": "Gloucester Point", + "state": "Virginia" + }, + { + "city": "Gloversville", + "state": "New York" + }, + { + "city": "Godfrey", + "state": "Illinois" + }, + { + "city": "Goffstown", + "state": "New Hampshire" + }, + { + "city": "Gold Camp", + "state": "Arizona" + }, + { + "city": "Gold River", + "state": "California" + }, + { + "city": "Golden", + "state": "Colorado" + }, + { + "city": "Golden Gate", + "state": "Florida" + }, + { + "city": "Golden Glades", + "state": "Florida" + }, + { + "city": "Golden Hills", + "state": "California" + }, + { + "city": "Golden Lakes", + "state": "Florida" + }, + { + "city": "Golden Valley", + "state": "Minnesota" + }, + { + "city": "Goldenrod", + "state": "Florida" + }, + { + "city": "Goldsboro", + "state": "North Carolina" + }, + { + "city": "Goleta", + "state": "California" + }, + { + "city": "Gonzales", + "state": "California" + }, + { + "city": "Gonzales", + "state": "Louisiana" + }, + { + "city": "Gonzales", + "state": "Texas" + }, + { + "city": "Gonzalez", + "state": "Florida" + }, + { + "city": "Goodings Grove", + "state": "Illinois" + }, + { + "city": "Goodlettsville", + "state": "Tennessee" + }, + { + "city": "Goodyear", + "state": "Arizona" + }, + { + "city": "Goose Creek", + "state": "South Carolina" + }, + { + "city": "Gorham", + "state": "Maine" + }, + { + "city": "Goshen", + "state": "Indiana" + }, + { + "city": "Goshen", + "state": "New York" + }, + { + "city": "Goulds", + "state": "Florida" + }, + { + "city": "Gouverneur", + "state": "New York" + }, + { + "city": "Grafton", + "state": "Massachusetts" + }, + { + "city": "Grafton", + "state": "Wisconsin" + }, + { + "city": "Graham", + "state": "Washington" + }, + { + "city": "Graham", + "state": "North Carolina" + }, + { + "city": "Graham", + "state": "Texas" + }, + { + "city": "Granby", + "state": "New York" + }, + { + "city": "Granby", + "state": "Connecticut" + }, + { + "city": "Granby", + "state": "Massachusetts" + }, + { + "city": "Grand Blanc", + "state": "Michigan" + }, + { + "city": "Grand Chute", + "state": "Wisconsin" + }, + { + "city": "Grand Forks", + "state": "North Dakota" + }, + { + "city": "Grand Haven", + "state": "Michigan" + }, + { + "city": "Grand Island", + "state": "Nebraska" + }, + { + "city": "Grand Island", + "state": "New York" + }, + { + "city": "Grand Junction", + "state": "Colorado" + }, + { + "city": "Grand Ledge", + "state": "Michigan" + }, + { + "city": "Grand Prairie", + "state": "Texas" + }, + { + "city": "Grand Rapids", + "state": "Wisconsin" + }, + { + "city": "Grand Rapids", + "state": "Michigan" + }, + { + "city": "Grand Rapids", + "state": "Minnesota" + }, + { + "city": "Grand Terrace", + "state": "California" + }, + { + "city": "Grandview", + "state": "Missouri" + }, + { + "city": "Grandview", + "state": "Washington" + }, + { + "city": "Grandview Heights", + "state": "Ohio" + }, + { + "city": "Grandville", + "state": "Michigan" + }, + { + "city": "Granger", + "state": "Indiana" + }, + { + "city": "Granite Bay", + "state": "California" + }, + { + "city": "Granite City", + "state": "Illinois" + }, + { + "city": "Grants", + "state": "New Mexico" + }, + { + "city": "Grants Pass", + "state": "Oregon" + }, + { + "city": "Grantsville", + "state": "Utah" + }, + { + "city": "Granville", + "state": "New York" + }, + { + "city": "Grapevine", + "state": "Texas" + }, + { + "city": "Grass Valley", + "state": "California" + }, + { + "city": "Gray", + "state": "Maine" + }, + { + "city": "Grayslake", + "state": "Illinois" + }, + { + "city": "Great Barrington", + "state": "Massachusetts" + }, + { + "city": "Great Bend", + "state": "Kansas" + }, + { + "city": "Great Falls", + "state": "Montana" + }, + { + "city": "Great Falls", + "state": "Virginia" + }, + { + "city": "Great Neck", + "state": "New York" + }, + { + "city": "Great Neck Plaza", + "state": "New York" + }, + { + "city": "Greater Carrollwood", + "state": "Florida" + }, + { + "city": "Greater Landover", + "state": "Maryland" + }, + { + "city": "Greater Northdale", + "state": "Florida" + }, + { + "city": "Greater Sun Center", + "state": "Florida" + }, + { + "city": "Greater Upper Marlboro", + "state": "Maryland" + }, + { + "city": "Greatwood", + "state": "Texas" + }, + { + "city": "Greece", + "state": "New York" + }, + { + "city": "Greece", + "state": "New York" + }, + { + "city": "Greeley", + "state": "Colorado" + }, + { + "city": "Green", + "state": "Ohio" + }, + { + "city": "Green", + "state": "Oregon" + }, + { + "city": "Green Bay", + "state": "Wisconsin" + }, + { + "city": "Green Haven", + "state": "Maryland" + }, + { + "city": "Green Hill", + "state": "Tennessee" + }, + { + "city": "Green River", + "state": "Wyoming" + }, + { + "city": "Green Valley", + "state": "Maryland" + }, + { + "city": "Green Valley", + "state": "Arizona" + }, + { + "city": "Greenacres", + "state": "Florida" + }, + { + "city": "Greenbelt", + "state": "Maryland" + }, + { + "city": "Greenburgh", + "state": "New York" + }, + { + "city": "Greencastle", + "state": "Indiana" + }, + { + "city": "Greendale", + "state": "Wisconsin" + }, + { + "city": "Greeneville", + "state": "Tennessee" + }, + { + "city": "Greenfield", + "state": "Wisconsin" + }, + { + "city": "Greenfield", + "state": "New York" + }, + { + "city": "Greenfield", + "state": "Indiana" + }, + { + "city": "Greenfield", + "state": "Massachusetts" + }, + { + "city": "Greenfield", + "state": "Massachusetts" + }, + { + "city": "Greenfield", + "state": "California" + }, + { + "city": "Greenlawn", + "state": "New York" + }, + { + "city": "Greensboro", + "state": "North Carolina" + }, + { + "city": "Greensburg", + "state": "Pennsylvania" + }, + { + "city": "Greensburg", + "state": "Indiana" + }, + { + "city": "Greentree", + "state": "New Jersey" + }, + { + "city": "Greenville", + "state": "Mississippi" + }, + { + "city": "Greenville", + "state": "Michigan" + }, + { + "city": "Greenville", + "state": "Alabama" + }, + { + "city": "Greenville", + "state": "Illinois" + }, + { + "city": "Greenville", + "state": "Pennsylvania" + }, + { + "city": "Greenville", + "state": "Rhode Island" + }, + { + "city": "Greenville", + "state": "Texas" + }, + { + "city": "Greenville", + "state": "South Carolina" + }, + { + "city": "Greenville", + "state": "North Carolina" + }, + { + "city": "Greenville", + "state": "Ohio" + }, + { + "city": "Greenville", + "state": "New York" + }, + { + "city": "Greenville", + "state": "Wisconsin" + }, + { + "city": "Greenwich", + "state": "Connecticut" + }, + { + "city": "Greenwood", + "state": "Indiana" + }, + { + "city": "Greenwood", + "state": "Mississippi" + }, + { + "city": "Greenwood", + "state": "Arkansas" + }, + { + "city": "Greenwood", + "state": "South Carolina" + }, + { + "city": "Greenwood Village", + "state": "Colorado" + }, + { + "city": "Greer", + "state": "South Carolina" + }, + { + "city": "Grenada", + "state": "Mississippi" + }, + { + "city": "Gresham", + "state": "Oregon" + }, + { + "city": "Gresham Park", + "state": "Georgia" + }, + { + "city": "Gretna", + "state": "Louisiana" + }, + { + "city": "Griffin", + "state": "Georgia" + }, + { + "city": "Griffith", + "state": "Indiana" + }, + { + "city": "Grinnell", + "state": "Iowa" + }, + { + "city": "Griswold", + "state": "Connecticut" + }, + { + "city": "Groesbeck", + "state": "Ohio" + }, + { + "city": "Grosse Ile", + "state": "Michigan" + }, + { + "city": "Grosse Pointe Farms", + "state": "Michigan" + }, + { + "city": "Grosse Pointe Park", + "state": "Michigan" + }, + { + "city": "Grosse Pointe Woods", + "state": "Michigan" + }, + { + "city": "Groton", + "state": "Massachusetts" + }, + { + "city": "Groton", + "state": "Connecticut" + }, + { + "city": "Groton", + "state": "Connecticut" + }, + { + "city": "Grove City", + "state": "Ohio" + }, + { + "city": "Grove City", + "state": "Pennsylvania" + }, + { + "city": "Groveland", + "state": "Massachusetts" + }, + { + "city": "Grover Beach", + "state": "California" + }, + { + "city": "Groves", + "state": "Texas" + }, + { + "city": "Groveton", + "state": "Virginia" + }, + { + "city": "Grovetown", + "state": "Georgia" + }, + { + "city": "Guilderland", + "state": "New York" + }, + { + "city": "Guilford", + "state": "Connecticut" + }, + { + "city": "Gulf Gate Estates", + "state": "Florida" + }, + { + "city": "Gulfport", + "state": "Florida" + }, + { + "city": "Gulfport", + "state": "Mississippi" + }, + { + "city": "Gunbarrel", + "state": "Colorado" + }, + { + "city": "Guntersville", + "state": "Alabama" + }, + { + "city": "Gurnee", + "state": "Illinois" + }, + { + "city": "Guthrie", + "state": "Oklahoma" + }, + { + "city": "Guttenberg", + "state": "New Jersey" + }, + { + "city": "Guymon", + "state": "Oklahoma" + }, + { + "city": "Hacienda Heights", + "state": "California" + }, + { + "city": "Hackensack", + "state": "New Jersey" + }, + { + "city": "Hackettstown", + "state": "New Jersey" + }, + { + "city": "Haddam", + "state": "Connecticut" + }, + { + "city": "Haddon Heights", + "state": "New Jersey" + }, + { + "city": "Haddonfield", + "state": "New Jersey" + }, + { + "city": "Hagerstown", + "state": "Maryland" + }, + { + "city": "Haiku-Pauwela", + "state": "Hawaii" + }, + { + "city": "Hailey", + "state": "Idaho" + }, + { + "city": "Haines City", + "state": "Florida" + }, + { + "city": "Halawa", + "state": "Hawaii" + }, + { + "city": "Haledon", + "state": "New Jersey" + }, + { + "city": "Hales Corners", + "state": "Wisconsin" + }, + { + "city": "Half Moon", + "state": "North Carolina" + }, + { + "city": "Half Moon Bay", + "state": "California" + }, + { + "city": "Halfmoon", + "state": "New York" + }, + { + "city": "Halfway", + "state": "Maryland" + }, + { + "city": "Halifax", + "state": "Massachusetts" + }, + { + "city": "Hallandale", + "state": "Florida" + }, + { + "city": "Haltom City", + "state": "Texas" + }, + { + "city": "Ham Lake", + "state": "Minnesota" + }, + { + "city": "Hamburg", + "state": "New York" + }, + { + "city": "Hamburg", + "state": "New York" + }, + { + "city": "Hamden", + "state": "Connecticut" + }, + { + "city": "Hamilton", + "state": "Alabama" + }, + { + "city": "Hamilton", + "state": "Massachusetts" + }, + { + "city": "Hamilton", + "state": "Ohio" + }, + { + "city": "Hamlet", + "state": "North Carolina" + }, + { + "city": "Hamlin", + "state": "New York" + }, + { + "city": "Hammond", + "state": "Louisiana" + }, + { + "city": "Hammond", + "state": "Indiana" + }, + { + "city": "Hammonton", + "state": "New Jersey" + }, + { + "city": "Hampden", + "state": "Maine" + }, + { + "city": "Hampstead", + "state": "New Hampshire" + }, + { + "city": "Hampton", + "state": "New Hampshire" + }, + { + "city": "Hampton", + "state": "New Hampshire" + }, + { + "city": "Hampton", + "state": "Virginia" + }, + { + "city": "Hampton Bays", + "state": "New York" + }, + { + "city": "Hampton Township", + "state": "Pennsylvania" + }, + { + "city": "Hamptons at Boca Raton", + "state": "Florida" + }, + { + "city": "Hamtramck", + "state": "Michigan" + }, + { + "city": "Hanahan", + "state": "South Carolina" + }, + { + "city": "Hanford", + "state": "California" + }, + { + "city": "Hannibal", + "state": "Missouri" + }, + { + "city": "Hanover", + "state": "New Hampshire" + }, + { + "city": "Hanover", + "state": "New Hampshire" + }, + { + "city": "Hanover", + "state": "Massachusetts" + }, + { + "city": "Hanover", + "state": "Pennsylvania" + }, + { + "city": "Hanover", + "state": "New York" + }, + { + "city": "Hanover Park", + "state": "Illinois" + }, + { + "city": "Hanson", + "state": "Massachusetts" + }, + { + "city": "Hapeville", + "state": "Georgia" + }, + { + "city": "Harahan", + "state": "Louisiana" + }, + { + "city": "Harker Heights", + "state": "Texas" + }, + { + "city": "Harleysville", + "state": "Pennsylvania" + }, + { + "city": "Harlingen", + "state": "Texas" + }, + { + "city": "Harper Woods", + "state": "Michigan" + }, + { + "city": "Harriman", + "state": "Tennessee" + }, + { + "city": "Harrisburg", + "state": "Pennsylvania" + }, + { + "city": "Harrisburg", + "state": "Illinois" + }, + { + "city": "Harrison", + "state": "Arkansas" + }, + { + "city": "Harrison", + "state": "Michigan" + }, + { + "city": "Harrison", + "state": "New Jersey" + }, + { + "city": "Harrison", + "state": "New York" + }, + { + "city": "Harrison", + "state": "Ohio" + }, + { + "city": "Harrison", + "state": "New York" + }, + { + "city": "Harrison", + "state": "Tennessee" + }, + { + "city": "Harrison Township", + "state": "Pennsylvania" + }, + { + "city": "Harrisonburg", + "state": "Virginia" + }, + { + "city": "Harrisonville", + "state": "Missouri" + }, + { + "city": "Harrodsburg", + "state": "Kentucky" + }, + { + "city": "Hartford", + "state": "Connecticut" + }, + { + "city": "Hartford", + "state": "Connecticut" + }, + { + "city": "Hartford", + "state": "Wisconsin" + }, + { + "city": "Hartford", + "state": "Vermont" + }, + { + "city": "Hartford City", + "state": "Indiana" + }, + { + "city": "Hartland", + "state": "Wisconsin" + }, + { + "city": "Hartsdale", + "state": "New York" + }, + { + "city": "Hartselle", + "state": "Alabama" + }, + { + "city": "Hartsville", + "state": "South Carolina" + }, + { + "city": "Harvard", + "state": "Illinois" + }, + { + "city": "Harvey", + "state": "Illinois" + }, + { + "city": "Harvey", + "state": "Louisiana" + }, + { + "city": "Harwich", + "state": "Massachusetts" + }, + { + "city": "Harwood Heights", + "state": "Illinois" + }, + { + "city": "Hasbrouck Heights", + "state": "New Jersey" + }, + { + "city": "Haslett", + "state": "Michigan" + }, + { + "city": "Hastings", + "state": "Michigan" + }, + { + "city": "Hastings", + "state": "Nebraska" + }, + { + "city": "Hastings", + "state": "Minnesota" + }, + { + "city": "Hastings", + "state": "New York" + }, + { + "city": "Hastings-on-Hudson", + "state": "New York" + }, + { + "city": "Hatboro", + "state": "Pennsylvania" + }, + { + "city": "Hattiesburg", + "state": "Mississippi" + }, + { + "city": "Hauppauge", + "state": "New York" + }, + { + "city": "Havelock", + "state": "North Carolina" + }, + { + "city": "Haverhill", + "state": "Massachusetts" + }, + { + "city": "Haverstraw", + "state": "New York" + }, + { + "city": "Haverstraw", + "state": "New York" + }, + { + "city": "Havre", + "state": "Montana" + }, + { + "city": "Havre de Grace", + "state": "Maryland" + }, + { + "city": "Hawaiian Gardens", + "state": "California" + }, + { + "city": "Hawaiian Paradise Park", + "state": "Hawaii" + }, + { + "city": "Hawthorn Woods", + "state": "Illinois" + }, + { + "city": "Hawthorne", + "state": "California" + }, + { + "city": "Hawthorne", + "state": "New Jersey" + }, + { + "city": "Hayden", + "state": "Idaho" + }, + { + "city": "Hayesville", + "state": "Oregon" + }, + { + "city": "Hays", + "state": "Kansas" + }, + { + "city": "Haysville", + "state": "Kansas" + }, + { + "city": "Hayward", + "state": "California" + }, + { + "city": "Hazel Crest", + "state": "Illinois" + }, + { + "city": "Hazel Dell North", + "state": "Washington" + }, + { + "city": "Hazel Dell South", + "state": "Washington" + }, + { + "city": "Hazel Park", + "state": "Michigan" + }, + { + "city": "Hazelwood", + "state": "Missouri" + }, + { + "city": "Hazleton", + "state": "Pennsylvania" + }, + { + "city": "Healdsburg", + "state": "California" + }, + { + "city": "Heath", + "state": "Ohio" + }, + { + "city": "Heber", + "state": "Utah" + }, + { + "city": "Heber Springs", + "state": "Arkansas" + }, + { + "city": "Hebron", + "state": "Connecticut" + }, + { + "city": "Helena", + "state": "Arkansas" + }, + { + "city": "Helena", + "state": "Alabama" + }, + { + "city": "Helena", + "state": "Montana" + }, + { + "city": "Helena Valley Southeast", + "state": "Montana" + }, + { + "city": "Helena Valley West Central", + "state": "Montana" + }, + { + "city": "Hemet", + "state": "California" + }, + { + "city": "Hempstead", + "state": "New York" + }, + { + "city": "Hempstead", + "state": "New York" + }, + { + "city": "Henderson", + "state": "North Carolina" + }, + { + "city": "Henderson", + "state": "Texas" + }, + { + "city": "Henderson", + "state": "Kentucky" + }, + { + "city": "Henderson", + "state": "Nevada" + }, + { + "city": "Hendersonville", + "state": "Tennessee" + }, + { + "city": "Hendersonville", + "state": "North Carolina" + }, + { + "city": "Henrietta", + "state": "New York" + }, + { + "city": "Henryetta", + "state": "Oklahoma" + }, + { + "city": "Hercules", + "state": "California" + }, + { + "city": "Hereford", + "state": "Texas" + }, + { + "city": "Herkimer", + "state": "New York" + }, + { + "city": "Herkimer", + "state": "New York" + }, + { + "city": "Hermantown", + "state": "Minnesota" + }, + { + "city": "Hermiston", + "state": "Oregon" + }, + { + "city": "Hermitage", + "state": "Pennsylvania" + }, + { + "city": "Hermosa Beach", + "state": "California" + }, + { + "city": "Hernando", + "state": "Florida" + }, + { + "city": "Hernando", + "state": "Mississippi" + }, + { + "city": "Herndon", + "state": "Virginia" + }, + { + "city": "Herrin", + "state": "Illinois" + }, + { + "city": "Hershey", + "state": "Pennsylvania" + }, + { + "city": "Hesperia", + "state": "California" + }, + { + "city": "Hewitt", + "state": "Texas" + }, + { + "city": "Hewlett", + "state": "New York" + }, + { + "city": "Hialeah", + "state": "Florida" + }, + { + "city": "Hialeah Gardens", + "state": "Florida" + }, + { + "city": "Hiawatha", + "state": "Iowa" + }, + { + "city": "Hibbing", + "state": "Minnesota" + }, + { + "city": "Hickory", + "state": "North Carolina" + }, + { + "city": "Hickory Hills", + "state": "Illinois" + }, + { + "city": "Hicksville", + "state": "New York" + }, + { + "city": "Hidalgo", + "state": "Texas" + }, + { + "city": "High Point", + "state": "North Carolina" + }, + { + "city": "Highland", + "state": "Utah" + }, + { + "city": "Highland", + "state": "Illinois" + }, + { + "city": "Highland", + "state": "Indiana" + }, + { + "city": "Highland", + "state": "California" + }, + { + "city": "Highland Heights", + "state": "Kentucky" + }, + { + "city": "Highland Heights", + "state": "Ohio" + }, + { + "city": "Highland Park", + "state": "Texas" + }, + { + "city": "Highland Park", + "state": "Illinois" + }, + { + "city": "Highland Park", + "state": "New Jersey" + }, + { + "city": "Highland Park", + "state": "Michigan" + }, + { + "city": "Highland Springs", + "state": "Virginia" + }, + { + "city": "Highland Village", + "state": "Texas" + }, + { + "city": "Highlands", + "state": "Texas" + }, + { + "city": "Highlands", + "state": "New York" + }, + { + "city": "Highlands Ranch", + "state": "Colorado" + }, + { + "city": "Highview", + "state": "Kentucky" + }, + { + "city": "Hillcrest", + "state": "New York" + }, + { + "city": "Hillcrest Heights", + "state": "Maryland" + }, + { + "city": "Hilliard", + "state": "Ohio" + }, + { + "city": "Hillsboro", + "state": "Ohio" + }, + { + "city": "Hillsboro", + "state": "Oregon" + }, + { + "city": "Hillsboro", + "state": "Texas" + }, + { + "city": "Hillsborough", + "state": "California" + }, + { + "city": "Hillsdale", + "state": "Michigan" + }, + { + "city": "Hillsdale", + "state": "New Jersey" + }, + { + "city": "Hillside", + "state": "New Jersey" + }, + { + "city": "Hillside", + "state": "Illinois" + }, + { + "city": "Hillview", + "state": "Kentucky" + }, + { + "city": "Hilo", + "state": "Hawaii" + }, + { + "city": "Hilton Head Island", + "state": "South Carolina" + }, + { + "city": "Hinesville", + "state": "Georgia" + }, + { + "city": "Hingham", + "state": "Massachusetts" + }, + { + "city": "Hinsdale", + "state": "Illinois" + }, + { + "city": "Hitchcock", + "state": "Texas" + }, + { + "city": "Hobart", + "state": "Washington" + }, + { + "city": "Hobart", + "state": "Indiana" + }, + { + "city": "Hobbs", + "state": "New Mexico" + }, + { + "city": "Hobe Sound", + "state": "Florida" + }, + { + "city": "Hoboken", + "state": "New Jersey" + }, + { + "city": "Hockessin", + "state": "Delaware" + }, + { + "city": "Hoffman Estates", + "state": "Illinois" + }, + { + "city": "Holbrook", + "state": "Massachusetts" + }, + { + "city": "Holbrook", + "state": "Massachusetts" + }, + { + "city": "Holbrook", + "state": "New York" + }, + { + "city": "Holden", + "state": "Massachusetts" + }, + { + "city": "Holiday", + "state": "Florida" + }, + { + "city": "Holiday City-Berkeley", + "state": "New Jersey" + }, + { + "city": "Holladay", + "state": "Utah" + }, + { + "city": "Holland", + "state": "Michigan" + }, + { + "city": "Hollins", + "state": "Virginia" + }, + { + "city": "Hollis", + "state": "New Hampshire" + }, + { + "city": "Hollister", + "state": "California" + }, + { + "city": "Holliston", + "state": "Massachusetts" + }, + { + "city": "Holly", + "state": "Michigan" + }, + { + "city": "Holly Hill", + "state": "Florida" + }, + { + "city": "Holly Springs", + "state": "Mississippi" + }, + { + "city": "Holly Springs", + "state": "North Carolina" + }, + { + "city": "Hollywood", + "state": "Florida" + }, + { + "city": "Holmen", + "state": "Wisconsin" + }, + { + "city": "Holt", + "state": "Michigan" + }, + { + "city": "Holtsville", + "state": "New York" + }, + { + "city": "Holualoa", + "state": "Hawaii" + }, + { + "city": "Holyoke", + "state": "Massachusetts" + }, + { + "city": "Home Gardens", + "state": "California" + }, + { + "city": "Homeacre-Lyndora", + "state": "Pennsylvania" + }, + { + "city": "Homeland Park", + "state": "South Carolina" + }, + { + "city": "Homer", + "state": "New York" + }, + { + "city": "Homestead", + "state": "Florida" + }, + { + "city": "Homestead Meadows South", + "state": "Texas" + }, + { + "city": "Homewood", + "state": "Alabama" + }, + { + "city": "Homewood", + "state": "Illinois" + }, + { + "city": "Homosassa Springs", + "state": "Florida" + }, + { + "city": "Hondo", + "state": "Texas" + }, + { + "city": "Honolulu", + "state": "Hawaii" + }, + { + "city": "Hooksett", + "state": "New Hampshire" + }, + { + "city": "Hoosick", + "state": "New York" + }, + { + "city": "Hoover", + "state": "Alabama" + }, + { + "city": "Hopatcong", + "state": "New Jersey" + }, + { + "city": "Hope", + "state": "Arkansas" + }, + { + "city": "Hope Mills", + "state": "North Carolina" + }, + { + "city": "Hopewell", + "state": "Virginia" + }, + { + "city": "Hopkins", + "state": "Minnesota" + }, + { + "city": "Hopkinsville", + "state": "Kentucky" + }, + { + "city": "Hopkinton", + "state": "Massachusetts" + }, + { + "city": "Hopkinton", + "state": "Rhode Island" + }, + { + "city": "Hoquiam", + "state": "Washington" + }, + { + "city": "Horn Lake", + "state": "Mississippi" + }, + { + "city": "Hornell", + "state": "New York" + }, + { + "city": "Horseheads", + "state": "New York" + }, + { + "city": "Horseheads", + "state": "New York" + }, + { + "city": "Horsham", + "state": "Pennsylvania" + }, + { + "city": "Hot Springs", + "state": "Arkansas" + }, + { + "city": "Hot Springs Village", + "state": "Arkansas" + }, + { + "city": "Houghton", + "state": "Michigan" + }, + { + "city": "Houlton", + "state": "Maine" + }, + { + "city": "Houma", + "state": "Louisiana" + }, + { + "city": "Houston", + "state": "Texas" + }, + { + "city": "Howard", + "state": "Wisconsin" + }, + { + "city": "Howell", + "state": "Michigan" + }, + { + "city": "Howland Center", + "state": "Ohio" + }, + { + "city": "Hubbard", + "state": "Ohio" + }, + { + "city": "Huber Heights", + "state": "Ohio" + }, + { + "city": "Hudson", + "state": "Ohio" + }, + { + "city": "Hudson", + "state": "New York" + }, + { + "city": "Hudson", + "state": "Wisconsin" + }, + { + "city": "Hudson", + "state": "Wisconsin" + }, + { + "city": "Hudson", + "state": "Massachusetts" + }, + { + "city": "Hudson", + "state": "Massachusetts" + }, + { + "city": "Hudson", + "state": "New Hampshire" + }, + { + "city": "Hudson", + "state": "New Hampshire" + }, + { + "city": "Hudson", + "state": "Florida" + }, + { + "city": "Hudson Falls", + "state": "New York" + }, + { + "city": "Hudsonville", + "state": "Michigan" + }, + { + "city": "Hueytown", + "state": "Alabama" + }, + { + "city": "Hugo", + "state": "Minnesota" + }, + { + "city": "Hull", + "state": "Massachusetts" + }, + { + "city": "Hull", + "state": "Massachusetts" + }, + { + "city": "Humble", + "state": "Texas" + }, + { + "city": "Humboldt", + "state": "Tennessee" + }, + { + "city": "Hunters Creek", + "state": "Florida" + }, + { + "city": "Huntersville", + "state": "North Carolina" + }, + { + "city": "Huntingdon", + "state": "Pennsylvania" + }, + { + "city": "Huntington", + "state": "New York" + }, + { + "city": "Huntington", + "state": "New York" + }, + { + "city": "Huntington", + "state": "Virginia" + }, + { + "city": "Huntington", + "state": "West Virginia" + }, + { + "city": "Huntington", + "state": "Indiana" + }, + { + "city": "Huntington Beach", + "state": "California" + }, + { + "city": "Huntington Park", + "state": "California" + }, + { + "city": "Huntington Station", + "state": "New York" + }, + { + "city": "Huntington Woods", + "state": "Michigan" + }, + { + "city": "Huntsville", + "state": "Alabama" + }, + { + "city": "Huntsville", + "state": "Texas" + }, + { + "city": "Hurley", + "state": "New York" + }, + { + "city": "Huron", + "state": "Ohio" + }, + { + "city": "Huron", + "state": "South Dakota" + }, + { + "city": "Huron", + "state": "California" + }, + { + "city": "Hurricane", + "state": "Utah" + }, + { + "city": "Hurst", + "state": "Texas" + }, + { + "city": "Hutchinson", + "state": "Kansas" + }, + { + "city": "Hutchinson", + "state": "Minnesota" + }, + { + "city": "Hyattsville", + "state": "Maryland" + }, + { + "city": "Hybla Valley", + "state": "Virginia" + }, + { + "city": "Hyde Park", + "state": "New York" + }, + { + "city": "Hyrum", + "state": "Utah" + }, + { + "city": "Idabel", + "state": "Oklahoma" + }, + { + "city": "Idaho Falls", + "state": "Idaho" + }, + { + "city": "Idylwood", + "state": "Virginia" + }, + { + "city": "Ilion", + "state": "New York" + }, + { + "city": "Immokalee", + "state": "Florida" + }, + { + "city": "Imperial", + "state": "California" + }, + { + "city": "Imperial Beach", + "state": "California" + }, + { + "city": "Incline Village-Crystal Bay", + "state": "Nevada" + }, + { + "city": "Independence", + "state": "Oregon" + }, + { + "city": "Independence", + "state": "Missouri" + }, + { + "city": "Independence", + "state": "Ohio" + }, + { + "city": "Independence", + "state": "Iowa" + }, + { + "city": "Independence", + "state": "Kansas" + }, + { + "city": "Independence", + "state": "Kentucky" + }, + { + "city": "Indian Harbour Beach", + "state": "Florida" + }, + { + "city": "Indian Trail", + "state": "North Carolina" + }, + { + "city": "Indiana", + "state": "Pennsylvania" + }, + { + "city": "Indianapolis", + "state": "Indiana" + }, + { + "city": "Indianola", + "state": "Mississippi" + }, + { + "city": "Indianola", + "state": "Iowa" + }, + { + "city": "Indio", + "state": "California" + }, + { + "city": "Ingleside", + "state": "Texas" + }, + { + "city": "Inglewood", + "state": "California" + }, + { + "city": "Inglewood-Finn Hill", + "state": "Washington" + }, + { + "city": "Inkster", + "state": "Michigan" + }, + { + "city": "Interlaken", + "state": "California" + }, + { + "city": "International Falls", + "state": "Minnesota" + }, + { + "city": "Inver Grove Heights", + "state": "Minnesota" + }, + { + "city": "Inverness", + "state": "Florida" + }, + { + "city": "Inverness", + "state": "Illinois" + }, + { + "city": "Inwood", + "state": "Florida" + }, + { + "city": "Inwood", + "state": "New York" + }, + { + "city": "Iola", + "state": "Kansas" + }, + { + "city": "Iona", + "state": "Florida" + }, + { + "city": "Ione", + "state": "California" + }, + { + "city": "Ionia", + "state": "Michigan" + }, + { + "city": "Iowa City", + "state": "Iowa" + }, + { + "city": "Iowa Park", + "state": "Texas" + }, + { + "city": "Ipswich", + "state": "Massachusetts" + }, + { + "city": "Irmo", + "state": "South Carolina" + }, + { + "city": "Iron Mountain", + "state": "Michigan" + }, + { + "city": "Irondale", + "state": "Alabama" + }, + { + "city": "Irondale", + "state": "Georgia" + }, + { + "city": "Irondequoit", + "state": "New York" + }, + { + "city": "Irondequoit", + "state": "New York" + }, + { + "city": "Ironton", + "state": "Ohio" + }, + { + "city": "Ironwood", + "state": "Michigan" + }, + { + "city": "Irvine", + "state": "California" + }, + { + "city": "Irving", + "state": "Texas" + }, + { + "city": "Irvington", + "state": "New Jersey" + }, + { + "city": "Irvington", + "state": "New York" + }, + { + "city": "Iselin", + "state": "New Jersey" + }, + { + "city": "Ishpeming", + "state": "Michigan" + }, + { + "city": "Isla Vista", + "state": "California" + }, + { + "city": "Islamorada", + "state": "Florida" + }, + { + "city": "Island Lake", + "state": "Illinois" + }, + { + "city": "Islip", + "state": "New York" + }, + { + "city": "Islip", + "state": "New York" + }, + { + "city": "Issaquah", + "state": "Washington" + }, + { + "city": "Itasca", + "state": "Illinois" + }, + { + "city": "Ithaca", + "state": "New York" + }, + { + "city": "Ithaca", + "state": "New York" + }, + { + "city": "Ives Estates", + "state": "Florida" + }, + { + "city": "Jacinto City", + "state": "Texas" + }, + { + "city": "Jackson", + "state": "Tennessee" + }, + { + "city": "Jackson", + "state": "Ohio" + }, + { + "city": "Jackson", + "state": "Wyoming" + }, + { + "city": "Jackson", + "state": "Michigan" + }, + { + "city": "Jackson", + "state": "Mississippi" + }, + { + "city": "Jackson", + "state": "Missouri" + }, + { + "city": "Jacksonville", + "state": "Alabama" + }, + { + "city": "Jacksonville", + "state": "Arkansas" + }, + { + "city": "Jacksonville", + "state": "Florida" + }, + { + "city": "Jacksonville", + "state": "Illinois" + }, + { + "city": "Jacksonville", + "state": "North Carolina" + }, + { + "city": "Jacksonville", + "state": "Texas" + }, + { + "city": "Jacksonville Beach", + "state": "Florida" + }, + { + "city": "Jamesburg", + "state": "New Jersey" + }, + { + "city": "Jamestown", + "state": "North Dakota" + }, + { + "city": "Jamestown", + "state": "New York" + }, + { + "city": "Janesville", + "state": "Wisconsin" + }, + { + "city": "Jasmine Estates", + "state": "Florida" + }, + { + "city": "Jasper", + "state": "Alabama" + }, + { + "city": "Jasper", + "state": "Indiana" + }, + { + "city": "Jasper", + "state": "Texas" + }, + { + "city": "Jeannette", + "state": "Pennsylvania" + }, + { + "city": "Jefferson", + "state": "Wisconsin" + }, + { + "city": "Jefferson", + "state": "Virginia" + }, + { + "city": "Jefferson", + "state": "Louisiana" + }, + { + "city": "Jefferson City", + "state": "Missouri" + }, + { + "city": "Jefferson City", + "state": "Tennessee" + }, + { + "city": "Jefferson Hills", + "state": "Pennsylvania" + }, + { + "city": "Jefferson Valley-Yorktown", + "state": "New York" + }, + { + "city": "Jeffersontown", + "state": "Kentucky" + }, + { + "city": "Jeffersonville", + "state": "Indiana" + }, + { + "city": "Jenison", + "state": "Michigan" + }, + { + "city": "Jenks", + "state": "Oklahoma" + }, + { + "city": "Jennings", + "state": "Louisiana" + }, + { + "city": "Jennings", + "state": "Missouri" + }, + { + "city": "Jennings Lodge", + "state": "Oregon" + }, + { + "city": "Jensen Beach", + "state": "Florida" + }, + { + "city": "Jericho", + "state": "New York" + }, + { + "city": "Jerome", + "state": "Idaho" + }, + { + "city": "Jersey City", + "state": "New Jersey" + }, + { + "city": "Jersey Village", + "state": "Texas" + }, + { + "city": "Jerseyville", + "state": "Illinois" + }, + { + "city": "Jessup", + "state": "Maryland" + }, + { + "city": "Jesup", + "state": "Georgia" + }, + { + "city": "Johnson City", + "state": "New York" + }, + { + "city": "Johnson City", + "state": "Tennessee" + }, + { + "city": "Johnston", + "state": "Rhode Island" + }, + { + "city": "Johnston", + "state": "Iowa" + }, + { + "city": "Johnstown", + "state": "New York" + }, + { + "city": "Johnstown", + "state": "New York" + }, + { + "city": "Johnstown", + "state": "Pennsylvania" + }, + { + "city": "Joliet", + "state": "Illinois" + }, + { + "city": "Jollyville", + "state": "Texas" + }, + { + "city": "Jonesboro", + "state": "Arkansas" + }, + { + "city": "Joplin", + "state": "Missouri" + }, + { + "city": "Joppatowne", + "state": "Maryland" + }, + { + "city": "Junction City", + "state": "Kansas" + }, + { + "city": "Juneau and", + "state": "Alaska" + }, + { + "city": "Jupiter", + "state": "Florida" + }, + { + "city": "Justice", + "state": "Illinois" + }, + { + "city": "Kahului", + "state": "Hawaii" + }, + { + "city": "Kailua", + "state": "Hawaii" + }, + { + "city": "Kailua", + "state": "Hawaii" + }, + { + "city": "Kalamazoo", + "state": "Michigan" + }, + { + "city": "Kalaoa", + "state": "Hawaii" + }, + { + "city": "Kalispell", + "state": "Montana" + }, + { + "city": "Kaneohe", + "state": "Hawaii" + }, + { + "city": "Kaneohe Station", + "state": "Hawaii" + }, + { + "city": "Kankakee", + "state": "Illinois" + }, + { + "city": "Kannapolis", + "state": "North Carolina" + }, + { + "city": "Kansas City", + "state": "Missouri" + }, + { + "city": "Kansas City", + "state": "Kansas" + }, + { + "city": "Kapaa", + "state": "Hawaii" + }, + { + "city": "Katy", + "state": "Texas" + }, + { + "city": "Kaufman", + "state": "Texas" + }, + { + "city": "Kaukauna", + "state": "Wisconsin" + }, + { + "city": "Kaysville", + "state": "Utah" + }, + { + "city": "Keansburg", + "state": "New Jersey" + }, + { + "city": "Kearney", + "state": "Nebraska" + }, + { + "city": "Kearns", + "state": "Utah" + }, + { + "city": "Kearny", + "state": "New Jersey" + }, + { + "city": "Keene", + "state": "New Hampshire" + }, + { + "city": "Keizer", + "state": "Oregon" + }, + { + "city": "Keller", + "state": "Texas" + }, + { + "city": "Kelso", + "state": "Washington" + }, + { + "city": "Kemp Mill", + "state": "Maryland" + }, + { + "city": "Ken Caryl", + "state": "Colorado" + }, + { + "city": "Kenai", + "state": "Alaska" + }, + { + "city": "Kendale Lakes", + "state": "Florida" + }, + { + "city": "Kendall", + "state": "Florida" + }, + { + "city": "Kendall Park", + "state": "New Jersey" + }, + { + "city": "Kendall West", + "state": "Florida" + }, + { + "city": "Kendallville", + "state": "Indiana" + }, + { + "city": "Kenilworth", + "state": "New Jersey" + }, + { + "city": "Kenmore", + "state": "New York" + }, + { + "city": "Kenmore", + "state": "Washington" + }, + { + "city": "Kennebunk", + "state": "Maine" + }, + { + "city": "Kennedy Township", + "state": "Pennsylvania" + }, + { + "city": "Kenner", + "state": "Louisiana" + }, + { + "city": "Kennesaw", + "state": "Georgia" + }, + { + "city": "Kennett", + "state": "Missouri" + }, + { + "city": "Kennewick", + "state": "Washington" + }, + { + "city": "Kenosha", + "state": "Wisconsin" + }, + { + "city": "Kensington", + "state": "Connecticut" + }, + { + "city": "Kent", + "state": "Washington" + }, + { + "city": "Kent", + "state": "Ohio" + }, + { + "city": "Kent", + "state": "New York" + }, + { + "city": "Kentfield", + "state": "California" + }, + { + "city": "Kenton", + "state": "Ohio" + }, + { + "city": "Kentwood", + "state": "Michigan" + }, + { + "city": "Kenwood", + "state": "Ohio" + }, + { + "city": "Keokuk", + "state": "Iowa" + }, + { + "city": "Kerman", + "state": "California" + }, + { + "city": "Kernersville", + "state": "North Carolina" + }, + { + "city": "Kerrville", + "state": "Texas" + }, + { + "city": "Ketchikan", + "state": "Alaska" + }, + { + "city": "Kettering", + "state": "Maryland" + }, + { + "city": "Kettering", + "state": "Ohio" + }, + { + "city": "Kewanee", + "state": "Illinois" + }, + { + "city": "Key Biscayne", + "state": "Florida" + }, + { + "city": "Key Largo", + "state": "Florida" + }, + { + "city": "Key West", + "state": "Florida" + }, + { + "city": "Keyport", + "state": "New Jersey" + }, + { + "city": "Keystone", + "state": "Florida" + }, + { + "city": "Kihei", + "state": "Hawaii" + }, + { + "city": "Kilgore", + "state": "Texas" + }, + { + "city": "Killeen", + "state": "Texas" + }, + { + "city": "Killingly", + "state": "Connecticut" + }, + { + "city": "Killingworth", + "state": "Connecticut" + }, + { + "city": "Kimberly", + "state": "Wisconsin" + }, + { + "city": "Kinderhook", + "state": "New York" + }, + { + "city": "King City", + "state": "California" + }, + { + "city": "King of Prussia", + "state": "Pennsylvania" + }, + { + "city": "Kingman", + "state": "Arizona" + }, + { + "city": "Kings Grant", + "state": "North Carolina" + }, + { + "city": "Kings Mountain", + "state": "North Carolina" + }, + { + "city": "Kings Park", + "state": "New York" + }, + { + "city": "Kings Point", + "state": "Florida" + }, + { + "city": "Kingsburg", + "state": "California" + }, + { + "city": "Kingsbury", + "state": "New York" + }, + { + "city": "Kingsgate", + "state": "Washington" + }, + { + "city": "Kingsland", + "state": "Georgia" + }, + { + "city": "Kingsport", + "state": "Tennessee" + }, + { + "city": "Kingston", + "state": "Pennsylvania" + }, + { + "city": "Kingston", + "state": "New York" + }, + { + "city": "Kingston", + "state": "Massachusetts" + }, + { + "city": "Kingsville", + "state": "Texas" + }, + { + "city": "Kinnelon", + "state": "New Jersey" + }, + { + "city": "Kinston", + "state": "North Carolina" + }, + { + "city": "Kirby", + "state": "Texas" + }, + { + "city": "Kirkland", + "state": "Washington" + }, + { + "city": "Kirkland", + "state": "New York" + }, + { + "city": "Kirksville", + "state": "Missouri" + }, + { + "city": "Kirkwood", + "state": "Missouri" + }, + { + "city": "Kirtland", + "state": "New Mexico" + }, + { + "city": "Kirtland", + "state": "Ohio" + }, + { + "city": "Kiryas Joel", + "state": "New York" + }, + { + "city": "Kissimmee", + "state": "Florida" + }, + { + "city": "Kittery", + "state": "Maine" + }, + { + "city": "Klamath Falls", + "state": "Oregon" + }, + { + "city": "Knik-Fairview", + "state": "Alaska" + }, + { + "city": "Knoxville", + "state": "Iowa" + }, + { + "city": "Knoxville", + "state": "Tennessee" + }, + { + "city": "Kodiak", + "state": "Alaska" + }, + { + "city": "Kokomo", + "state": "Indiana" + }, + { + "city": "Kosciusko", + "state": "Mississippi" + }, + { + "city": "Kulpsville", + "state": "Pennsylvania" + }, + { + "city": "La Canada Flintridge", + "state": "California" + }, + { + "city": "La Crescenta-Montrose", + "state": "California" + }, + { + "city": "La Crosse", + "state": "Wisconsin" + }, + { + "city": "La Fayette", + "state": "Georgia" + }, + { + "city": "La Feria", + "state": "Texas" + }, + { + "city": "La Follette", + "state": "Tennessee" + }, + { + "city": "La Grande", + "state": "Oregon" + }, + { + "city": "La Grange", + "state": "New York" + }, + { + "city": "La Grange", + "state": "Illinois" + }, + { + "city": "La Grange Park", + "state": "Illinois" + }, + { + "city": "La Habra", + "state": "California" + }, + { + "city": "La Homa", + "state": "Texas" + }, + { + "city": "La Junta", + "state": "Colorado" + }, + { + "city": "La Marque", + "state": "Texas" + }, + { + "city": "La Mesa", + "state": "California" + }, + { + "city": "La Mirada", + "state": "California" + }, + { + "city": "La Palma", + "state": "California" + }, + { + "city": "La Plata", + "state": "Maryland" + }, + { + "city": "La Porte", + "state": "Indiana" + }, + { + "city": "La Porte", + "state": "Texas" + }, + { + "city": "La Presa", + "state": "California" + }, + { + "city": "La Puente", + "state": "California" + }, + { + "city": "La Quinta", + "state": "California" + }, + { + "city": "La Riviera", + "state": "California" + }, + { + "city": "La Salle", + "state": "Illinois" + }, + { + "city": "La Vergne", + "state": "Tennessee" + }, + { + "city": "La Verne", + "state": "California" + }, + { + "city": "La Vista", + "state": "Nebraska" + }, + { + "city": "Lacey", + "state": "Washington" + }, + { + "city": "Lackawanna", + "state": "New York" + }, + { + "city": "Lackland AFB", + "state": "Texas" + }, + { + "city": "Lacombe", + "state": "Louisiana" + }, + { + "city": "Laconia", + "state": "New Hampshire" + }, + { + "city": "Ladera Heights", + "state": "California" + }, + { + "city": "Ladson", + "state": "South Carolina" + }, + { + "city": "Ladue", + "state": "Missouri" + }, + { + "city": "Lady Lake", + "state": "Florida" + }, + { + "city": "Lafayette", + "state": "Colorado" + }, + { + "city": "Lafayette", + "state": "Louisiana" + }, + { + "city": "Lafayette", + "state": "Indiana" + }, + { + "city": "Lafayette", + "state": "California" + }, + { + "city": "LaGrange", + "state": "Georgia" + }, + { + "city": "Laguna", + "state": "California" + }, + { + "city": "Laguna Beach", + "state": "California" + }, + { + "city": "Laguna Hills", + "state": "California" + }, + { + "city": "Laguna Niguel", + "state": "California" + }, + { + "city": "Laguna West-Lakeside", + "state": "California" + }, + { + "city": "Laguna Woods", + "state": "California" + }, + { + "city": "Lahaina", + "state": "Hawaii" + }, + { + "city": "Lake Arbor", + "state": "Maryland" + }, + { + "city": "Lake Arrowhead", + "state": "California" + }, + { + "city": "Lake Barcroft", + "state": "Virginia" + }, + { + "city": "Lake Bluff", + "state": "Illinois" + }, + { + "city": "Lake Butter", + "state": "Florida" + }, + { + "city": "Lake Carmel", + "state": "New York" + }, + { + "city": "Lake Charles", + "state": "Louisiana" + }, + { + "city": "Lake City", + "state": "Florida" + }, + { + "city": "Lake City", + "state": "South Carolina" + }, + { + "city": "Lake Dallas", + "state": "Texas" + }, + { + "city": "Lake Elmo", + "state": "Minnesota" + }, + { + "city": "Lake Elsinore", + "state": "California" + }, + { + "city": "Lake Forest", + "state": "California" + }, + { + "city": "Lake Forest", + "state": "Illinois" + }, + { + "city": "Lake Forest Park", + "state": "Washington" + }, + { + "city": "Lake Geneva", + "state": "Wisconsin" + }, + { + "city": "Lake Grove", + "state": "New York" + }, + { + "city": "Lake Havasu City", + "state": "Arizona" + }, + { + "city": "Lake in the Hills", + "state": "Illinois" + }, + { + "city": "Lake Jackson", + "state": "Texas" + }, + { + "city": "Lake Lorraine", + "state": "Florida" + }, + { + "city": "Lake Los Angeles", + "state": "California" + }, + { + "city": "Lake Lucerne", + "state": "Florida" + }, + { + "city": "Lake Magdalene", + "state": "Florida" + }, + { + "city": "Lake Mary", + "state": "Florida" + }, + { + "city": "Lake Mohawk", + "state": "New Jersey" + }, + { + "city": "Lake Monticello", + "state": "Virginia" + }, + { + "city": "Lake Morton-Berrydale", + "state": "Washington" + }, + { + "city": "Lake Oswego", + "state": "Oregon" + }, + { + "city": "Lake Park", + "state": "Florida" + }, + { + "city": "Lake Ridge", + "state": "Virginia" + }, + { + "city": "Lake Ronkonkoma", + "state": "New York" + }, + { + "city": "Lake Shore", + "state": "Maryland" + }, + { + "city": "Lake Shore", + "state": "Washington" + }, + { + "city": "Lake St. Louis", + "state": "Missouri" + }, + { + "city": "Lake Station", + "state": "Indiana" + }, + { + "city": "Lake Stevens", + "state": "Washington" + }, + { + "city": "Lake Wales", + "state": "Florida" + }, + { + "city": "Lake Worth", + "state": "Florida" + }, + { + "city": "Lake Worth Corridor", + "state": "Florida" + }, + { + "city": "Lake Zurich", + "state": "Illinois" + }, + { + "city": "Lakeland", + "state": "Florida" + }, + { + "city": "Lakeland", + "state": "Tennessee" + }, + { + "city": "Lakeland Highlands", + "state": "Florida" + }, + { + "city": "Lakeland North", + "state": "Washington" + }, + { + "city": "Lakeland South", + "state": "Washington" + }, + { + "city": "Lakes", + "state": "Alaska" + }, + { + "city": "Lakes by the Bay", + "state": "Florida" + }, + { + "city": "Lakes of the Four Seasons", + "state": "Indiana" + }, + { + "city": "Lakeside", + "state": "Florida" + }, + { + "city": "Lakeside", + "state": "California" + }, + { + "city": "Lakeside", + "state": "Virginia" + }, + { + "city": "Lakeville", + "state": "Minnesota" + }, + { + "city": "Lakeville", + "state": "Massachusetts" + }, + { + "city": "Lakeway", + "state": "Texas" + }, + { + "city": "Lakewood", + "state": "Ohio" + }, + { + "city": "Lakewood", + "state": "New Jersey" + }, + { + "city": "Lakewood", + "state": "California" + }, + { + "city": "Lakewood", + "state": "Colorado" + }, + { + "city": "Lakewood", + "state": "Washington" + }, + { + "city": "Lakewood Park", + "state": "Florida" + }, + { + "city": "Lamar", + "state": "Colorado" + }, + { + "city": "Lambertville", + "state": "Michigan" + }, + { + "city": "Lamesa", + "state": "Texas" + }, + { + "city": "Lamont", + "state": "California" + }, + { + "city": "Lampasas", + "state": "Texas" + }, + { + "city": "Lancaster", + "state": "Texas" + }, + { + "city": "Lancaster", + "state": "South Carolina" + }, + { + "city": "Lancaster", + "state": "Pennsylvania" + }, + { + "city": "Lancaster", + "state": "Ohio" + }, + { + "city": "Lancaster", + "state": "New York" + }, + { + "city": "Lancaster", + "state": "Massachusetts" + }, + { + "city": "Lancaster", + "state": "New York" + }, + { + "city": "Lancaster", + "state": "California" + }, + { + "city": "Land O’ Lakes", + "state": "Florida" + }, + { + "city": "Landen", + "state": "Ohio" + }, + { + "city": "Lander", + "state": "Wyoming" + }, + { + "city": "Lanett", + "state": "Alabama" + }, + { + "city": "Langley Park", + "state": "Maryland" + }, + { + "city": "Lanham-Seabrook", + "state": "Maryland" + }, + { + "city": "Lansdale", + "state": "Pennsylvania" + }, + { + "city": "Lansdowne", + "state": "Pennsylvania" + }, + { + "city": "Lansdowne-Baltimore Highlands", + "state": "Maryland" + }, + { + "city": "Lansing", + "state": "Kansas" + }, + { + "city": "Lansing", + "state": "Illinois" + }, + { + "city": "Lansing", + "state": "New York" + }, + { + "city": "Lansing", + "state": "Michigan" + }, + { + "city": "Lantana", + "state": "Florida" + }, + { + "city": "Lapeer", + "state": "Michigan" + }, + { + "city": "Laplace", + "state": "Louisiana" + }, + { + "city": "Laramie", + "state": "Wyoming" + }, + { + "city": "Larchmont", + "state": "New York" + }, + { + "city": "Laredo", + "state": "Texas" + }, + { + "city": "Largo", + "state": "Maryland" + }, + { + "city": "Largo", + "state": "Florida" + }, + { + "city": "Larkfield-Wikiup", + "state": "California" + }, + { + "city": "Larkspur", + "state": "California" + }, + { + "city": "Larose", + "state": "Louisiana" + }, + { + "city": "Las Cruces", + "state": "New Mexico" + }, + { + "city": "Las Vegas", + "state": "New Mexico" + }, + { + "city": "Las Vegas", + "state": "Nevada" + }, + { + "city": "Lathrop", + "state": "California" + }, + { + "city": "Latrobe", + "state": "Pennsylvania" + }, + { + "city": "Lauderdale Lakes", + "state": "Florida" + }, + { + "city": "Lauderhill", + "state": "Florida" + }, + { + "city": "Laughlin", + "state": "Nevada" + }, + { + "city": "Laurel", + "state": "Mississippi" + }, + { + "city": "Laurel", + "state": "Montana" + }, + { + "city": "Laurel", + "state": "Florida" + }, + { + "city": "Laurel", + "state": "Maryland" + }, + { + "city": "Laurel", + "state": "Virginia" + }, + { + "city": "Laurel Bay", + "state": "South Carolina" + }, + { + "city": "Laurence Harbor", + "state": "New Jersey" + }, + { + "city": "Laurens", + "state": "South Carolina" + }, + { + "city": "Laurinburg", + "state": "North Carolina" + }, + { + "city": "Lawndale", + "state": "California" + }, + { + "city": "Lawrence", + "state": "Kansas" + }, + { + "city": "Lawrence", + "state": "Indiana" + }, + { + "city": "Lawrence", + "state": "New York" + }, + { + "city": "Lawrence", + "state": "Massachusetts" + }, + { + "city": "Lawrenceburg", + "state": "Tennessee" + }, + { + "city": "Lawrenceburg", + "state": "Kentucky" + }, + { + "city": "Lawrenceville", + "state": "Georgia" + }, + { + "city": "Lawton", + "state": "Oklahoma" + }, + { + "city": "Layton", + "state": "Utah" + }, + { + "city": "Le Mars", + "state": "Iowa" + }, + { + "city": "Le Ray", + "state": "New York" + }, + { + "city": "Le Roy", + "state": "New York" + }, + { + "city": "Lea Hill", + "state": "Washington" + }, + { + "city": "Leacock-Leola-Bareville", + "state": "Pennsylvania" + }, + { + "city": "League City", + "state": "Texas" + }, + { + "city": "Leander", + "state": "Texas" + }, + { + "city": "Leavenworth", + "state": "Kansas" + }, + { + "city": "Leawood", + "state": "Kansas" + }, + { + "city": "Lebanon", + "state": "Indiana" + }, + { + "city": "Lebanon", + "state": "Connecticut" + }, + { + "city": "Lebanon", + "state": "Pennsylvania" + }, + { + "city": "Lebanon", + "state": "Tennessee" + }, + { + "city": "Lebanon", + "state": "Oregon" + }, + { + "city": "Lebanon", + "state": "Ohio" + }, + { + "city": "Lebanon", + "state": "New Hampshire" + }, + { + "city": "Lebanon", + "state": "Missouri" + }, + { + "city": "Ledyard", + "state": "Connecticut" + }, + { + "city": "Lee", + "state": "New York" + }, + { + "city": "Lee’s Summit", + "state": "Missouri" + }, + { + "city": "Leeds", + "state": "Alabama" + }, + { + "city": "Leesburg", + "state": "Florida" + }, + { + "city": "Leesburg", + "state": "Virginia" + }, + { + "city": "Leesville", + "state": "Louisiana" + }, + { + "city": "Lehi", + "state": "Utah" + }, + { + "city": "Lehigh Acres", + "state": "Florida" + }, + { + "city": "Leicester", + "state": "Massachusetts" + }, + { + "city": "Leisure City", + "state": "Florida" + }, + { + "city": "Leisure Village West-Pine Lake Park", + "state": "New Jersey" + }, + { + "city": "Leitchfield", + "state": "Kentucky" + }, + { + "city": "Lemay", + "state": "Missouri" + }, + { + "city": "Lemmon Valley-Golden Valley", + "state": "Nevada" + }, + { + "city": "Lemon Grove", + "state": "California" + }, + { + "city": "Lemont", + "state": "Illinois" + }, + { + "city": "Lemoore", + "state": "California" + }, + { + "city": "Lenexa", + "state": "Kansas" + }, + { + "city": "Lennox", + "state": "California" + }, + { + "city": "Lenoir", + "state": "North Carolina" + }, + { + "city": "Lenoir City", + "state": "Tennessee" + }, + { + "city": "Lenox", + "state": "New York" + }, + { + "city": "Leominster", + "state": "Massachusetts" + }, + { + "city": "Leon Valley", + "state": "Texas" + }, + { + "city": "Leonia", + "state": "New Jersey" + }, + { + "city": "Levelland", + "state": "Texas" + }, + { + "city": "Levittown", + "state": "Pennsylvania" + }, + { + "city": "Levittown", + "state": "New York" + }, + { + "city": "Lewisboro", + "state": "New York" + }, + { + "city": "Lewisburg", + "state": "Tennessee" + }, + { + "city": "Lewiston", + "state": "Maine" + }, + { + "city": "Lewiston", + "state": "New York" + }, + { + "city": "Lewiston", + "state": "Idaho" + }, + { + "city": "Lewistown", + "state": "Pennsylvania" + }, + { + "city": "Lewisville", + "state": "North Carolina" + }, + { + "city": "Lewisville", + "state": "Texas" + }, + { + "city": "Lexington", + "state": "Virginia" + }, + { + "city": "Lexington", + "state": "North Carolina" + }, + { + "city": "Lexington", + "state": "South Carolina" + }, + { + "city": "Lexington", + "state": "Tennessee" + }, + { + "city": "Lexington", + "state": "Massachusetts" + }, + { + "city": "Lexington", + "state": "Nebraska" + }, + { + "city": "Lexington", + "state": "Massachusetts" + }, + { + "city": "Lexington Park", + "state": "Maryland" + }, + { + "city": "Lexington-Fayette", + "state": "Kentucky" + }, + { + "city": "Liberal", + "state": "Kansas" + }, + { + "city": "Liberty", + "state": "Missouri" + }, + { + "city": "Liberty", + "state": "New York" + }, + { + "city": "Liberty", + "state": "Texas" + }, + { + "city": "Libertyville", + "state": "Illinois" + }, + { + "city": "Lighthouse Point", + "state": "Florida" + }, + { + "city": "Lilburn", + "state": "Georgia" + }, + { + "city": "Lima", + "state": "Ohio" + }, + { + "city": "Lincoln", + "state": "Rhode Island" + }, + { + "city": "Lincoln", + "state": "Nebraska" + }, + { + "city": "Lincoln", + "state": "Massachusetts" + }, + { + "city": "Lincoln", + "state": "Illinois" + }, + { + "city": "Lincoln", + "state": "California" + }, + { + "city": "Lincoln City", + "state": "Oregon" + }, + { + "city": "Lincoln Park", + "state": "Michigan" + }, + { + "city": "Lincoln Park", + "state": "New Jersey" + }, + { + "city": "Lincoln Village", + "state": "Ohio" + }, + { + "city": "Lincolnia", + "state": "Virginia" + }, + { + "city": "Lincolnshire", + "state": "Illinois" + }, + { + "city": "Lincolnton", + "state": "North Carolina" + }, + { + "city": "Lincolnwood", + "state": "Illinois" + }, + { + "city": "Lincroft", + "state": "New Jersey" + }, + { + "city": "Linda", + "state": "California" + }, + { + "city": "Linden", + "state": "New Jersey" + }, + { + "city": "Lindenhurst", + "state": "New York" + }, + { + "city": "Lindenhurst", + "state": "Illinois" + }, + { + "city": "Lindenwold", + "state": "New Jersey" + }, + { + "city": "Lindon", + "state": "Utah" + }, + { + "city": "Lindsay", + "state": "California" + }, + { + "city": "Linganore-Bartonsville", + "state": "Maryland" + }, + { + "city": "Linglestown", + "state": "Pennsylvania" + }, + { + "city": "Lino Lakes", + "state": "Minnesota" + }, + { + "city": "Linthicum", + "state": "Maryland" + }, + { + "city": "Linton Hall", + "state": "Virginia" + }, + { + "city": "Linwood", + "state": "New Jersey" + }, + { + "city": "Lionville-Marchwood", + "state": "Pennsylvania" + }, + { + "city": "Lisbon", + "state": "Maine" + }, + { + "city": "Lisbon", + "state": "Wisconsin" + }, + { + "city": "Lisle", + "state": "Illinois" + }, + { + "city": "Litchfield", + "state": "Illinois" + }, + { + "city": "Litchfield", + "state": "Connecticut" + }, + { + "city": "Litchfield", + "state": "Minnesota" + }, + { + "city": "Litchfield", + "state": "New Hampshire" + }, + { + "city": "Lititz", + "state": "Pennsylvania" + }, + { + "city": "Little Canada", + "state": "Minnesota" + }, + { + "city": "Little Chute", + "state": "Wisconsin" + }, + { + "city": "Little Cottonwood Creek Valley", + "state": "Utah" + }, + { + "city": "Little Falls", + "state": "Minnesota" + }, + { + "city": "Little Falls", + "state": "New Jersey" + }, + { + "city": "Little Ferry", + "state": "New Jersey" + }, + { + "city": "Little River", + "state": "South Carolina" + }, + { + "city": "Little Rock", + "state": "Arkansas" + }, + { + "city": "Little Silver", + "state": "New Jersey" + }, + { + "city": "Littlefield", + "state": "Texas" + }, + { + "city": "Littleton", + "state": "Massachusetts" + }, + { + "city": "Littleton", + "state": "Colorado" + }, + { + "city": "Live Oak", + "state": "Florida" + }, + { + "city": "Live Oak", + "state": "California" + }, + { + "city": "Live Oak", + "state": "California" + }, + { + "city": "Live Oak", + "state": "Texas" + }, + { + "city": "Livermore", + "state": "California" + }, + { + "city": "Livingston", + "state": "California" + }, + { + "city": "Livingston", + "state": "Montana" + }, + { + "city": "Livingston", + "state": "New Jersey" + }, + { + "city": "Livonia", + "state": "New York" + }, + { + "city": "Livonia", + "state": "Michigan" + }, + { + "city": "Lloyd", + "state": "New York" + }, + { + "city": "Lochearn", + "state": "Maryland" + }, + { + "city": "Lock Haven", + "state": "Pennsylvania" + }, + { + "city": "Lockhart", + "state": "Florida" + }, + { + "city": "Lockhart", + "state": "Texas" + }, + { + "city": "Lockport", + "state": "Illinois" + }, + { + "city": "Lockport", + "state": "New York" + }, + { + "city": "Lockport", + "state": "New York" + }, + { + "city": "Lodi", + "state": "New Jersey" + }, + { + "city": "Lodi", + "state": "California" + }, + { + "city": "Logan", + "state": "Ohio" + }, + { + "city": "Logan", + "state": "Utah" + }, + { + "city": "Logansport", + "state": "Indiana" + }, + { + "city": "Loma Linda", + "state": "California" + }, + { + "city": "Lombard", + "state": "Illinois" + }, + { + "city": "Lomita", + "state": "California" + }, + { + "city": "Lompoc", + "state": "California" + }, + { + "city": "London", + "state": "Ohio" + }, + { + "city": "Londonderry", + "state": "New Hampshire" + }, + { + "city": "Londonderry", + "state": "New Hampshire" + }, + { + "city": "Londontowne", + "state": "Maryland" + }, + { + "city": "Long Beach", + "state": "California" + }, + { + "city": "Long Beach", + "state": "Mississippi" + }, + { + "city": "Long Beach", + "state": "New York" + }, + { + "city": "Long Branch", + "state": "New Jersey" + }, + { + "city": "Long Grove", + "state": "Illinois" + }, + { + "city": "Longboat Key", + "state": "Florida" + }, + { + "city": "Longmeadow", + "state": "Massachusetts" + }, + { + "city": "Longmeadow", + "state": "Massachusetts" + }, + { + "city": "Longmont", + "state": "Colorado" + }, + { + "city": "Longview", + "state": "Washington" + }, + { + "city": "Longview", + "state": "Texas" + }, + { + "city": "Longwood", + "state": "Florida" + }, + { + "city": "Loomis", + "state": "California" + }, + { + "city": "Lorain", + "state": "Ohio" + }, + { + "city": "Lorton", + "state": "Virginia" + }, + { + "city": "Los Alamitos", + "state": "California" + }, + { + "city": "Los Alamos", + "state": "New Mexico" + }, + { + "city": "Los Altos", + "state": "California" + }, + { + "city": "Los Altos Hills", + "state": "California" + }, + { + "city": "Los Angeles", + "state": "California" + }, + { + "city": "Los Banos", + "state": "California" + }, + { + "city": "Los Gatos", + "state": "California" + }, + { + "city": "Los Lunas", + "state": "New Mexico" + }, + { + "city": "Louisville", + "state": "Mississippi" + }, + { + "city": "Louisville", + "state": "Ohio" + }, + { + "city": "Louisville", + "state": "Colorado" + }, + { + "city": "Louisville", + "state": "Kentucky" + }, + { + "city": "Loveland", + "state": "Colorado" + }, + { + "city": "Loveland", + "state": "Ohio" + }, + { + "city": "Loves Park", + "state": "Illinois" + }, + { + "city": "Lovington", + "state": "New Mexico" + }, + { + "city": "Lowell", + "state": "Massachusetts" + }, + { + "city": "Lowell", + "state": "Indiana" + }, + { + "city": "Lower Allen", + "state": "Pennsylvania" + }, + { + "city": "Lower Burrell", + "state": "Pennsylvania" + }, + { + "city": "Lubbock", + "state": "Texas" + }, + { + "city": "Lucas Valley-Marinwood", + "state": "California" + }, + { + "city": "Ludington", + "state": "Michigan" + }, + { + "city": "Ludlow", + "state": "Massachusetts" + }, + { + "city": "Lufkin", + "state": "Texas" + }, + { + "city": "Lugoff", + "state": "South Carolina" + }, + { + "city": "Luling", + "state": "Louisiana" + }, + { + "city": "Lumberton", + "state": "North Carolina" + }, + { + "city": "Lumberton", + "state": "Texas" + }, + { + "city": "Lunenburg", + "state": "Massachusetts" + }, + { + "city": "Lutherville-Timonium", + "state": "Maryland" + }, + { + "city": "Lutz", + "state": "Florida" + }, + { + "city": "Lynbrook", + "state": "New York" + }, + { + "city": "Lynchburg", + "state": "Virginia" + }, + { + "city": "Lynden", + "state": "Washington" + }, + { + "city": "Lyndhurst", + "state": "Ohio" + }, + { + "city": "Lyndhurst", + "state": "New Jersey" + }, + { + "city": "Lyndon", + "state": "Kentucky" + }, + { + "city": "Lynn", + "state": "Massachusetts" + }, + { + "city": "Lynn Haven", + "state": "Florida" + }, + { + "city": "Lynnfield", + "state": "Massachusetts" + }, + { + "city": "Lynnfield", + "state": "Massachusetts" + }, + { + "city": "Lynnwood", + "state": "Washington" + }, + { + "city": "Lynwood", + "state": "Illinois" + }, + { + "city": "Lynwood", + "state": "California" + }, + { + "city": "Lyons", + "state": "Illinois" + }, + { + "city": "Lysander", + "state": "New York" + }, + { + "city": "Mableton", + "state": "Georgia" + }, + { + "city": "Macedon", + "state": "New York" + }, + { + "city": "Macedonia", + "state": "Ohio" + }, + { + "city": "Machesney Park", + "state": "Illinois" + }, + { + "city": "Macomb", + "state": "Illinois" + }, + { + "city": "Macon", + "state": "Georgia" + }, + { + "city": "Madeira", + "state": "Ohio" + }, + { + "city": "Madera", + "state": "California" + }, + { + "city": "Madera Acres", + "state": "California" + }, + { + "city": "Madison", + "state": "Alabama" + }, + { + "city": "Madison", + "state": "Indiana" + }, + { + "city": "Madison", + "state": "Connecticut" + }, + { + "city": "Madison", + "state": "New Jersey" + }, + { + "city": "Madison", + "state": "Mississippi" + }, + { + "city": "Madison", + "state": "South Dakota" + }, + { + "city": "Madison", + "state": "Wisconsin" + }, + { + "city": "Madison", + "state": "Wisconsin" + }, + { + "city": "Madison Heights", + "state": "Virginia" + }, + { + "city": "Madison Heights", + "state": "Michigan" + }, + { + "city": "Madison Park", + "state": "New Jersey" + }, + { + "city": "Madisonville", + "state": "Kentucky" + }, + { + "city": "Magalia", + "state": "California" + }, + { + "city": "Magna", + "state": "Utah" + }, + { + "city": "Magnolia", + "state": "Arkansas" + }, + { + "city": "Mahopac", + "state": "New York" + }, + { + "city": "Mahtomedi", + "state": "Minnesota" + }, + { + "city": "Maitland", + "state": "Florida" + }, + { + "city": "Makaha", + "state": "Hawaii" + }, + { + "city": "Makakilo City", + "state": "Hawaii" + }, + { + "city": "Makawao", + "state": "Hawaii" + }, + { + "city": "Malden", + "state": "Massachusetts" + }, + { + "city": "Malibu", + "state": "California" + }, + { + "city": "Malone", + "state": "New York" + }, + { + "city": "Malone", + "state": "New York" + }, + { + "city": "Malta", + "state": "New York" + }, + { + "city": "Maltby", + "state": "Washington" + }, + { + "city": "Malvern", + "state": "Arkansas" + }, + { + "city": "Malverne", + "state": "New York" + }, + { + "city": "Mamakating", + "state": "New York" + }, + { + "city": "Mamaroneck", + "state": "New York" + }, + { + "city": "Mamaroneck", + "state": "New York" + }, + { + "city": "Mammoth Lakes", + "state": "California" + }, + { + "city": "Manasquan", + "state": "New Jersey" + }, + { + "city": "Manassas", + "state": "Virginia" + }, + { + "city": "Manassas Park", + "state": "Virginia" + }, + { + "city": "Manchester", + "state": "Tennessee" + }, + { + "city": "Manchester", + "state": "New Hampshire" + }, + { + "city": "Manchester", + "state": "New York" + }, + { + "city": "Manchester", + "state": "Missouri" + }, + { + "city": "Manchester", + "state": "Connecticut" + }, + { + "city": "Mandan", + "state": "North Dakota" + }, + { + "city": "Mandeville", + "state": "Louisiana" + }, + { + "city": "Mango", + "state": "Florida" + }, + { + "city": "Manhasset", + "state": "New York" + }, + { + "city": "Manhattan", + "state": "Kansas" + }, + { + "city": "Manhattan Beach", + "state": "California" + }, + { + "city": "Manistee", + "state": "Michigan" + }, + { + "city": "Manitowoc", + "state": "Wisconsin" + }, + { + "city": "Mankato", + "state": "Minnesota" + }, + { + "city": "Manlius", + "state": "New York" + }, + { + "city": "Manorhaven", + "state": "New York" + }, + { + "city": "Manorville", + "state": "New York" + }, + { + "city": "Mansfield", + "state": "Massachusetts" + }, + { + "city": "Mansfield", + "state": "Connecticut" + }, + { + "city": "Mansfield", + "state": "Texas" + }, + { + "city": "Mansfield", + "state": "Ohio" + }, + { + "city": "Mansfield Center", + "state": "Massachusetts" + }, + { + "city": "Manteca", + "state": "California" + }, + { + "city": "Manteno", + "state": "Illinois" + }, + { + "city": "Mantua", + "state": "Virginia" + }, + { + "city": "Manville", + "state": "New Jersey" + }, + { + "city": "Maple Glen", + "state": "Pennsylvania" + }, + { + "city": "Maple Grove", + "state": "Minnesota" + }, + { + "city": "Maple Heights", + "state": "Ohio" + }, + { + "city": "Maple Valley", + "state": "Washington" + }, + { + "city": "Maplewood", + "state": "Minnesota" + }, + { + "city": "Maplewood", + "state": "Missouri" + }, + { + "city": "Maplewood", + "state": "New Jersey" + }, + { + "city": "Maquoketa", + "state": "Iowa" + }, + { + "city": "Marana", + "state": "Arizona" + }, + { + "city": "Marathon", + "state": "Florida" + }, + { + "city": "Marblehead", + "state": "Massachusetts" + }, + { + "city": "Marblehead", + "state": "Massachusetts" + }, + { + "city": "Marcellus", + "state": "New York" + }, + { + "city": "Marco Island", + "state": "Florida" + }, + { + "city": "Marcy", + "state": "New York" + }, + { + "city": "Marengo", + "state": "Illinois" + }, + { + "city": "Margate", + "state": "Florida" + }, + { + "city": "Margate City", + "state": "New Jersey" + }, + { + "city": "Marianna", + "state": "Florida" + }, + { + "city": "Marietta", + "state": "Georgia" + }, + { + "city": "Marietta", + "state": "Ohio" + }, + { + "city": "Marina", + "state": "California" + }, + { + "city": "Marina del Rey", + "state": "California" + }, + { + "city": "Marinette", + "state": "Wisconsin" + }, + { + "city": "Marion", + "state": "Virginia" + }, + { + "city": "Marion", + "state": "Ohio" + }, + { + "city": "Marion", + "state": "South Carolina" + }, + { + "city": "Marion", + "state": "Arkansas" + }, + { + "city": "Marion", + "state": "Indiana" + }, + { + "city": "Marion", + "state": "Iowa" + }, + { + "city": "Marion", + "state": "Illinois" + }, + { + "city": "Markham", + "state": "Illinois" + }, + { + "city": "Marlborough", + "state": "New York" + }, + { + "city": "Marlborough", + "state": "Massachusetts" + }, + { + "city": "Marlin", + "state": "Texas" + }, + { + "city": "Marlow Heights", + "state": "Maryland" + }, + { + "city": "Marlton", + "state": "Maryland" + }, + { + "city": "Marlton", + "state": "New Jersey" + }, + { + "city": "Marquette", + "state": "Michigan" + }, + { + "city": "Marrero", + "state": "Louisiana" + }, + { + "city": "Marshall", + "state": "Michigan" + }, + { + "city": "Marshall", + "state": "Minnesota" + }, + { + "city": "Marshall", + "state": "Missouri" + }, + { + "city": "Marshall", + "state": "Texas" + }, + { + "city": "Marshalltown", + "state": "Iowa" + }, + { + "city": "Marshfield", + "state": "Massachusetts" + }, + { + "city": "Marshfield", + "state": "Wisconsin" + }, + { + "city": "Martha Lake", + "state": "Washington" + }, + { + "city": "Martin", + "state": "Tennessee" + }, + { + "city": "Martinez", + "state": "Georgia" + }, + { + "city": "Martinez", + "state": "California" + }, + { + "city": "Martins Ferry", + "state": "Ohio" + }, + { + "city": "Martinsburg", + "state": "West Virginia" + }, + { + "city": "Martinsville", + "state": "Virginia" + }, + { + "city": "Martinsville", + "state": "Indiana" + }, + { + "city": "Maryland City", + "state": "Maryland" + }, + { + "city": "Maryland Heights", + "state": "Missouri" + }, + { + "city": "Marysville", + "state": "Michigan" + }, + { + "city": "Marysville", + "state": "California" + }, + { + "city": "Marysville", + "state": "Washington" + }, + { + "city": "Marysville", + "state": "Ohio" + }, + { + "city": "Maryville", + "state": "Tennessee" + }, + { + "city": "Maryville", + "state": "Missouri" + }, + { + "city": "Mashpee", + "state": "Massachusetts" + }, + { + "city": "Mason", + "state": "Michigan" + }, + { + "city": "Mason", + "state": "Ohio" + }, + { + "city": "Mason City", + "state": "Iowa" + }, + { + "city": "Masonboro", + "state": "North Carolina" + }, + { + "city": "Massapequa", + "state": "New York" + }, + { + "city": "Massapequa Park", + "state": "New York" + }, + { + "city": "Massena", + "state": "New York" + }, + { + "city": "Massena", + "state": "New York" + }, + { + "city": "Massillon", + "state": "Ohio" + }, + { + "city": "Mastic", + "state": "New York" + }, + { + "city": "Mastic Beach", + "state": "New York" + }, + { + "city": "Matawan", + "state": "New Jersey" + }, + { + "city": "Mattapoisett", + "state": "Massachusetts" + }, + { + "city": "Matteson", + "state": "Illinois" + }, + { + "city": "Matthews", + "state": "North Carolina" + }, + { + "city": "Mattoon", + "state": "Illinois" + }, + { + "city": "Mattydale", + "state": "New York" + }, + { + "city": "Mauldin", + "state": "South Carolina" + }, + { + "city": "Maumee", + "state": "Ohio" + }, + { + "city": "Maumelle", + "state": "Arkansas" + }, + { + "city": "Mayfield", + "state": "Kentucky" + }, + { + "city": "Mayfield", + "state": "New York" + }, + { + "city": "Mayfield Heights", + "state": "Ohio" + }, + { + "city": "Maynard", + "state": "Massachusetts" + }, + { + "city": "Maynard", + "state": "Massachusetts" + }, + { + "city": "Mays Chapel", + "state": "Maryland" + }, + { + "city": "Maysville", + "state": "Kentucky" + }, + { + "city": "Maywood", + "state": "Illinois" + }, + { + "city": "Maywood", + "state": "California" + }, + { + "city": "Maywood", + "state": "New Jersey" + }, + { + "city": "McAlester", + "state": "Oklahoma" + }, + { + "city": "McAllen", + "state": "Texas" + }, + { + "city": "McCandless Township", + "state": "Pennsylvania" + }, + { + "city": "McComb", + "state": "Mississippi" + }, + { + "city": "McCook", + "state": "Nebraska" + }, + { + "city": "McDonough", + "state": "Georgia" + }, + { + "city": "McFarland", + "state": "California" + }, + { + "city": "McFarland", + "state": "Wisconsin" + }, + { + "city": "McGregor", + "state": "Florida" + }, + { + "city": "McGuire AFB", + "state": "New Jersey" + }, + { + "city": "McHenry", + "state": "Illinois" + }, + { + "city": "McKees Rocks", + "state": "Pennsylvania" + }, + { + "city": "McKeesport", + "state": "Pennsylvania" + }, + { + "city": "McKinleyville", + "state": "California" + }, + { + "city": "McKinney", + "state": "Texas" + }, + { + "city": "McLean", + "state": "Virginia" + }, + { + "city": "McMinnville", + "state": "Tennessee" + }, + { + "city": "McMinnville", + "state": "Oregon" + }, + { + "city": "McPherson", + "state": "Kansas" + }, + { + "city": "Meadow Woods", + "state": "Florida" + }, + { + "city": "Meadville", + "state": "Pennsylvania" + }, + { + "city": "Mebane", + "state": "North Carolina" + }, + { + "city": "Mechanicsburg", + "state": "Pennsylvania" + }, + { + "city": "Mechanicstown", + "state": "New York" + }, + { + "city": "Mechanicsville", + "state": "Virginia" + }, + { + "city": "Medfield", + "state": "Massachusetts" + }, + { + "city": "Medfield", + "state": "Massachusetts" + }, + { + "city": "Medford", + "state": "Massachusetts" + }, + { + "city": "Medford", + "state": "New York" + }, + { + "city": "Medford", + "state": "Oregon" + }, + { + "city": "Medina", + "state": "Ohio" + }, + { + "city": "Medina", + "state": "New York" + }, + { + "city": "Medulla", + "state": "Florida" + }, + { + "city": "Medway", + "state": "Massachusetts" + }, + { + "city": "Mehlville", + "state": "Missouri" + }, + { + "city": "Melbourne", + "state": "Florida" + }, + { + "city": "Melrose", + "state": "Massachusetts" + }, + { + "city": "Melrose Park", + "state": "Florida" + }, + { + "city": "Melrose Park", + "state": "Illinois" + }, + { + "city": "Melville", + "state": "New York" + }, + { + "city": "Melvindale", + "state": "Michigan" + }, + { + "city": "Memphis", + "state": "Florida" + }, + { + "city": "Memphis", + "state": "Tennessee" + }, + { + "city": "Menasha", + "state": "Wisconsin" + }, + { + "city": "Menasha", + "state": "Wisconsin" + }, + { + "city": "Mendon", + "state": "New York" + }, + { + "city": "Mendota", + "state": "California" + }, + { + "city": "Mendota", + "state": "Illinois" + }, + { + "city": "Mendota Heights", + "state": "Minnesota" + }, + { + "city": "Menlo Park", + "state": "California" + }, + { + "city": "Menominee", + "state": "Michigan" + }, + { + "city": "Menomonee Falls", + "state": "Wisconsin" + }, + { + "city": "Menomonie", + "state": "Wisconsin" + }, + { + "city": "Mentone", + "state": "California" + }, + { + "city": "Mentor", + "state": "Ohio" + }, + { + "city": "Mentor-on-the-Lake", + "state": "Ohio" + }, + { + "city": "Mequon", + "state": "Wisconsin" + }, + { + "city": "Meraux", + "state": "Louisiana" + }, + { + "city": "Merced", + "state": "California" + }, + { + "city": "Mercedes", + "state": "Texas" + }, + { + "city": "Mercer Island", + "state": "Washington" + }, + { + "city": "Mercerville-Hamilton Square", + "state": "New Jersey" + }, + { + "city": "Meriden", + "state": "Connecticut" + }, + { + "city": "Meriden", + "state": "Connecticut" + }, + { + "city": "Meridian", + "state": "Idaho" + }, + { + "city": "Meridian", + "state": "Mississippi" + }, + { + "city": "Merriam", + "state": "Kansas" + }, + { + "city": "Merrick", + "state": "New York" + }, + { + "city": "Merrifield", + "state": "Virginia" + }, + { + "city": "Merrill", + "state": "Wisconsin" + }, + { + "city": "Merrillville", + "state": "Indiana" + }, + { + "city": "Merrimac", + "state": "Massachusetts" + }, + { + "city": "Merrimack", + "state": "New Hampshire" + }, + { + "city": "Merritt Island", + "state": "Florida" + }, + { + "city": "Merrydale", + "state": "Louisiana" + }, + { + "city": "Merton", + "state": "Wisconsin" + }, + { + "city": "Mesa", + "state": "Arizona" + }, + { + "city": "Mesquite", + "state": "Nevada" + }, + { + "city": "Mesquite", + "state": "Texas" + }, + { + "city": "Metairie", + "state": "Louisiana" + }, + { + "city": "Methuen", + "state": "Massachusetts" + }, + { + "city": "Metropolis", + "state": "Illinois" + }, + { + "city": "Metuchen", + "state": "New Jersey" + }, + { + "city": "Mexia", + "state": "Texas" + }, + { + "city": "Mexico", + "state": "Missouri" + }, + { + "city": "Miami", + "state": "Florida" + }, + { + "city": "Miami", + "state": "Oklahoma" + }, + { + "city": "Miami Beach", + "state": "Florida" + }, + { + "city": "Miami Lakes", + "state": "Florida" + }, + { + "city": "Miami Shores", + "state": "Florida" + }, + { + "city": "Miami Springs", + "state": "Florida" + }, + { + "city": "Miamisburg", + "state": "Ohio" + }, + { + "city": "Micco", + "state": "Florida" + }, + { + "city": "Michigan City", + "state": "Indiana" + }, + { + "city": "Middle Island", + "state": "New York" + }, + { + "city": "Middle River", + "state": "Maryland" + }, + { + "city": "Middle Valley", + "state": "Tennessee" + }, + { + "city": "Middleborough", + "state": "Massachusetts" + }, + { + "city": "Middleborough Center", + "state": "Massachusetts" + }, + { + "city": "Middleburg", + "state": "Florida" + }, + { + "city": "Middleburg Heights", + "state": "Ohio" + }, + { + "city": "Middlebury", + "state": "Vermont" + }, + { + "city": "Middlebury", + "state": "Vermont" + }, + { + "city": "Middlebury", + "state": "Connecticut" + }, + { + "city": "Middlesborough", + "state": "Kentucky" + }, + { + "city": "Middlesex", + "state": "New Jersey" + }, + { + "city": "Middleton", + "state": "Massachusetts" + }, + { + "city": "Middleton", + "state": "Wisconsin" + }, + { + "city": "Middletown", + "state": "Ohio" + }, + { + "city": "Middletown", + "state": "Pennsylvania" + }, + { + "city": "Middletown", + "state": "Pennsylvania" + }, + { + "city": "Middletown", + "state": "Rhode Island" + }, + { + "city": "Middletown", + "state": "New York" + }, + { + "city": "Middletown", + "state": "Connecticut" + }, + { + "city": "Middletown", + "state": "Connecticut" + }, + { + "city": "Middletown", + "state": "Delaware" + }, + { + "city": "Midland", + "state": "Michigan" + }, + { + "city": "Midland", + "state": "Texas" + }, + { + "city": "Midland", + "state": "Washington" + }, + { + "city": "Midland Park", + "state": "New Jersey" + }, + { + "city": "Midlothian", + "state": "Illinois" + }, + { + "city": "Midlothian", + "state": "Texas" + }, + { + "city": "Midvale", + "state": "Utah" + }, + { + "city": "Midwest City", + "state": "Oklahoma" + }, + { + "city": "Milan", + "state": "Tennessee" + }, + { + "city": "Miles City", + "state": "Montana" + }, + { + "city": "Milford", + "state": "New Hampshire" + }, + { + "city": "Milford", + "state": "New Hampshire" + }, + { + "city": "Milford", + "state": "Michigan" + }, + { + "city": "Milford", + "state": "Massachusetts" + }, + { + "city": "Milford", + "state": "Massachusetts" + }, + { + "city": "Milford", + "state": "Delaware" + }, + { + "city": "Milford", + "state": "Connecticut" + }, + { + "city": "Milford", + "state": "Connecticut" + }, + { + "city": "Milford", + "state": "Ohio" + }, + { + "city": "Milford Mill", + "state": "Maryland" + }, + { + "city": "Mililani Town", + "state": "Hawaii" + }, + { + "city": "Mill Creek", + "state": "Washington" + }, + { + "city": "Mill Plain", + "state": "Washington" + }, + { + "city": "Mill Valley", + "state": "California" + }, + { + "city": "Millbrae", + "state": "California" + }, + { + "city": "Millbrook", + "state": "Alabama" + }, + { + "city": "Millburn", + "state": "New Jersey" + }, + { + "city": "Millbury", + "state": "Massachusetts" + }, + { + "city": "Millcreek", + "state": "Utah" + }, + { + "city": "Milledgeville", + "state": "Georgia" + }, + { + "city": "Miller Place", + "state": "New York" + }, + { + "city": "Millersville", + "state": "Pennsylvania" + }, + { + "city": "Millington", + "state": "Tennessee" + }, + { + "city": "Millis", + "state": "Massachusetts" + }, + { + "city": "Milltown", + "state": "New Jersey" + }, + { + "city": "Millville", + "state": "New Jersey" + }, + { + "city": "Milo", + "state": "New York" + }, + { + "city": "Milpitas", + "state": "California" + }, + { + "city": "Milton", + "state": "Florida" + }, + { + "city": "Milton", + "state": "New York" + }, + { + "city": "Milton", + "state": "Massachusetts" + }, + { + "city": "Milton", + "state": "Massachusetts" + }, + { + "city": "Milton", + "state": "Pennsylvania" + }, + { + "city": "Milton", + "state": "Vermont" + }, + { + "city": "Milton-Freewater", + "state": "Oregon" + }, + { + "city": "Milwaukee", + "state": "Wisconsin" + }, + { + "city": "Milwaukie", + "state": "Oregon" + }, + { + "city": "Mims", + "state": "Florida" + }, + { + "city": "Minden", + "state": "Louisiana" + }, + { + "city": "Mineola", + "state": "New York" + }, + { + "city": "Mineral Wells", + "state": "Texas" + }, + { + "city": "Minneapolis", + "state": "Minnesota" + }, + { + "city": "Minnehaha", + "state": "Washington" + }, + { + "city": "Minnetonka", + "state": "Minnesota" + }, + { + "city": "Minot", + "state": "North Dakota" + }, + { + "city": "Minot AFB", + "state": "North Dakota" + }, + { + "city": "Mint Hill", + "state": "North Carolina" + }, + { + "city": "Mira Loma", + "state": "California" + }, + { + "city": "Mira Monte", + "state": "California" + }, + { + "city": "Miramar", + "state": "Florida" + }, + { + "city": "Mishawaka", + "state": "Indiana" + }, + { + "city": "Mission", + "state": "Kansas" + }, + { + "city": "Mission", + "state": "Texas" + }, + { + "city": "Mission Bend", + "state": "Texas" + }, + { + "city": "Mission Viejo", + "state": "California" + }, + { + "city": "Missoula", + "state": "Montana" + }, + { + "city": "Missouri City", + "state": "Texas" + }, + { + "city": "Mitchell", + "state": "South Dakota" + }, + { + "city": "Mitchellville", + "state": "Maryland" + }, + { + "city": "Moberly", + "state": "Missouri" + }, + { + "city": "Mobile", + "state": "Alabama" + }, + { + "city": "Modesto", + "state": "California" + }, + { + "city": "Mohave Valley", + "state": "Arizona" + }, + { + "city": "Mokena", + "state": "Illinois" + }, + { + "city": "Moline", + "state": "Illinois" + }, + { + "city": "Monaca", + "state": "Pennsylvania" + }, + { + "city": "Monahans", + "state": "Texas" + }, + { + "city": "Monessen", + "state": "Pennsylvania" + }, + { + "city": "Monett", + "state": "Missouri" + }, + { + "city": "Monmouth", + "state": "Illinois" + }, + { + "city": "Monmouth", + "state": "Oregon" + }, + { + "city": "Monona", + "state": "Wisconsin" + }, + { + "city": "Monroe", + "state": "Wisconsin" + }, + { + "city": "Monroe", + "state": "Washington" + }, + { + "city": "Monroe", + "state": "Ohio" + }, + { + "city": "Monroe", + "state": "Connecticut" + }, + { + "city": "Monroe", + "state": "Georgia" + }, + { + "city": "Monroe", + "state": "Michigan" + }, + { + "city": "Monroe", + "state": "Louisiana" + }, + { + "city": "Monroe", + "state": "North Carolina" + }, + { + "city": "Monroe", + "state": "New York" + }, + { + "city": "Monroe", + "state": "New York" + }, + { + "city": "Monroeville", + "state": "Alabama" + }, + { + "city": "Monrovia", + "state": "California" + }, + { + "city": "Monsey", + "state": "New York" + }, + { + "city": "Monson", + "state": "Massachusetts" + }, + { + "city": "Montague", + "state": "Massachusetts" + }, + { + "city": "Montclair", + "state": "New Jersey" + }, + { + "city": "Montclair", + "state": "California" + }, + { + "city": "Montclair", + "state": "Virginia" + }, + { + "city": "Montebello", + "state": "California" + }, + { + "city": "Montecito", + "state": "California" + }, + { + "city": "Monterey", + "state": "California" + }, + { + "city": "Monterey Park", + "state": "California" + }, + { + "city": "Montgomery", + "state": "Alabama" + }, + { + "city": "Montgomery", + "state": "New York" + }, + { + "city": "Montgomery", + "state": "Ohio" + }, + { + "city": "Montgomery Village", + "state": "Maryland" + }, + { + "city": "Montgomeryville", + "state": "Pennsylvania" + }, + { + "city": "Monticello", + "state": "Minnesota" + }, + { + "city": "Monticello", + "state": "New York" + }, + { + "city": "Monticello", + "state": "Arkansas" + }, + { + "city": "Montpelier", + "state": "Vermont" + }, + { + "city": "Montrose", + "state": "Virginia" + }, + { + "city": "Montrose", + "state": "Colorado" + }, + { + "city": "Montvale", + "state": "New Jersey" + }, + { + "city": "Montville", + "state": "Connecticut" + }, + { + "city": "Moody", + "state": "Alabama" + }, + { + "city": "Moore", + "state": "Oklahoma" + }, + { + "city": "Moorestown-Lenola", + "state": "New Jersey" + }, + { + "city": "Mooresville", + "state": "North Carolina" + }, + { + "city": "Mooresville", + "state": "Indiana" + }, + { + "city": "Moorhead", + "state": "Minnesota" + }, + { + "city": "Moorpark", + "state": "California" + }, + { + "city": "Moraga", + "state": "California" + }, + { + "city": "Moraine", + "state": "Ohio" + }, + { + "city": "Moreau", + "state": "New York" + }, + { + "city": "Morehead City", + "state": "North Carolina" + }, + { + "city": "Moreno Valley", + "state": "California" + }, + { + "city": "Morgan City", + "state": "Louisiana" + }, + { + "city": "Morgan Hill", + "state": "California" + }, + { + "city": "Morganton", + "state": "North Carolina" + }, + { + "city": "Morgantown", + "state": "West Virginia" + }, + { + "city": "Morganville", + "state": "New Jersey" + }, + { + "city": "Morrilton", + "state": "Arkansas" + }, + { + "city": "Morris", + "state": "Illinois" + }, + { + "city": "Morristown", + "state": "New Jersey" + }, + { + "city": "Morristown", + "state": "Tennessee" + }, + { + "city": "Morrisville", + "state": "Pennsylvania" + }, + { + "city": "Morro Bay", + "state": "California" + }, + { + "city": "Morton", + "state": "Illinois" + }, + { + "city": "Morton Grove", + "state": "Illinois" + }, + { + "city": "Moscow", + "state": "Idaho" + }, + { + "city": "Moses Lake", + "state": "Washington" + }, + { + "city": "Moss Bluff", + "state": "Louisiana" + }, + { + "city": "Moss Point", + "state": "Mississippi" + }, + { + "city": "Moultrie", + "state": "Georgia" + }, + { + "city": "Mound", + "state": "Minnesota" + }, + { + "city": "Mounds View", + "state": "Minnesota" + }, + { + "city": "Moundsville", + "state": "West Virginia" + }, + { + "city": "Mount Airy", + "state": "Maryland" + }, + { + "city": "Mount Airy", + "state": "North Carolina" + }, + { + "city": "Mount Carmel", + "state": "Illinois" + }, + { + "city": "Mount Carmel", + "state": "Pennsylvania" + }, + { + "city": "Mount Clemens", + "state": "Michigan" + }, + { + "city": "Mount Dora", + "state": "Florida" + }, + { + "city": "Mount Healthy", + "state": "Ohio" + }, + { + "city": "Mount Holly", + "state": "North Carolina" + }, + { + "city": "Mount Hope", + "state": "New York" + }, + { + "city": "Mount Ivy", + "state": "New York" + }, + { + "city": "Mount Joy", + "state": "Pennsylvania" + }, + { + "city": "Mount Juliet", + "state": "Tennessee" + }, + { + "city": "Mount Kisco", + "state": "New York" + }, + { + "city": "Mount Kisco", + "state": "New York" + }, + { + "city": "Mount Lebanon", + "state": "Pennsylvania" + }, + { + "city": "Mount Olympus", + "state": "Utah" + }, + { + "city": "Mount Pleasant", + "state": "Texas" + }, + { + "city": "Mount Pleasant", + "state": "Wisconsin" + }, + { + "city": "Mount Pleasant", + "state": "South Carolina" + }, + { + "city": "Mount Pleasant", + "state": "New York" + }, + { + "city": "Mount Pleasant", + "state": "Michigan" + }, + { + "city": "Mount Pleasant", + "state": "Iowa" + }, + { + "city": "Mount Prospect", + "state": "Illinois" + }, + { + "city": "Mount Rainier", + "state": "Maryland" + }, + { + "city": "Mount Sinai", + "state": "New York" + }, + { + "city": "Mount Vernon", + "state": "New York" + }, + { + "city": "Mount Vernon", + "state": "Illinois" + }, + { + "city": "Mount Vernon", + "state": "Indiana" + }, + { + "city": "Mount Vernon", + "state": "Ohio" + }, + { + "city": "Mount Vernon", + "state": "Washington" + }, + { + "city": "Mount Vernon", + "state": "Virginia" + }, + { + "city": "Mount Washington", + "state": "Kentucky" + }, + { + "city": "Mountain Brook", + "state": "Alabama" + }, + { + "city": "Mountain Home", + "state": "Arkansas" + }, + { + "city": "Mountain Home", + "state": "Idaho" + }, + { + "city": "Mountain Home AFB", + "state": "Idaho" + }, + { + "city": "Mountain Park", + "state": "Georgia" + }, + { + "city": "Mountain Top", + "state": "Pennsylvania" + }, + { + "city": "Mountain View", + "state": "California" + }, + { + "city": "Mountainside", + "state": "New Jersey" + }, + { + "city": "Mountlake Terrace", + "state": "Washington" + }, + { + "city": "Mukilteo", + "state": "Washington" + }, + { + "city": "Mukwonago", + "state": "Wisconsin" + }, + { + "city": "Mukwonago", + "state": "Wisconsin" + }, + { + "city": "Muncie", + "state": "Indiana" + }, + { + "city": "Mundelein", + "state": "Illinois" + }, + { + "city": "Munhall", + "state": "Pennsylvania" + }, + { + "city": "Municipality of Monroeville", + "state": "Pennsylvania" + }, + { + "city": "Municipality of Murrysville", + "state": "Pennsylvania" + }, + { + "city": "Munster", + "state": "Indiana" + }, + { + "city": "Murfreesboro", + "state": "Tennessee" + }, + { + "city": "Murphy", + "state": "Missouri" + }, + { + "city": "Murphysboro", + "state": "Illinois" + }, + { + "city": "Murray", + "state": "Kentucky" + }, + { + "city": "Murray", + "state": "New York" + }, + { + "city": "Murray", + "state": "Utah" + }, + { + "city": "Murraysville", + "state": "North Carolina" + }, + { + "city": "Murrieta", + "state": "California" + }, + { + "city": "Muscatine", + "state": "Iowa" + }, + { + "city": "Muscle Shoals", + "state": "Alabama" + }, + { + "city": "Muscoy", + "state": "California" + }, + { + "city": "Muskego", + "state": "Wisconsin" + }, + { + "city": "Muskegon", + "state": "Michigan" + }, + { + "city": "Muskegon Heights", + "state": "Michigan" + }, + { + "city": "Muskogee", + "state": "Oklahoma" + }, + { + "city": "Mustang", + "state": "Oklahoma" + }, + { + "city": "Myrtle Beach", + "state": "South Carolina" + }, + { + "city": "Myrtle Grove", + "state": "North Carolina" + }, + { + "city": "Myrtle Grove", + "state": "Florida" + }, + { + "city": "Mystic Island", + "state": "New Jersey" + }, + { + "city": "Nacogdoches", + "state": "Texas" + }, + { + "city": "Nampa", + "state": "Idaho" + }, + { + "city": "Nanakuli", + "state": "Hawaii" + }, + { + "city": "Nanticoke", + "state": "Pennsylvania" + }, + { + "city": "Nantucket", + "state": "Massachusetts" + }, + { + "city": "Nanuet", + "state": "New York" + }, + { + "city": "Napa", + "state": "California" + }, + { + "city": "Naperville", + "state": "Illinois" + }, + { + "city": "Napili-Honokowai", + "state": "Hawaii" + }, + { + "city": "Naples", + "state": "Florida" + }, + { + "city": "Naples Park", + "state": "Florida" + }, + { + "city": "Napoleon", + "state": "Ohio" + }, + { + "city": "Nappanee", + "state": "Indiana" + }, + { + "city": "Narragansett", + "state": "Rhode Island" + }, + { + "city": "Nashua", + "state": "New Hampshire" + }, + { + "city": "Nashville-Davidson", + "state": "Tennessee" + }, + { + "city": "Natchez", + "state": "Mississippi" + }, + { + "city": "Natchitoches", + "state": "Louisiana" + }, + { + "city": "Natick", + "state": "Massachusetts" + }, + { + "city": "National City", + "state": "California" + }, + { + "city": "Naugatuck", + "state": "Connecticut" + }, + { + "city": "Naugatuck", + "state": "Connecticut" + }, + { + "city": "Navasota", + "state": "Texas" + }, + { + "city": "Nazareth", + "state": "Pennsylvania" + }, + { + "city": "Nebraska City", + "state": "Nebraska" + }, + { + "city": "Nederland", + "state": "Texas" + }, + { + "city": "Needham", + "state": "Massachusetts" + }, + { + "city": "Needham", + "state": "Massachusetts" + }, + { + "city": "Neenah", + "state": "Wisconsin" + }, + { + "city": "Nellis AFB", + "state": "Nevada" + }, + { + "city": "Neosho", + "state": "Missouri" + }, + { + "city": "Neptune Beach", + "state": "Florida" + }, + { + "city": "Nesconset", + "state": "New York" + }, + { + "city": "Nether Providence Township", + "state": "Pennsylvania" + }, + { + "city": "Nevada", + "state": "Missouri" + }, + { + "city": "Nevada", + "state": "Iowa" + }, + { + "city": "New Albany", + "state": "Indiana" + }, + { + "city": "New Albany", + "state": "Mississippi" + }, + { + "city": "New Baltimore", + "state": "Michigan" + }, + { + "city": "New Bedford", + "state": "Massachusetts" + }, + { + "city": "New Berlin", + "state": "Wisconsin" + }, + { + "city": "New Bern", + "state": "North Carolina" + }, + { + "city": "New Braunfels", + "state": "Texas" + }, + { + "city": "New Brighton", + "state": "Pennsylvania" + }, + { + "city": "New Brighton", + "state": "Minnesota" + }, + { + "city": "New Britain", + "state": "Connecticut" + }, + { + "city": "New Britain", + "state": "Connecticut" + }, + { + "city": "New Brunswick", + "state": "New Jersey" + }, + { + "city": "New Canaan", + "state": "Connecticut" + }, + { + "city": "New Carrollton", + "state": "Maryland" + }, + { + "city": "New Cassel", + "state": "New York" + }, + { + "city": "New Castle", + "state": "New York" + }, + { + "city": "New Castle", + "state": "Pennsylvania" + }, + { + "city": "New Castle", + "state": "Indiana" + }, + { + "city": "New City", + "state": "New York" + }, + { + "city": "New Cumberland", + "state": "Pennsylvania" + }, + { + "city": "New Fairfield", + "state": "Connecticut" + }, + { + "city": "New Hartford", + "state": "Connecticut" + }, + { + "city": "New Hartford", + "state": "New York" + }, + { + "city": "New Haven", + "state": "Connecticut" + }, + { + "city": "New Haven", + "state": "Connecticut" + }, + { + "city": "New Haven", + "state": "Indiana" + }, + { + "city": "New Hope", + "state": "Minnesota" + }, + { + "city": "New Hyde Park", + "state": "New York" + }, + { + "city": "New Iberia", + "state": "Louisiana" + }, + { + "city": "New Kensington", + "state": "Pennsylvania" + }, + { + "city": "New Kingman-Butler", + "state": "Arizona" + }, + { + "city": "New Lenox", + "state": "Illinois" + }, + { + "city": "New London", + "state": "Connecticut" + }, + { + "city": "New London", + "state": "Connecticut" + }, + { + "city": "New London", + "state": "Wisconsin" + }, + { + "city": "New Milford", + "state": "Connecticut" + }, + { + "city": "New Milford", + "state": "Connecticut" + }, + { + "city": "New Milford", + "state": "New Jersey" + }, + { + "city": "New Orleans", + "state": "Louisiana" + }, + { + "city": "New Paltz", + "state": "New York" + }, + { + "city": "New Paltz", + "state": "New York" + }, + { + "city": "New Philadelphia", + "state": "Ohio" + }, + { + "city": "New Port Richey", + "state": "Florida" + }, + { + "city": "New Port Richey East", + "state": "Florida" + }, + { + "city": "New Providence", + "state": "New Jersey" + }, + { + "city": "New Richmond", + "state": "Wisconsin" + }, + { + "city": "New River", + "state": "Arizona" + }, + { + "city": "New Rochelle", + "state": "New York" + }, + { + "city": "New Scotland", + "state": "New York" + }, + { + "city": "New Smyrna Beach", + "state": "Florida" + }, + { + "city": "New Territory", + "state": "Texas" + }, + { + "city": "New Ulm", + "state": "Minnesota" + }, + { + "city": "New Windsor", + "state": "New York" + }, + { + "city": "New Windsor", + "state": "New York" + }, + { + "city": "New York", + "state": "New York" + }, + { + "city": "Newark", + "state": "New Jersey" + }, + { + "city": "Newark", + "state": "New York" + }, + { + "city": "Newark", + "state": "Ohio" + }, + { + "city": "Newark", + "state": "Delaware" + }, + { + "city": "Newark", + "state": "California" + }, + { + "city": "Newberg", + "state": "Oregon" + }, + { + "city": "Newberry", + "state": "South Carolina" + }, + { + "city": "Newburg", + "state": "Kentucky" + }, + { + "city": "Newburgh", + "state": "New York" + }, + { + "city": "Newburgh", + "state": "New York" + }, + { + "city": "Newbury", + "state": "Massachusetts" + }, + { + "city": "Newburyport", + "state": "Massachusetts" + }, + { + "city": "Newcastle", + "state": "Washington" + }, + { + "city": "Newfane", + "state": "New York" + }, + { + "city": "Newington", + "state": "Virginia" + }, + { + "city": "Newington", + "state": "Connecticut" + }, + { + "city": "Newington", + "state": "Connecticut" + }, + { + "city": "Newman", + "state": "California" + }, + { + "city": "Newmarket", + "state": "New Hampshire" + }, + { + "city": "Newnan", + "state": "Georgia" + }, + { + "city": "Newport", + "state": "Arkansas" + }, + { + "city": "Newport", + "state": "Kentucky" + }, + { + "city": "Newport", + "state": "New Hampshire" + }, + { + "city": "Newport", + "state": "Tennessee" + }, + { + "city": "Newport", + "state": "Rhode Island" + }, + { + "city": "Newport", + "state": "Oregon" + }, + { + "city": "Newport Beach", + "state": "California" + }, + { + "city": "Newport East", + "state": "Rhode Island" + }, + { + "city": "Newport News", + "state": "Virginia" + }, + { + "city": "Newstead", + "state": "New York" + }, + { + "city": "Newton", + "state": "North Carolina" + }, + { + "city": "Newton", + "state": "Kansas" + }, + { + "city": "Newton", + "state": "Iowa" + }, + { + "city": "Newton", + "state": "Massachusetts" + }, + { + "city": "Newton", + "state": "New Jersey" + }, + { + "city": "Newtown", + "state": "Connecticut" + }, + { + "city": "Niagara", + "state": "New York" + }, + { + "city": "Niagara Falls", + "state": "New York" + }, + { + "city": "Niceville", + "state": "Florida" + }, + { + "city": "Nicholasville", + "state": "Kentucky" + }, + { + "city": "Niles", + "state": "Michigan" + }, + { + "city": "Niles", + "state": "Illinois" + }, + { + "city": "Niles", + "state": "Ohio" + }, + { + "city": "Nipomo", + "state": "California" + }, + { + "city": "Niskayuna", + "state": "New York" + }, + { + "city": "Nitro", + "state": "West Virginia" + }, + { + "city": "Nixa", + "state": "Missouri" + }, + { + "city": "Noblesville", + "state": "Indiana" + }, + { + "city": "Nogales", + "state": "Arizona" + }, + { + "city": "Norco", + "state": "California" + }, + { + "city": "Norcross", + "state": "Georgia" + }, + { + "city": "Norfolk", + "state": "Massachusetts" + }, + { + "city": "Norfolk", + "state": "Nebraska" + }, + { + "city": "Norfolk", + "state": "Virginia" + }, + { + "city": "Norland", + "state": "Florida" + }, + { + "city": "Normal", + "state": "Illinois" + }, + { + "city": "Norman", + "state": "Oklahoma" + }, + { + "city": "Normandy Park", + "state": "Washington" + }, + { + "city": "Norridge", + "state": "Illinois" + }, + { + "city": "Norristown", + "state": "Pennsylvania" + }, + { + "city": "North Adams", + "state": "Massachusetts" + }, + { + "city": "North Amherst", + "state": "Massachusetts" + }, + { + "city": "North Amityville", + "state": "New York" + }, + { + "city": "North Andover", + "state": "Massachusetts" + }, + { + "city": "North Andrews Gardens", + "state": "Florida" + }, + { + "city": "North Arlington", + "state": "New Jersey" + }, + { + "city": "North Atlanta", + "state": "Georgia" + }, + { + "city": "North Attleborough", + "state": "Massachusetts" + }, + { + "city": "North Attleborough Center", + "state": "Massachusetts" + }, + { + "city": "North Auburn", + "state": "California" + }, + { + "city": "North Augusta", + "state": "South Carolina" + }, + { + "city": "North Aurora", + "state": "Illinois" + }, + { + "city": "North Babylon", + "state": "New York" + }, + { + "city": "North Bay Shore", + "state": "New York" + }, + { + "city": "North Bay Village", + "state": "Florida" + }, + { + "city": "North Bellmore", + "state": "New York" + }, + { + "city": "North Bellport", + "state": "New York" + }, + { + "city": "North Bend", + "state": "Oregon" + }, + { + "city": "North Bethesda", + "state": "Maryland" + }, + { + "city": "North Braddock", + "state": "Pennsylvania" + }, + { + "city": "North Branch", + "state": "Minnesota" + }, + { + "city": "North Branford", + "state": "Connecticut" + }, + { + "city": "North Brunswick Township", + "state": "New Jersey" + }, + { + "city": "North Caldwell", + "state": "New Jersey" + }, + { + "city": "North Canton", + "state": "Ohio" + }, + { + "city": "North Castle", + "state": "New York" + }, + { + "city": "North Charleston", + "state": "South Carolina" + }, + { + "city": "North Chicago", + "state": "Illinois" + }, + { + "city": "North College Hill", + "state": "Ohio" + }, + { + "city": "North Creek", + "state": "Washington" + }, + { + "city": "North Decatur", + "state": "Georgia" + }, + { + "city": "North Druid Hills", + "state": "Georgia" + }, + { + "city": "North Elba", + "state": "New York" + }, + { + "city": "North Fair Oaks", + "state": "California" + }, + { + "city": "North Fort Myers", + "state": "Florida" + }, + { + "city": "North Greenbush", + "state": "New York" + }, + { + "city": "North Haledon", + "state": "New Jersey" + }, + { + "city": "North Haven", + "state": "Connecticut" + }, + { + "city": "North Haven", + "state": "Connecticut" + }, + { + "city": "North Hempstead", + "state": "New York" + }, + { + "city": "North Highlands", + "state": "California" + }, + { + "city": "North Kensington", + "state": "Maryland" + }, + { + "city": "North Kingstown", + "state": "Rhode Island" + }, + { + "city": "North Las Vegas", + "state": "Nevada" + }, + { + "city": "North Lauderdale", + "state": "Florida" + }, + { + "city": "North Laurel", + "state": "Maryland" + }, + { + "city": "North Lindenhurst", + "state": "New York" + }, + { + "city": "North Little Rock", + "state": "Arkansas" + }, + { + "city": "North Logan", + "state": "Utah" + }, + { + "city": "North Madison", + "state": "Ohio" + }, + { + "city": "North Manchester", + "state": "Indiana" + }, + { + "city": "North Mankato", + "state": "Minnesota" + }, + { + "city": "North Marysville", + "state": "Washington" + }, + { + "city": "North Massapequa", + "state": "New York" + }, + { + "city": "North Merrick", + "state": "New York" + }, + { + "city": "North Miami", + "state": "Florida" + }, + { + "city": "North Miami Beach", + "state": "Florida" + }, + { + "city": "North Myrtle Beach", + "state": "South Carolina" + }, + { + "city": "North New Hyde Park", + "state": "New York" + }, + { + "city": "North Ogden", + "state": "Utah" + }, + { + "city": "North Olmsted", + "state": "Ohio" + }, + { + "city": "North Palm Beach", + "state": "Florida" + }, + { + "city": "North Patchogue", + "state": "New York" + }, + { + "city": "North Plainfield", + "state": "New Jersey" + }, + { + "city": "North Platte", + "state": "Nebraska" + }, + { + "city": "North Port", + "state": "Florida" + }, + { + "city": "North Potomac", + "state": "Maryland" + }, + { + "city": "North Providence", + "state": "Rhode Island" + }, + { + "city": "North Providence", + "state": "Rhode Island" + }, + { + "city": "North Reading", + "state": "Massachusetts" + }, + { + "city": "North Richland Hills", + "state": "Texas" + }, + { + "city": "North Ridgeville", + "state": "Ohio" + }, + { + "city": "North Riverside", + "state": "Illinois" + }, + { + "city": "North Royalton", + "state": "Ohio" + }, + { + "city": "North Salt Lake", + "state": "Utah" + }, + { + "city": "North Sarasota", + "state": "Florida" + }, + { + "city": "North Smithfield", + "state": "Rhode Island" + }, + { + "city": "North Springfield", + "state": "Virginia" + }, + { + "city": "North St. Paul", + "state": "Minnesota" + }, + { + "city": "North Star", + "state": "Delaware" + }, + { + "city": "North Syracuse", + "state": "New York" + }, + { + "city": "North Tonawanda", + "state": "New York" + }, + { + "city": "North Valley", + "state": "New Mexico" + }, + { + "city": "North Valley Stream", + "state": "New York" + }, + { + "city": "North Vernon", + "state": "Indiana" + }, + { + "city": "North Versailles", + "state": "Pennsylvania" + }, + { + "city": "North Wantagh", + "state": "New York" + }, + { + "city": "Northampton", + "state": "Pennsylvania" + }, + { + "city": "Northampton", + "state": "Massachusetts" + }, + { + "city": "Northborough", + "state": "Massachusetts" + }, + { + "city": "Northborough", + "state": "Massachusetts" + }, + { + "city": "Northbridge", + "state": "Massachusetts" + }, + { + "city": "Northbrook", + "state": "Illinois" + }, + { + "city": "Northbrook", + "state": "Ohio" + }, + { + "city": "Northfield", + "state": "Minnesota" + }, + { + "city": "Northfield", + "state": "New Jersey" + }, + { + "city": "Northgate", + "state": "Ohio" + }, + { + "city": "Northglenn", + "state": "Colorado" + }, + { + "city": "Northlake", + "state": "Illinois" + }, + { + "city": "Northport", + "state": "Alabama" + }, + { + "city": "Northport", + "state": "New York" + }, + { + "city": "Northridge", + "state": "Ohio" + }, + { + "city": "Northridge", + "state": "Ohio" + }, + { + "city": "Northview", + "state": "Michigan" + }, + { + "city": "Northville", + "state": "Michigan" + }, + { + "city": "Northwest Harborcreek", + "state": "Pennsylvania" + }, + { + "city": "Norton", + "state": "Ohio" + }, + { + "city": "Norton", + "state": "Massachusetts" + }, + { + "city": "Norton Shores", + "state": "Michigan" + }, + { + "city": "Norwalk", + "state": "Iowa" + }, + { + "city": "Norwalk", + "state": "Connecticut" + }, + { + "city": "Norwalk", + "state": "California" + }, + { + "city": "Norwalk", + "state": "Connecticut" + }, + { + "city": "Norwalk", + "state": "Ohio" + }, + { + "city": "Norway", + "state": "Wisconsin" + }, + { + "city": "Norwell", + "state": "Massachusetts" + }, + { + "city": "Norwich", + "state": "New York" + }, + { + "city": "Norwich", + "state": "Connecticut" + }, + { + "city": "Norwich", + "state": "Connecticut" + }, + { + "city": "Norwood", + "state": "Massachusetts" + }, + { + "city": "Norwood", + "state": "Massachusetts" + }, + { + "city": "Norwood", + "state": "Ohio" + }, + { + "city": "Novato", + "state": "California" + }, + { + "city": "Novi", + "state": "Michigan" + }, + { + "city": "Nutley", + "state": "New Jersey" + }, + { + "city": "Nyack", + "state": "New York" + }, + { + "city": "O’Fallon", + "state": "Illinois" + }, + { + "city": "O’Fallon", + "state": "Missouri" + }, + { + "city": "O’Hara Township", + "state": "Pennsylvania" + }, + { + "city": "Oak Brook", + "state": "Illinois" + }, + { + "city": "Oak Creek", + "state": "Wisconsin" + }, + { + "city": "Oak Forest", + "state": "Illinois" + }, + { + "city": "Oak Grove", + "state": "Kentucky" + }, + { + "city": "Oak Grove", + "state": "South Carolina" + }, + { + "city": "Oak Grove", + "state": "Oregon" + }, + { + "city": "Oak Grove", + "state": "Minnesota" + }, + { + "city": "Oak Harbor", + "state": "Washington" + }, + { + "city": "Oak Hill", + "state": "West Virginia" + }, + { + "city": "Oak Hills", + "state": "Oregon" + }, + { + "city": "Oak Hills Place", + "state": "Louisiana" + }, + { + "city": "Oak Island", + "state": "North Carolina" + }, + { + "city": "Oak Lawn", + "state": "Illinois" + }, + { + "city": "Oak Park", + "state": "Illinois" + }, + { + "city": "Oak Park", + "state": "Michigan" + }, + { + "city": "Oak Ridge", + "state": "Tennessee" + }, + { + "city": "Oak Ridge", + "state": "Florida" + }, + { + "city": "Oakbrook", + "state": "Kentucky" + }, + { + "city": "Oakdale", + "state": "Louisiana" + }, + { + "city": "Oakdale", + "state": "California" + }, + { + "city": "Oakdale", + "state": "Minnesota" + }, + { + "city": "Oakdale", + "state": "New York" + }, + { + "city": "Oakland", + "state": "New Jersey" + }, + { + "city": "Oakland", + "state": "California" + }, + { + "city": "Oakland Park", + "state": "Florida" + }, + { + "city": "Oakley", + "state": "California" + }, + { + "city": "Oakmont", + "state": "Pennsylvania" + }, + { + "city": "Oakton", + "state": "Virginia" + }, + { + "city": "Oakville", + "state": "Missouri" + }, + { + "city": "Oakville", + "state": "Connecticut" + }, + { + "city": "Oakwood", + "state": "Ohio" + }, + { + "city": "Oatfield", + "state": "Oregon" + }, + { + "city": "Oberlin", + "state": "Ohio" + }, + { + "city": "Ocala", + "state": "Florida" + }, + { + "city": "Ocean Acres", + "state": "New Jersey" + }, + { + "city": "Ocean City", + "state": "New Jersey" + }, + { + "city": "Ocean City", + "state": "Maryland" + }, + { + "city": "Ocean Pines", + "state": "Maryland" + }, + { + "city": "Ocean Springs", + "state": "Mississippi" + }, + { + "city": "Oceano", + "state": "California" + }, + { + "city": "Oceanside", + "state": "California" + }, + { + "city": "Oceanside", + "state": "New York" + }, + { + "city": "Ocoee", + "state": "Florida" + }, + { + "city": "Oconomowoc", + "state": "Wisconsin" + }, + { + "city": "Oconomowoc", + "state": "Wisconsin" + }, + { + "city": "Odenton", + "state": "Maryland" + }, + { + "city": "Odessa", + "state": "Texas" + }, + { + "city": "Oelwein", + "state": "Iowa" + }, + { + "city": "Offutt AFB", + "state": "Nebraska" + }, + { + "city": "Ogden", + "state": "New York" + }, + { + "city": "Ogden", + "state": "Utah" + }, + { + "city": "Ogdensburg", + "state": "New York" + }, + { + "city": "Oil City", + "state": "Pennsylvania" + }, + { + "city": "Oildale", + "state": "California" + }, + { + "city": "Ojai", + "state": "California" + }, + { + "city": "Ojus", + "state": "Florida" + }, + { + "city": "Okemos", + "state": "Michigan" + }, + { + "city": "Oklahoma City", + "state": "Oklahoma" + }, + { + "city": "Okmulgee", + "state": "Oklahoma" + }, + { + "city": "Okolona", + "state": "Kentucky" + }, + { + "city": "Olathe", + "state": "Kansas" + }, + { + "city": "Old Bridge", + "state": "New Jersey" + }, + { + "city": "Old Forge", + "state": "Pennsylvania" + }, + { + "city": "Old Lyme", + "state": "Connecticut" + }, + { + "city": "Old Orchard Beach", + "state": "Maine" + }, + { + "city": "Old Orchard Beach", + "state": "Maine" + }, + { + "city": "Old Saybrook", + "state": "Connecticut" + }, + { + "city": "Old Town", + "state": "Maine" + }, + { + "city": "Oldsmar", + "state": "Florida" + }, + { + "city": "Olean", + "state": "New York" + }, + { + "city": "Olive Branch", + "state": "Mississippi" + }, + { + "city": "Olivehurst", + "state": "California" + }, + { + "city": "Olivette", + "state": "Missouri" + }, + { + "city": "Olmsted Falls", + "state": "Ohio" + }, + { + "city": "Olney", + "state": "Maryland" + }, + { + "city": "Olney", + "state": "Illinois" + }, + { + "city": "Olympia", + "state": "Washington" + }, + { + "city": "Olympia Heights", + "state": "Florida" + }, + { + "city": "Omaha", + "state": "Nebraska" + }, + { + "city": "Onalaska", + "state": "Wisconsin" + }, + { + "city": "Oneida", + "state": "New York" + }, + { + "city": "Oneonta", + "state": "New York" + }, + { + "city": "Onondaga", + "state": "New York" + }, + { + "city": "Ontario", + "state": "New York" + }, + { + "city": "Ontario", + "state": "Oregon" + }, + { + "city": "Ontario", + "state": "California" + }, + { + "city": "Opa-locka", + "state": "Florida" + }, + { + "city": "Opa-locka North", + "state": "Florida" + }, + { + "city": "Opal Cliffs", + "state": "California" + }, + { + "city": "Opelika", + "state": "Alabama" + }, + { + "city": "Opelousas", + "state": "Louisiana" + }, + { + "city": "Opp", + "state": "Alabama" + }, + { + "city": "Opportunity", + "state": "Washington" + }, + { + "city": "Oquirrh", + "state": "Utah" + }, + { + "city": "Oradell", + "state": "New Jersey" + }, + { + "city": "Orange", + "state": "New Jersey" + }, + { + "city": "Orange", + "state": "Massachusetts" + }, + { + "city": "Orange", + "state": "Texas" + }, + { + "city": "Orange", + "state": "Connecticut" + }, + { + "city": "Orange", + "state": "California" + }, + { + "city": "Orange", + "state": "Connecticut" + }, + { + "city": "Orange City", + "state": "Florida" + }, + { + "city": "Orange Cove", + "state": "California" + }, + { + "city": "Orange Lake", + "state": "New York" + }, + { + "city": "Orange Park", + "state": "Florida" + }, + { + "city": "Orangeburg", + "state": "South Carolina" + }, + { + "city": "Orangetown", + "state": "New York" + }, + { + "city": "Orangevale", + "state": "California" + }, + { + "city": "Orchard Mesa", + "state": "Colorado" + }, + { + "city": "Orchard Park", + "state": "New York" + }, + { + "city": "Orchards", + "state": "Washington" + }, + { + "city": "Orcutt", + "state": "California" + }, + { + "city": "Oregon", + "state": "Ohio" + }, + { + "city": "Oregon", + "state": "Wisconsin" + }, + { + "city": "Oregon City", + "state": "Oregon" + }, + { + "city": "Orem", + "state": "Utah" + }, + { + "city": "Orinda", + "state": "California" + }, + { + "city": "Orland", + "state": "California" + }, + { + "city": "Orland Hills", + "state": "Illinois" + }, + { + "city": "Orland Park", + "state": "Illinois" + }, + { + "city": "Orlando", + "state": "Florida" + }, + { + "city": "Orleans", + "state": "Massachusetts" + }, + { + "city": "Orlovista", + "state": "Florida" + }, + { + "city": "Ormond Beach", + "state": "Florida" + }, + { + "city": "Ormond-By-The-Sea", + "state": "Florida" + }, + { + "city": "Oro Valley", + "state": "Arizona" + }, + { + "city": "Orono", + "state": "Maine" + }, + { + "city": "Orono", + "state": "Maine" + }, + { + "city": "Orono", + "state": "Minnesota" + }, + { + "city": "Orosi", + "state": "California" + }, + { + "city": "Oroville", + "state": "California" + }, + { + "city": "Oroville East", + "state": "California" + }, + { + "city": "Orrville", + "state": "Ohio" + }, + { + "city": "Osceola", + "state": "Arkansas" + }, + { + "city": "Oshkosh", + "state": "Wisconsin" + }, + { + "city": "Oskaloosa", + "state": "Iowa" + }, + { + "city": "Ossining", + "state": "New York" + }, + { + "city": "Ossining", + "state": "New York" + }, + { + "city": "Oswego", + "state": "New York" + }, + { + "city": "Oswego", + "state": "New York" + }, + { + "city": "Oswego", + "state": "Illinois" + }, + { + "city": "Otis Orchards-East Farms", + "state": "Washington" + }, + { + "city": "Otsego", + "state": "Minnesota" + }, + { + "city": "Ottawa", + "state": "Illinois" + }, + { + "city": "Ottawa", + "state": "Kansas" + }, + { + "city": "Ottumwa", + "state": "Iowa" + }, + { + "city": "Overland", + "state": "Missouri" + }, + { + "city": "Overland Park", + "state": "Kansas" + }, + { + "city": "Overlea", + "state": "Maryland" + }, + { + "city": "Oviedo", + "state": "Florida" + }, + { + "city": "Owasso", + "state": "Oklahoma" + }, + { + "city": "Owatonna", + "state": "Minnesota" + }, + { + "city": "Owego", + "state": "New York" + }, + { + "city": "Owensboro", + "state": "Kentucky" + }, + { + "city": "Owings Mills", + "state": "Maryland" + }, + { + "city": "Owosso", + "state": "Michigan" + }, + { + "city": "Oxford", + "state": "Massachusetts" + }, + { + "city": "Oxford", + "state": "Mississippi" + }, + { + "city": "Oxford", + "state": "North Carolina" + }, + { + "city": "Oxford", + "state": "Ohio" + }, + { + "city": "Oxford", + "state": "Connecticut" + }, + { + "city": "Oxford", + "state": "Alabama" + }, + { + "city": "Oxnard", + "state": "California" + }, + { + "city": "Oxon Hill-Glassmanor", + "state": "Maryland" + }, + { + "city": "Oyster Bay", + "state": "New York" + }, + { + "city": "Oyster Bay", + "state": "New York" + }, + { + "city": "Ozark", + "state": "Missouri" + }, + { + "city": "Ozark", + "state": "Alabama" + }, + { + "city": "Pace", + "state": "Florida" + }, + { + "city": "Pacific Grove", + "state": "California" + }, + { + "city": "Pacifica", + "state": "California" + }, + { + "city": "Paducah", + "state": "Kentucky" + }, + { + "city": "Page", + "state": "Arizona" + }, + { + "city": "Pahrump", + "state": "Nevada" + }, + { + "city": "Paine Field-Lake Stickney", + "state": "Washington" + }, + { + "city": "Painesville", + "state": "Ohio" + }, + { + "city": "Palatine", + "state": "Illinois" + }, + { + "city": "Palatka", + "state": "Florida" + }, + { + "city": "Palestine", + "state": "Texas" + }, + { + "city": "Palisades Park", + "state": "New Jersey" + }, + { + "city": "Palm Bay", + "state": "Florida" + }, + { + "city": "Palm Beach", + "state": "Florida" + }, + { + "city": "Palm Beach Gardens", + "state": "Florida" + }, + { + "city": "Palm City", + "state": "Florida" + }, + { + "city": "Palm Coast", + "state": "Florida" + }, + { + "city": "Palm Desert", + "state": "California" + }, + { + "city": "Palm Harbor", + "state": "Florida" + }, + { + "city": "Palm River-Clair Mel", + "state": "Florida" + }, + { + "city": "Palm Springs", + "state": "Florida" + }, + { + "city": "Palm Springs", + "state": "California" + }, + { + "city": "Palm Valley", + "state": "Florida" + }, + { + "city": "Palmdale", + "state": "California" + }, + { + "city": "Palmer", + "state": "Massachusetts" + }, + { + "city": "Palmetto", + "state": "Florida" + }, + { + "city": "Palmetto Estates", + "state": "Florida" + }, + { + "city": "Palmview South", + "state": "Texas" + }, + { + "city": "Palmyra", + "state": "Pennsylvania" + }, + { + "city": "Palmyra", + "state": "New Jersey" + }, + { + "city": "Palmyra", + "state": "New York" + }, + { + "city": "Palo Alto", + "state": "California" + }, + { + "city": "Palos Heights", + "state": "Illinois" + }, + { + "city": "Palos Hills", + "state": "Illinois" + }, + { + "city": "Palos Verdes Estates", + "state": "California" + }, + { + "city": "Pampa", + "state": "Texas" + }, + { + "city": "Panama City", + "state": "Florida" + }, + { + "city": "Panama City Beach", + "state": "Florida" + }, + { + "city": "Panthersville", + "state": "Georgia" + }, + { + "city": "Papillion", + "state": "Nebraska" + }, + { + "city": "Paradise", + "state": "Nevada" + }, + { + "city": "Paradise", + "state": "California" + }, + { + "city": "Paradise Valley", + "state": "Arizona" + }, + { + "city": "Paragould", + "state": "Arkansas" + }, + { + "city": "Paramount", + "state": "California" + }, + { + "city": "Paramus", + "state": "New Jersey" + }, + { + "city": "Paris", + "state": "Texas" + }, + { + "city": "Paris", + "state": "Tennessee" + }, + { + "city": "Paris", + "state": "Illinois" + }, + { + "city": "Paris", + "state": "Kentucky" + }, + { + "city": "Park City", + "state": "Illinois" + }, + { + "city": "Park City", + "state": "Utah" + }, + { + "city": "Park Forest", + "state": "Illinois" + }, + { + "city": "Park Forest Village", + "state": "Pennsylvania" + }, + { + "city": "Park Hills", + "state": "Missouri" + }, + { + "city": "Park Ridge", + "state": "New Jersey" + }, + { + "city": "Park Ridge", + "state": "Illinois" + }, + { + "city": "Parker", + "state": "Colorado" + }, + { + "city": "Parker", + "state": "South Carolina" + }, + { + "city": "Parkersburg", + "state": "West Virginia" + }, + { + "city": "Parkland", + "state": "Washington" + }, + { + "city": "Parkland", + "state": "Florida" + }, + { + "city": "Parkville", + "state": "Maryland" + }, + { + "city": "Parkville", + "state": "Pennsylvania" + }, + { + "city": "Parkway-South Sacramento", + "state": "California" + }, + { + "city": "Parkwood", + "state": "Washington" + }, + { + "city": "Parlier", + "state": "California" + }, + { + "city": "Parma", + "state": "New York" + }, + { + "city": "Parma", + "state": "Ohio" + }, + { + "city": "Parma Heights", + "state": "Ohio" + }, + { + "city": "Parole", + "state": "Maryland" + }, + { + "city": "Parsons", + "state": "Kansas" + }, + { + "city": "Pasadena", + "state": "Maryland" + }, + { + "city": "Pasadena", + "state": "California" + }, + { + "city": "Pasadena", + "state": "Texas" + }, + { + "city": "Pascagoula", + "state": "Mississippi" + }, + { + "city": "Pasco", + "state": "Washington" + }, + { + "city": "Pass Christian", + "state": "Mississippi" + }, + { + "city": "Passaic", + "state": "New Jersey" + }, + { + "city": "Pataskala", + "state": "Ohio" + }, + { + "city": "Patchogue", + "state": "New York" + }, + { + "city": "Paterson", + "state": "New Jersey" + }, + { + "city": "Patterson", + "state": "New York" + }, + { + "city": "Patterson", + "state": "California" + }, + { + "city": "Pauls Valley", + "state": "Oklahoma" + }, + { + "city": "Paulsboro", + "state": "New Jersey" + }, + { + "city": "Pawling", + "state": "New York" + }, + { + "city": "Pawtucket", + "state": "Rhode Island" + }, + { + "city": "Payette", + "state": "Idaho" + }, + { + "city": "Payson", + "state": "Arizona" + }, + { + "city": "Payson", + "state": "Utah" + }, + { + "city": "Pea Ridge", + "state": "West Virginia" + }, + { + "city": "Peabody", + "state": "Massachusetts" + }, + { + "city": "Peachtree City", + "state": "Georgia" + }, + { + "city": "Pearl", + "state": "Mississippi" + }, + { + "city": "Pearl City", + "state": "Hawaii" + }, + { + "city": "Pearl River", + "state": "New York" + }, + { + "city": "Pearland", + "state": "Texas" + }, + { + "city": "Pearsall", + "state": "Texas" + }, + { + "city": "Pecan Grove", + "state": "Texas" + }, + { + "city": "Pecos", + "state": "Texas" + }, + { + "city": "Pedley", + "state": "California" + }, + { + "city": "Peekskill", + "state": "New York" + }, + { + "city": "Pekin", + "state": "Illinois" + }, + { + "city": "Pelham", + "state": "Alabama" + }, + { + "city": "Pelham", + "state": "New York" + }, + { + "city": "Pelham", + "state": "New York" + }, + { + "city": "Pelham", + "state": "New Hampshire" + }, + { + "city": "Pell City", + "state": "Alabama" + }, + { + "city": "Pella", + "state": "Iowa" + }, + { + "city": "Pembroke", + "state": "Massachusetts" + }, + { + "city": "Pembroke", + "state": "New Hampshire" + }, + { + "city": "Pembroke Park", + "state": "Florida" + }, + { + "city": "Pembroke Pines", + "state": "Florida" + }, + { + "city": "Pendleton", + "state": "New York" + }, + { + "city": "Pendleton", + "state": "Oregon" + }, + { + "city": "Penfield", + "state": "New York" + }, + { + "city": "Penn Hills", + "state": "Pennsylvania" + }, + { + "city": "Pennsauken", + "state": "New Jersey" + }, + { + "city": "Pennsville", + "state": "New Jersey" + }, + { + "city": "Pensacola", + "state": "Florida" + }, + { + "city": "Peoria", + "state": "Arizona" + }, + { + "city": "Peoria", + "state": "Illinois" + }, + { + "city": "Peoria Heights", + "state": "Illinois" + }, + { + "city": "Pepper Pike", + "state": "Ohio" + }, + { + "city": "Pepperell", + "state": "Massachusetts" + }, + { + "city": "Perinton", + "state": "New York" + }, + { + "city": "Perkasie", + "state": "Pennsylvania" + }, + { + "city": "Perris", + "state": "California" + }, + { + "city": "Perry", + "state": "Florida" + }, + { + "city": "Perry", + "state": "Iowa" + }, + { + "city": "Perry", + "state": "Georgia" + }, + { + "city": "Perry", + "state": "New York" + }, + { + "city": "Perry Hall", + "state": "Maryland" + }, + { + "city": "Perry Heights", + "state": "Ohio" + }, + { + "city": "Perrysburg", + "state": "Ohio" + }, + { + "city": "Perryton", + "state": "Texas" + }, + { + "city": "Perryville", + "state": "Missouri" + }, + { + "city": "Perth Amboy", + "state": "New Jersey" + }, + { + "city": "Peru", + "state": "New York" + }, + { + "city": "Peru", + "state": "Illinois" + }, + { + "city": "Peru", + "state": "Indiana" + }, + { + "city": "Petal", + "state": "Mississippi" + }, + { + "city": "Petaluma", + "state": "California" + }, + { + "city": "Petersburg", + "state": "Virginia" + }, + { + "city": "Petoskey", + "state": "Michigan" + }, + { + "city": "Pewaukee", + "state": "Wisconsin" + }, + { + "city": "Pewaukee", + "state": "Wisconsin" + }, + { + "city": "Pflugerville", + "state": "Texas" + }, + { + "city": "Pharr", + "state": "Texas" + }, + { + "city": "Phelps", + "state": "New York" + }, + { + "city": "Phenix City", + "state": "Alabama" + }, + { + "city": "Philadelphia", + "state": "Mississippi" + }, + { + "city": "Philadelphia", + "state": "Pennsylvania" + }, + { + "city": "Philipstown", + "state": "New York" + }, + { + "city": "Phillipsburg", + "state": "New Jersey" + }, + { + "city": "Phoenix", + "state": "Arizona" + }, + { + "city": "Phoenixville", + "state": "Pennsylvania" + }, + { + "city": "Picayune", + "state": "Mississippi" + }, + { + "city": "Pickerington", + "state": "Ohio" + }, + { + "city": "Picnic Point-North Lynnwood", + "state": "Washington" + }, + { + "city": "Pico Rivera", + "state": "California" + }, + { + "city": "Picture Rocks", + "state": "Arizona" + }, + { + "city": "Piedmont", + "state": "California" + }, + { + "city": "Pierre", + "state": "South Dakota" + }, + { + "city": "Pike Creek", + "state": "Delaware" + }, + { + "city": "Pikesville", + "state": "Maryland" + }, + { + "city": "Pikeville", + "state": "Kentucky" + }, + { + "city": "Pimmit Hills", + "state": "Virginia" + }, + { + "city": "Pine Bluff", + "state": "Arkansas" + }, + { + "city": "Pine Castle", + "state": "Florida" + }, + { + "city": "Pine Hill", + "state": "New Jersey" + }, + { + "city": "Pine Hills", + "state": "Florida" + }, + { + "city": "Pinecrest", + "state": "Florida" + }, + { + "city": "Pinehurst", + "state": "Massachusetts" + }, + { + "city": "Pinehurst", + "state": "North Carolina" + }, + { + "city": "Pinellas Park", + "state": "Florida" + }, + { + "city": "Pineville", + "state": "Louisiana" + }, + { + "city": "Pinewood", + "state": "Florida" + }, + { + "city": "Piney Green", + "state": "North Carolina" + }, + { + "city": "Pinole", + "state": "California" + }, + { + "city": "Piqua", + "state": "Ohio" + }, + { + "city": "Pismo Beach", + "state": "California" + }, + { + "city": "Pitman", + "state": "New Jersey" + }, + { + "city": "Pittsburg", + "state": "California" + }, + { + "city": "Pittsburg", + "state": "Kansas" + }, + { + "city": "Pittsburgh", + "state": "Pennsylvania" + }, + { + "city": "Pittsfield", + "state": "Massachusetts" + }, + { + "city": "Pittsford", + "state": "New York" + }, + { + "city": "Pittston", + "state": "Pennsylvania" + }, + { + "city": "Placentia", + "state": "California" + }, + { + "city": "Placerville", + "state": "California" + }, + { + "city": "Plainedge", + "state": "New York" + }, + { + "city": "Plainfield", + "state": "New Jersey" + }, + { + "city": "Plainfield", + "state": "Connecticut" + }, + { + "city": "Plainfield", + "state": "Indiana" + }, + { + "city": "Plainfield", + "state": "Illinois" + }, + { + "city": "Plainview", + "state": "New York" + }, + { + "city": "Plainview", + "state": "Texas" + }, + { + "city": "Plainville", + "state": "Massachusetts" + }, + { + "city": "Plainville", + "state": "Connecticut" + }, + { + "city": "Plaistow", + "state": "New Hampshire" + }, + { + "city": "Plano", + "state": "Texas" + }, + { + "city": "Plant City", + "state": "Florida" + }, + { + "city": "Plantation", + "state": "Florida" + }, + { + "city": "Plaquemine", + "state": "Louisiana" + }, + { + "city": "Plattekill", + "state": "New York" + }, + { + "city": "Platteville", + "state": "Wisconsin" + }, + { + "city": "Plattsburgh", + "state": "New York" + }, + { + "city": "Plattsburgh", + "state": "New York" + }, + { + "city": "Plattsmouth", + "state": "Nebraska" + }, + { + "city": "Pleasant Grove", + "state": "Utah" + }, + { + "city": "Pleasant Grove", + "state": "Alabama" + }, + { + "city": "Pleasant Hill", + "state": "California" + }, + { + "city": "Pleasant Hills", + "state": "Pennsylvania" + }, + { + "city": "Pleasant Prairie", + "state": "Wisconsin" + }, + { + "city": "Pleasant Valley", + "state": "New York" + }, + { + "city": "Pleasanton", + "state": "Texas" + }, + { + "city": "Pleasanton", + "state": "California" + }, + { + "city": "Pleasantville", + "state": "New York" + }, + { + "city": "Pleasantville", + "state": "New Jersey" + }, + { + "city": "Pleasure Ridge Park", + "state": "Kentucky" + }, + { + "city": "Plover", + "state": "Wisconsin" + }, + { + "city": "Plum", + "state": "Pennsylvania" + }, + { + "city": "Plymouth", + "state": "Pennsylvania" + }, + { + "city": "Plymouth", + "state": "Massachusetts" + }, + { + "city": "Plymouth", + "state": "Michigan" + }, + { + "city": "Plymouth", + "state": "Massachusetts" + }, + { + "city": "Plymouth", + "state": "Minnesota" + }, + { + "city": "Plymouth", + "state": "Indiana" + }, + { + "city": "Plymouth", + "state": "Connecticut" + }, + { + "city": "Plymouth", + "state": "Wisconsin" + }, + { + "city": "Plymouth Township", + "state": "Michigan" + }, + { + "city": "Pocahontas", + "state": "Arkansas" + }, + { + "city": "Pocatello", + "state": "Idaho" + }, + { + "city": "Poinciana", + "state": "Florida" + }, + { + "city": "Point Pleasant", + "state": "New Jersey" + }, + { + "city": "Pomfret", + "state": "New York" + }, + { + "city": "Pomona", + "state": "California" + }, + { + "city": "Pompano Beach", + "state": "Florida" + }, + { + "city": "Pompano Beach Highlands", + "state": "Florida" + }, + { + "city": "Pompey", + "state": "New York" + }, + { + "city": "Pompton Lakes", + "state": "New Jersey" + }, + { + "city": "Ponca City", + "state": "Oklahoma" + }, + { + "city": "Pontiac", + "state": "Illinois" + }, + { + "city": "Pontiac", + "state": "Michigan" + }, + { + "city": "Pooler", + "state": "Georgia" + }, + { + "city": "Poplar Bluff", + "state": "Missouri" + }, + { + "city": "Poquoson", + "state": "Virginia" + }, + { + "city": "Port Angeles", + "state": "Washington" + }, + { + "city": "Port Arthur", + "state": "Texas" + }, + { + "city": "Port Charlotte", + "state": "Florida" + }, + { + "city": "Port Chester", + "state": "New York" + }, + { + "city": "Port Clinton", + "state": "Ohio" + }, + { + "city": "Port Hueneme", + "state": "California" + }, + { + "city": "Port Huron", + "state": "Michigan" + }, + { + "city": "Port Jefferson", + "state": "New York" + }, + { + "city": "Port Jefferson Station", + "state": "New York" + }, + { + "city": "Port Jervis", + "state": "New York" + }, + { + "city": "Port Lavaca", + "state": "Texas" + }, + { + "city": "Port Neches", + "state": "Texas" + }, + { + "city": "Port Orange", + "state": "Florida" + }, + { + "city": "Port Orchard", + "state": "Washington" + }, + { + "city": "Port Salerno", + "state": "Florida" + }, + { + "city": "Port St. John", + "state": "Florida" + }, + { + "city": "Port St. Lucie", + "state": "Florida" + }, + { + "city": "Port Townsend", + "state": "Washington" + }, + { + "city": "Port Washington", + "state": "New York" + }, + { + "city": "Port Washington", + "state": "Wisconsin" + }, + { + "city": "Portage", + "state": "Wisconsin" + }, + { + "city": "Portage", + "state": "Indiana" + }, + { + "city": "Portage", + "state": "Michigan" + }, + { + "city": "Portage Lakes", + "state": "Ohio" + }, + { + "city": "Portales", + "state": "New Mexico" + }, + { + "city": "Porter", + "state": "New York" + }, + { + "city": "Porterville", + "state": "California" + }, + { + "city": "Portland", + "state": "Connecticut" + }, + { + "city": "Portland", + "state": "Maine" + }, + { + "city": "Portland", + "state": "Indiana" + }, + { + "city": "Portland", + "state": "Tennessee" + }, + { + "city": "Portland", + "state": "Texas" + }, + { + "city": "Portland", + "state": "Oregon" + }, + { + "city": "Portola Hills", + "state": "California" + }, + { + "city": "Portsmouth", + "state": "Rhode Island" + }, + { + "city": "Portsmouth", + "state": "Ohio" + }, + { + "city": "Portsmouth", + "state": "New Hampshire" + }, + { + "city": "Portsmouth", + "state": "Virginia" + }, + { + "city": "Post Falls", + "state": "Idaho" + }, + { + "city": "Poteau", + "state": "Oklahoma" + }, + { + "city": "Potomac", + "state": "Maryland" + }, + { + "city": "Potsdam", + "state": "New York" + }, + { + "city": "Potsdam", + "state": "New York" + }, + { + "city": "Pottstown", + "state": "Pennsylvania" + }, + { + "city": "Pottsville", + "state": "Pennsylvania" + }, + { + "city": "Poughkeepsie", + "state": "New York" + }, + { + "city": "Poughkeepsie", + "state": "New York" + }, + { + "city": "Poulsbo", + "state": "Washington" + }, + { + "city": "Poway", + "state": "California" + }, + { + "city": "Powder Springs", + "state": "Georgia" + }, + { + "city": "Powell", + "state": "Ohio" + }, + { + "city": "Prairie du Chien", + "state": "Wisconsin" + }, + { + "city": "Prairie Ridge", + "state": "Washington" + }, + { + "city": "Prairie Village", + "state": "Kansas" + }, + { + "city": "Pratt", + "state": "Kansas" + }, + { + "city": "Prattville", + "state": "Alabama" + }, + { + "city": "Prescott", + "state": "Arizona" + }, + { + "city": "Prescott Valley", + "state": "Arizona" + }, + { + "city": "Presque Isle", + "state": "Maine" + }, + { + "city": "Price", + "state": "Utah" + }, + { + "city": "Prichard", + "state": "Alabama" + }, + { + "city": "Prien", + "state": "Louisiana" + }, + { + "city": "Princeton", + "state": "Kentucky" + }, + { + "city": "Princeton", + "state": "Florida" + }, + { + "city": "Princeton", + "state": "Indiana" + }, + { + "city": "Princeton", + "state": "Illinois" + }, + { + "city": "Princeton", + "state": "New Jersey" + }, + { + "city": "Princeton", + "state": "West Virginia" + }, + { + "city": "Princeton Meadows", + "state": "New Jersey" + }, + { + "city": "Prineville", + "state": "Oregon" + }, + { + "city": "Prior Lake", + "state": "Minnesota" + }, + { + "city": "Progress", + "state": "Pennsylvania" + }, + { + "city": "Prospect", + "state": "Connecticut" + }, + { + "city": "Prospect Heights", + "state": "Illinois" + }, + { + "city": "Prospect Park", + "state": "Pennsylvania" + }, + { + "city": "Providence", + "state": "Rhode Island" + }, + { + "city": "Provo", + "state": "Utah" + }, + { + "city": "Prunedale", + "state": "California" + }, + { + "city": "Pryor Creek", + "state": "Oklahoma" + }, + { + "city": "Pueblo", + "state": "Colorado" + }, + { + "city": "Pueblo West", + "state": "Colorado" + }, + { + "city": "Pukalani", + "state": "Hawaii" + }, + { + "city": "Pulaski", + "state": "Tennessee" + }, + { + "city": "Pulaski", + "state": "Virginia" + }, + { + "city": "Pullman", + "state": "Washington" + }, + { + "city": "Punta Gorda", + "state": "Florida" + }, + { + "city": "Punxsutawney", + "state": "Pennsylvania" + }, + { + "city": "Putnam", + "state": "Connecticut" + }, + { + "city": "Putnam District", + "state": "Connecticut" + }, + { + "city": "Putnam Valley", + "state": "New York" + }, + { + "city": "Puyallup", + "state": "Washington" + }, + { + "city": "Quakertown", + "state": "Pennsylvania" + }, + { + "city": "Quantico Station", + "state": "Virginia" + }, + { + "city": "Quartz Hill", + "state": "California" + }, + { + "city": "Queensbury", + "state": "New York" + }, + { + "city": "Quincy", + "state": "Florida" + }, + { + "city": "Quincy", + "state": "Illinois" + }, + { + "city": "Quincy", + "state": "Massachusetts" + }, + { + "city": "Raceland", + "state": "Louisiana" + }, + { + "city": "Racine", + "state": "Wisconsin" + }, + { + "city": "Radcliff", + "state": "Kentucky" + }, + { + "city": "Radford", + "state": "Virginia" + }, + { + "city": "Radnor Township", + "state": "Pennsylvania" + }, + { + "city": "Rahway", + "state": "New Jersey" + }, + { + "city": "Rainbow City", + "state": "Alabama" + }, + { + "city": "Raleigh", + "state": "North Carolina" + }, + { + "city": "Ralston", + "state": "Nebraska" + }, + { + "city": "Ramapo", + "state": "New York" + }, + { + "city": "Ramblewood", + "state": "New Jersey" + }, + { + "city": "Ramona", + "state": "California" + }, + { + "city": "Ramsey", + "state": "New Jersey" + }, + { + "city": "Ramsey", + "state": "Minnesota" + }, + { + "city": "Rancho Cordova", + "state": "California" + }, + { + "city": "Rancho Cucamonga", + "state": "California" + }, + { + "city": "Rancho Mirage", + "state": "California" + }, + { + "city": "Rancho Palos Verdes", + "state": "California" + }, + { + "city": "Rancho San Diego", + "state": "California" + }, + { + "city": "Rancho Santa Margarita", + "state": "California" + }, + { + "city": "Randallstown", + "state": "Maryland" + }, + { + "city": "Randolph", + "state": "Massachusetts" + }, + { + "city": "Randolph", + "state": "Massachusetts" + }, + { + "city": "Rantoul", + "state": "Illinois" + }, + { + "city": "Rapid City", + "state": "South Dakota" + }, + { + "city": "Rapid Valley", + "state": "South Dakota" + }, + { + "city": "Raritan", + "state": "New Jersey" + }, + { + "city": "Raton", + "state": "New Mexico" + }, + { + "city": "Ravenna", + "state": "Ohio" + }, + { + "city": "Rawlins", + "state": "Wyoming" + }, + { + "city": "Raymond", + "state": "New Hampshire" + }, + { + "city": "Raymondville", + "state": "Texas" + }, + { + "city": "Raymore", + "state": "Missouri" + }, + { + "city": "Rayne", + "state": "Louisiana" + }, + { + "city": "Raynham", + "state": "Massachusetts" + }, + { + "city": "Raytown", + "state": "Missouri" + }, + { + "city": "Reading", + "state": "Massachusetts" + }, + { + "city": "Reading", + "state": "Massachusetts" + }, + { + "city": "Reading", + "state": "Pennsylvania" + }, + { + "city": "Reading", + "state": "Ohio" + }, + { + "city": "Red Bank", + "state": "South Carolina" + }, + { + "city": "Red Bank", + "state": "Tennessee" + }, + { + "city": "Red Bank", + "state": "New Jersey" + }, + { + "city": "Red Bluff", + "state": "California" + }, + { + "city": "Red Hill", + "state": "South Carolina" + }, + { + "city": "Red Hook", + "state": "New York" + }, + { + "city": "Red Lion", + "state": "Pennsylvania" + }, + { + "city": "Red Oak", + "state": "Iowa" + }, + { + "city": "Red Wing", + "state": "Minnesota" + }, + { + "city": "Redan", + "state": "Georgia" + }, + { + "city": "Redding", + "state": "Connecticut" + }, + { + "city": "Redding", + "state": "California" + }, + { + "city": "Redford", + "state": "Michigan" + }, + { + "city": "Redland", + "state": "Maryland" + }, + { + "city": "Redlands", + "state": "California" + }, + { + "city": "Redlands", + "state": "Colorado" + }, + { + "city": "Redmond", + "state": "Oregon" + }, + { + "city": "Redmond", + "state": "Washington" + }, + { + "city": "Redondo Beach", + "state": "California" + }, + { + "city": "Redwood City", + "state": "California" + }, + { + "city": "Reedley", + "state": "California" + }, + { + "city": "Reedsburg", + "state": "Wisconsin" + }, + { + "city": "Rehoboth", + "state": "Massachusetts" + }, + { + "city": "Reidsville", + "state": "North Carolina" + }, + { + "city": "Reisterstown", + "state": "Maryland" + }, + { + "city": "Rendon", + "state": "Texas" + }, + { + "city": "Reno", + "state": "Nevada" + }, + { + "city": "Rensselaer", + "state": "New York" + }, + { + "city": "Renton", + "state": "Washington" + }, + { + "city": "Republic", + "state": "Missouri" + }, + { + "city": "Reserve", + "state": "Louisiana" + }, + { + "city": "Reston", + "state": "Virginia" + }, + { + "city": "Revere", + "state": "Massachusetts" + }, + { + "city": "Rexburg", + "state": "Idaho" + }, + { + "city": "Reynoldsburg", + "state": "Ohio" + }, + { + "city": "Rhinebeck", + "state": "New York" + }, + { + "city": "Rhinelander", + "state": "Wisconsin" + }, + { + "city": "Rialto", + "state": "California" + }, + { + "city": "Rib Mountain", + "state": "Wisconsin" + }, + { + "city": "Rib Mountain", + "state": "Wisconsin" + }, + { + "city": "Rice Lake", + "state": "Wisconsin" + }, + { + "city": "Richardson", + "state": "Texas" + }, + { + "city": "Richboro", + "state": "Pennsylvania" + }, + { + "city": "Richfield", + "state": "Utah" + }, + { + "city": "Richfield", + "state": "Wisconsin" + }, + { + "city": "Richfield", + "state": "Minnesota" + }, + { + "city": "Richland", + "state": "Washington" + }, + { + "city": "Richland", + "state": "Mississippi" + }, + { + "city": "Richland Hills", + "state": "Texas" + }, + { + "city": "Richmond", + "state": "Texas" + }, + { + "city": "Richmond", + "state": "Rhode Island" + }, + { + "city": "Richmond", + "state": "Virginia" + }, + { + "city": "Richmond", + "state": "Missouri" + }, + { + "city": "Richmond", + "state": "Kentucky" + }, + { + "city": "Richmond", + "state": "Indiana" + }, + { + "city": "Richmond", + "state": "California" + }, + { + "city": "Richmond Heights", + "state": "Florida" + }, + { + "city": "Richmond Heights", + "state": "Missouri" + }, + { + "city": "Richmond Heights", + "state": "Ohio" + }, + { + "city": "Richmond Hill", + "state": "Georgia" + }, + { + "city": "Richmond West", + "state": "Florida" + }, + { + "city": "Richton Park", + "state": "Illinois" + }, + { + "city": "Ridge", + "state": "New York" + }, + { + "city": "Ridgecrest", + "state": "California" + }, + { + "city": "Ridgefield", + "state": "Connecticut" + }, + { + "city": "Ridgefield", + "state": "Connecticut" + }, + { + "city": "Ridgefield", + "state": "New Jersey" + }, + { + "city": "Ridgefield Park", + "state": "New Jersey" + }, + { + "city": "Ridgeland", + "state": "Mississippi" + }, + { + "city": "Ridgeway", + "state": "New York" + }, + { + "city": "Ridgewood", + "state": "New Jersey" + }, + { + "city": "Ridley Park", + "state": "Pennsylvania" + }, + { + "city": "Rifle", + "state": "Colorado" + }, + { + "city": "Ringwood", + "state": "New Jersey" + }, + { + "city": "Rio del Mar", + "state": "California" + }, + { + "city": "Rio Grande City", + "state": "Texas" + }, + { + "city": "Rio Linda", + "state": "California" + }, + { + "city": "Rio Rancho", + "state": "New Mexico" + }, + { + "city": "Ripley", + "state": "Tennessee" + }, + { + "city": "Ripon", + "state": "Wisconsin" + }, + { + "city": "Ripon", + "state": "California" + }, + { + "city": "Rittman", + "state": "Ohio" + }, + { + "city": "River Edge", + "state": "New Jersey" + }, + { + "city": "River Falls", + "state": "Wisconsin" + }, + { + "city": "River Forest", + "state": "Illinois" + }, + { + "city": "River Grove", + "state": "Illinois" + }, + { + "city": "River Oaks", + "state": "Texas" + }, + { + "city": "River Ridge", + "state": "Louisiana" + }, + { + "city": "River Rouge", + "state": "Michigan" + }, + { + "city": "River Vale", + "state": "New Jersey" + }, + { + "city": "Riverbank", + "state": "California" + }, + { + "city": "Riverdale", + "state": "Illinois" + }, + { + "city": "Riverdale", + "state": "Georgia" + }, + { + "city": "Riverdale", + "state": "Utah" + }, + { + "city": "Riverdale Park", + "state": "Maryland" + }, + { + "city": "Riverhead", + "state": "New York" + }, + { + "city": "Riverhead", + "state": "New York" + }, + { + "city": "Riverside", + "state": "Ohio" + }, + { + "city": "Riverside", + "state": "Maryland" + }, + { + "city": "Riverside", + "state": "Illinois" + }, + { + "city": "Riverside", + "state": "California" + }, + { + "city": "Riverton", + "state": "Utah" + }, + { + "city": "Riverton", + "state": "Wyoming" + }, + { + "city": "Riverton-Boulevard Park", + "state": "Washington" + }, + { + "city": "Riverview", + "state": "Florida" + }, + { + "city": "Riverview", + "state": "Michigan" + }, + { + "city": "Riviera Beach", + "state": "Maryland" + }, + { + "city": "Riviera Beach", + "state": "Florida" + }, + { + "city": "Roanoke", + "state": "Alabama" + }, + { + "city": "Roanoke", + "state": "Virginia" + }, + { + "city": "Roanoke Rapids", + "state": "North Carolina" + }, + { + "city": "Robbins", + "state": "Illinois" + }, + { + "city": "Robbinsdale", + "state": "Minnesota" + }, + { + "city": "Robinson", + "state": "Illinois" + }, + { + "city": "Robinson", + "state": "Texas" + }, + { + "city": "Robinson Township", + "state": "Pennsylvania" + }, + { + "city": "Robstown", + "state": "Texas" + }, + { + "city": "Rochelle", + "state": "Illinois" + }, + { + "city": "Rochester", + "state": "Minnesota" + }, + { + "city": "Rochester", + "state": "Michigan" + }, + { + "city": "Rochester", + "state": "Indiana" + }, + { + "city": "Rochester", + "state": "New York" + }, + { + "city": "Rochester", + "state": "New York" + }, + { + "city": "Rochester", + "state": "New Hampshire" + }, + { + "city": "Rochester Hills", + "state": "Michigan" + }, + { + "city": "Rock Falls", + "state": "Illinois" + }, + { + "city": "Rock Hill", + "state": "South Carolina" + }, + { + "city": "Rock Island", + "state": "Illinois" + }, + { + "city": "Rock Springs", + "state": "Wyoming" + }, + { + "city": "Rockaway", + "state": "New Jersey" + }, + { + "city": "Rockcreek", + "state": "Oregon" + }, + { + "city": "Rockford", + "state": "Illinois" + }, + { + "city": "Rockingham", + "state": "North Carolina" + }, + { + "city": "Rockland", + "state": "Massachusetts" + }, + { + "city": "Rockland", + "state": "Maine" + }, + { + "city": "Rockledge", + "state": "Florida" + }, + { + "city": "Rocklin", + "state": "California" + }, + { + "city": "Rockport", + "state": "Massachusetts" + }, + { + "city": "Rockport", + "state": "Texas" + }, + { + "city": "Rockville", + "state": "Maryland" + }, + { + "city": "Rockville", + "state": "Connecticut" + }, + { + "city": "Rockville Centre", + "state": "New York" + }, + { + "city": "Rockwall", + "state": "Texas" + }, + { + "city": "Rocky Hill", + "state": "Connecticut" + }, + { + "city": "Rocky Mount", + "state": "North Carolina" + }, + { + "city": "Rocky Point", + "state": "New York" + }, + { + "city": "Rocky River", + "state": "Ohio" + }, + { + "city": "Rodeo", + "state": "California" + }, + { + "city": "Roeland Park", + "state": "Kansas" + }, + { + "city": "Rogers", + "state": "Arkansas" + }, + { + "city": "Rohnert Park", + "state": "California" + }, + { + "city": "Rolla", + "state": "Missouri" + }, + { + "city": "Rolling Hills Estates", + "state": "California" + }, + { + "city": "Rolling Meadows", + "state": "Illinois" + }, + { + "city": "Roma", + "state": "Texas" + }, + { + "city": "Rome", + "state": "New York" + }, + { + "city": "Rome", + "state": "Georgia" + }, + { + "city": "Romeoville", + "state": "Illinois" + }, + { + "city": "Romulus", + "state": "Michigan" + }, + { + "city": "Ronkonkoma", + "state": "New York" + }, + { + "city": "Roosevelt", + "state": "New York" + }, + { + "city": "Rosamond", + "state": "California" + }, + { + "city": "Rosaryville", + "state": "Maryland" + }, + { + "city": "Roscoe", + "state": "Illinois" + }, + { + "city": "Rose Hill", + "state": "Virginia" + }, + { + "city": "Roseburg", + "state": "Oregon" + }, + { + "city": "Rosedale", + "state": "Maryland" + }, + { + "city": "Rosedale", + "state": "California" + }, + { + "city": "Roseland", + "state": "California" + }, + { + "city": "Roselle", + "state": "Illinois" + }, + { + "city": "Roselle", + "state": "New Jersey" + }, + { + "city": "Roselle Park", + "state": "New Jersey" + }, + { + "city": "Rosemead", + "state": "California" + }, + { + "city": "Rosemont", + "state": "California" + }, + { + "city": "Rosemount", + "state": "Minnesota" + }, + { + "city": "Rosenberg", + "state": "Texas" + }, + { + "city": "Rosendale", + "state": "New York" + }, + { + "city": "Roseville", + "state": "Minnesota" + }, + { + "city": "Roseville", + "state": "Michigan" + }, + { + "city": "Roseville", + "state": "California" + }, + { + "city": "Roslyn Heights", + "state": "New York" + }, + { + "city": "Ross Township", + "state": "Pennsylvania" + }, + { + "city": "Rossford", + "state": "Ohio" + }, + { + "city": "Rossmoor", + "state": "California" + }, + { + "city": "Rossmoor", + "state": "Maryland" + }, + { + "city": "Rossville", + "state": "Maryland" + }, + { + "city": "Roswell", + "state": "Georgia" + }, + { + "city": "Roswell", + "state": "New Mexico" + }, + { + "city": "Rotonda", + "state": "Florida" + }, + { + "city": "Rotterdam", + "state": "New York" + }, + { + "city": "Rotterdam", + "state": "New York" + }, + { + "city": "Round Lake Beach", + "state": "Illinois" + }, + { + "city": "Round Lake Park", + "state": "Illinois" + }, + { + "city": "Round Rock", + "state": "Texas" + }, + { + "city": "Rowland Heights", + "state": "California" + }, + { + "city": "Rowlett", + "state": "Texas" + }, + { + "city": "Roxboro", + "state": "North Carolina" + }, + { + "city": "Roy", + "state": "Utah" + }, + { + "city": "Royal Oak", + "state": "Michigan" + }, + { + "city": "Royal Palm Beach", + "state": "Florida" + }, + { + "city": "Royalton", + "state": "New York" + }, + { + "city": "Rubidoux", + "state": "California" + }, + { + "city": "Ruidoso", + "state": "New Mexico" + }, + { + "city": "Rumford", + "state": "Maine" + }, + { + "city": "Rumson", + "state": "New Jersey" + }, + { + "city": "Runnemede", + "state": "New Jersey" + }, + { + "city": "Ruskin", + "state": "Florida" + }, + { + "city": "Russellville", + "state": "Arkansas" + }, + { + "city": "Russellville", + "state": "Alabama" + }, + { + "city": "Russellville", + "state": "Kentucky" + }, + { + "city": "Ruston", + "state": "Louisiana" + }, + { + "city": "Rutherford", + "state": "New Jersey" + }, + { + "city": "Rutland", + "state": "Massachusetts" + }, + { + "city": "Rutland", + "state": "Vermont" + }, + { + "city": "Rye", + "state": "New York" + }, + { + "city": "Rye", + "state": "New York" + }, + { + "city": "Rye Brook", + "state": "New York" + }, + { + "city": "Sachse", + "state": "Texas" + }, + { + "city": "Saco", + "state": "Maine" + }, + { + "city": "Sacramento", + "state": "California" + }, + { + "city": "Saddle Brook", + "state": "New Jersey" + }, + { + "city": "Safety Harbor", + "state": "Florida" + }, + { + "city": "Safford", + "state": "Arizona" + }, + { + "city": "Saginaw", + "state": "Michigan" + }, + { + "city": "Saginaw", + "state": "Texas" + }, + { + "city": "Saginaw Township North", + "state": "Michigan" + }, + { + "city": "Saginaw Township South", + "state": "Michigan" + }, + { + "city": "Saks", + "state": "Alabama" + }, + { + "city": "Salamanca", + "state": "New York" + }, + { + "city": "Salem", + "state": "New Hampshire" + }, + { + "city": "Salem", + "state": "Ohio" + }, + { + "city": "Salem", + "state": "Oregon" + }, + { + "city": "Salem", + "state": "Virginia" + }, + { + "city": "Salem", + "state": "Wisconsin" + }, + { + "city": "Salem", + "state": "Massachusetts" + }, + { + "city": "Salem", + "state": "Illinois" + }, + { + "city": "Salem", + "state": "Indiana" + }, + { + "city": "Salida", + "state": "California" + }, + { + "city": "Salina", + "state": "Kansas" + }, + { + "city": "Salina", + "state": "New York" + }, + { + "city": "Salinas", + "state": "California" + }, + { + "city": "Saline", + "state": "Michigan" + }, + { + "city": "Salisbury", + "state": "Massachusetts" + }, + { + "city": "Salisbury", + "state": "Maryland" + }, + { + "city": "Salisbury", + "state": "New York" + }, + { + "city": "Salisbury", + "state": "North Carolina" + }, + { + "city": "Sallisaw", + "state": "Oklahoma" + }, + { + "city": "Salmon Creek", + "state": "Washington" + }, + { + "city": "Salt Lake City", + "state": "Utah" + }, + { + "city": "Sammamish", + "state": "Washington" + }, + { + "city": "San Angelo", + "state": "Texas" + }, + { + "city": "San Anselmo", + "state": "California" + }, + { + "city": "San Antonio", + "state": "Texas" + }, + { + "city": "San Benito", + "state": "Texas" + }, + { + "city": "San Bernardino", + "state": "California" + }, + { + "city": "San Bruno", + "state": "California" + }, + { + "city": "San Buenaventura", + "state": "California" + }, + { + "city": "San Carlos", + "state": "California" + }, + { + "city": "San Carlos Park", + "state": "Florida" + }, + { + "city": "San Clemente", + "state": "California" + }, + { + "city": "San Diego", + "state": "California" + }, + { + "city": "San Diego Country Estates", + "state": "California" + }, + { + "city": "San Dimas", + "state": "California" + }, + { + "city": "San Elizario", + "state": "Texas" + }, + { + "city": "San Fernando", + "state": "California" + }, + { + "city": "San Francisco", + "state": "California" + }, + { + "city": "San Gabriel", + "state": "California" + }, + { + "city": "San Jacinto", + "state": "California" + }, + { + "city": "San Jose", + "state": "California" + }, + { + "city": "San Juan", + "state": "Texas" + }, + { + "city": "San Juan Capistrano", + "state": "California" + }, + { + "city": "San Leandro", + "state": "California" + }, + { + "city": "San Lorenzo", + "state": "California" + }, + { + "city": "San Luis", + "state": "Arizona" + }, + { + "city": "San Luis Obispo", + "state": "California" + }, + { + "city": "San Marcos", + "state": "California" + }, + { + "city": "San Marcos", + "state": "Texas" + }, + { + "city": "San Marino", + "state": "California" + }, + { + "city": "San Mateo", + "state": "California" + }, + { + "city": "San Pablo", + "state": "California" + }, + { + "city": "San Rafael", + "state": "California" + }, + { + "city": "San Ramon", + "state": "California" + }, + { + "city": "Sanatoga", + "state": "Pennsylvania" + }, + { + "city": "Sand Lake", + "state": "New York" + }, + { + "city": "Sand Springs", + "state": "Oklahoma" + }, + { + "city": "Sandalfoot Cove", + "state": "Florida" + }, + { + "city": "Sandersville", + "state": "Georgia" + }, + { + "city": "Sandpoint", + "state": "Idaho" + }, + { + "city": "Sandusky", + "state": "Ohio" + }, + { + "city": "Sandusky South", + "state": "Ohio" + }, + { + "city": "Sandwich", + "state": "Illinois" + }, + { + "city": "Sandwich", + "state": "Massachusetts" + }, + { + "city": "Sandy", + "state": "Utah" + }, + { + "city": "Sandy Springs", + "state": "Georgia" + }, + { + "city": "Sanford", + "state": "Florida" + }, + { + "city": "Sanford", + "state": "Maine" + }, + { + "city": "Sanford", + "state": "Maine" + }, + { + "city": "Sanford", + "state": "North Carolina" + }, + { + "city": "Sanger", + "state": "California" + }, + { + "city": "Sanibel", + "state": "Florida" + }, + { + "city": "Sans Souci", + "state": "South Carolina" + }, + { + "city": "Santa Ana", + "state": "California" + }, + { + "city": "Santa Barbara", + "state": "California" + }, + { + "city": "Santa Clara", + "state": "California" + }, + { + "city": "Santa Clarita", + "state": "California" + }, + { + "city": "Santa Cruz", + "state": "California" + }, + { + "city": "Santa Fe", + "state": "New Mexico" + }, + { + "city": "Santa Fe", + "state": "Texas" + }, + { + "city": "Santa Fe Springs", + "state": "California" + }, + { + "city": "Santa Maria", + "state": "California" + }, + { + "city": "Santa Monica", + "state": "California" + }, + { + "city": "Santa Paula", + "state": "California" + }, + { + "city": "Santa Rosa", + "state": "California" + }, + { + "city": "Santee", + "state": "California" + }, + { + "city": "Sappington", + "state": "Missouri" + }, + { + "city": "Sapulpa", + "state": "Oklahoma" + }, + { + "city": "Saraland", + "state": "Alabama" + }, + { + "city": "Sarasota", + "state": "Florida" + }, + { + "city": "Sarasota Springs", + "state": "Florida" + }, + { + "city": "Saratoga", + "state": "California" + }, + { + "city": "Saratoga Springs", + "state": "New York" + }, + { + "city": "Sartell", + "state": "Minnesota" + }, + { + "city": "Satellite Beach", + "state": "Florida" + }, + { + "city": "Saugerties", + "state": "New York" + }, + { + "city": "Saugus", + "state": "Massachusetts" + }, + { + "city": "Saugus", + "state": "Massachusetts" + }, + { + "city": "Sauk Rapids", + "state": "Minnesota" + }, + { + "city": "Sauk Village", + "state": "Illinois" + }, + { + "city": "Sault Ste. Marie", + "state": "Michigan" + }, + { + "city": "Sausalito", + "state": "California" + }, + { + "city": "Savage", + "state": "Minnesota" + }, + { + "city": "Savage-Guilford", + "state": "Maryland" + }, + { + "city": "Savannah", + "state": "Georgia" + }, + { + "city": "Savannah", + "state": "Tennessee" + }, + { + "city": "Sayreville", + "state": "New Jersey" + }, + { + "city": "Sayville", + "state": "New York" + }, + { + "city": "Scarborough", + "state": "Maine" + }, + { + "city": "Scarsdale", + "state": "New York" + }, + { + "city": "Scarsdale", + "state": "New York" + }, + { + "city": "Schaghticoke", + "state": "New York" + }, + { + "city": "Schaumburg", + "state": "Illinois" + }, + { + "city": "Schenectady", + "state": "New York" + }, + { + "city": "Schererville", + "state": "Indiana" + }, + { + "city": "Schertz", + "state": "Texas" + }, + { + "city": "Schiller Park", + "state": "Illinois" + }, + { + "city": "Schodack", + "state": "New York" + }, + { + "city": "Schofield Barracks", + "state": "Hawaii" + }, + { + "city": "Schroeppel", + "state": "New York" + }, + { + "city": "Scituate", + "state": "Rhode Island" + }, + { + "city": "Scituate", + "state": "Massachusetts" + }, + { + "city": "Scotch Plains", + "state": "New Jersey" + }, + { + "city": "Scotchtown", + "state": "New York" + }, + { + "city": "Scotia", + "state": "New York" + }, + { + "city": "Scott", + "state": "Louisiana" + }, + { + "city": "Scott Lake", + "state": "Florida" + }, + { + "city": "Scott Township", + "state": "Pennsylvania" + }, + { + "city": "Scottdale", + "state": "Georgia" + }, + { + "city": "Scotts Valley", + "state": "California" + }, + { + "city": "Scottsbluff", + "state": "Nebraska" + }, + { + "city": "Scottsboro", + "state": "Alabama" + }, + { + "city": "Scottsburg", + "state": "Indiana" + }, + { + "city": "Scottsdale", + "state": "Arizona" + }, + { + "city": "Scranton", + "state": "Pennsylvania" + }, + { + "city": "Scriba", + "state": "New York" + }, + { + "city": "Seabrook", + "state": "New Hampshire" + }, + { + "city": "Seabrook", + "state": "Texas" + }, + { + "city": "Seaford", + "state": "New York" + }, + { + "city": "Seaford", + "state": "Delaware" + }, + { + "city": "Seagoville", + "state": "Texas" + }, + { + "city": "Seal Beach", + "state": "California" + }, + { + "city": "Searcy", + "state": "Arkansas" + }, + { + "city": "Seaside", + "state": "California" + }, + { + "city": "SeaTac", + "state": "Washington" + }, + { + "city": "Seattle", + "state": "Washington" + }, + { + "city": "Seattle Hill-Silver Firs", + "state": "Washington" + }, + { + "city": "Sebastian", + "state": "Florida" + }, + { + "city": "Sebastopol", + "state": "California" + }, + { + "city": "Sebring", + "state": "Florida" + }, + { + "city": "Secaucus", + "state": "New Jersey" + }, + { + "city": "Security-Widefield", + "state": "Colorado" + }, + { + "city": "Sedalia", + "state": "Missouri" + }, + { + "city": "Sedona", + "state": "Arizona" + }, + { + "city": "Sedro-Woolley", + "state": "Washington" + }, + { + "city": "Seekonk", + "state": "Massachusetts" + }, + { + "city": "Seguin", + "state": "Texas" + }, + { + "city": "Selah", + "state": "Washington" + }, + { + "city": "Selden", + "state": "New York" + }, + { + "city": "Sellersburg", + "state": "Indiana" + }, + { + "city": "Selma", + "state": "Alabama" + }, + { + "city": "Selma", + "state": "California" + }, + { + "city": "Seminole", + "state": "Florida" + }, + { + "city": "Seminole", + "state": "Oklahoma" + }, + { + "city": "Senatobia", + "state": "Mississippi" + }, + { + "city": "Seneca", + "state": "South Carolina" + }, + { + "city": "Seneca Falls", + "state": "New York" + }, + { + "city": "Seneca Falls", + "state": "New York" + }, + { + "city": "Setauket-East Setauket", + "state": "New York" + }, + { + "city": "Seven Corners", + "state": "Virginia" + }, + { + "city": "Seven Hills", + "state": "Ohio" + }, + { + "city": "Seven Oaks", + "state": "South Carolina" + }, + { + "city": "Severn", + "state": "Maryland" + }, + { + "city": "Severna Park", + "state": "Maryland" + }, + { + "city": "Sevierville", + "state": "Tennessee" + }, + { + "city": "Seward", + "state": "Nebraska" + }, + { + "city": "Seymour", + "state": "Tennessee" + }, + { + "city": "Seymour", + "state": "Indiana" + }, + { + "city": "Seymour", + "state": "Connecticut" + }, + { + "city": "Shady Hills", + "state": "Florida" + }, + { + "city": "Shafter", + "state": "California" + }, + { + "city": "Shaker Heights", + "state": "Ohio" + }, + { + "city": "Shakopee", + "state": "Minnesota" + }, + { + "city": "Shaler Township", + "state": "Pennsylvania" + }, + { + "city": "Shamokin", + "state": "Pennsylvania" + }, + { + "city": "Sharon", + "state": "Pennsylvania" + }, + { + "city": "Sharon", + "state": "Massachusetts" + }, + { + "city": "Sharonville", + "state": "Ohio" + }, + { + "city": "Shasta Lake", + "state": "California" + }, + { + "city": "Shawangunk", + "state": "New York" + }, + { + "city": "Shawano", + "state": "Wisconsin" + }, + { + "city": "Shawnee", + "state": "Oklahoma" + }, + { + "city": "Shawnee", + "state": "Kansas" + }, + { + "city": "Sheboygan", + "state": "Wisconsin" + }, + { + "city": "Sheboygan Falls", + "state": "Wisconsin" + }, + { + "city": "Sheffield", + "state": "Alabama" + }, + { + "city": "Sheffield Lake", + "state": "Ohio" + }, + { + "city": "Shelburne", + "state": "Vermont" + }, + { + "city": "Shelby", + "state": "Ohio" + }, + { + "city": "Shelby", + "state": "North Carolina" + }, + { + "city": "Shelby", + "state": "Michigan" + }, + { + "city": "Shelbyville", + "state": "Kentucky" + }, + { + "city": "Shelbyville", + "state": "Indiana" + }, + { + "city": "Shelbyville", + "state": "Tennessee" + }, + { + "city": "Shelton", + "state": "Washington" + }, + { + "city": "Shelton", + "state": "Connecticut" + }, + { + "city": "Shelton", + "state": "Connecticut" + }, + { + "city": "Shenandoah", + "state": "Louisiana" + }, + { + "city": "Shepherdsville", + "state": "Kentucky" + }, + { + "city": "Sheridan", + "state": "Wyoming" + }, + { + "city": "Sherman", + "state": "Texas" + }, + { + "city": "Sherrelwood", + "state": "Colorado" + }, + { + "city": "Sherwood", + "state": "Arkansas" + }, + { + "city": "Sherwood", + "state": "Oregon" + }, + { + "city": "Shields", + "state": "Michigan" + }, + { + "city": "Shiloh", + "state": "Illinois" + }, + { + "city": "Shiloh", + "state": "Pennsylvania" + }, + { + "city": "Shiloh", + "state": "Ohio" + }, + { + "city": "Shiprock", + "state": "New Mexico" + }, + { + "city": "Shirley", + "state": "New York" + }, + { + "city": "Shirley", + "state": "Massachusetts" + }, + { + "city": "Shively", + "state": "Kentucky" + }, + { + "city": "Shoreline", + "state": "Washington" + }, + { + "city": "Shoreview", + "state": "Minnesota" + }, + { + "city": "Shorewood", + "state": "Minnesota" + }, + { + "city": "Shorewood", + "state": "Illinois" + }, + { + "city": "Shorewood", + "state": "Wisconsin" + }, + { + "city": "Show Low", + "state": "Arizona" + }, + { + "city": "Shreveport", + "state": "Louisiana" + }, + { + "city": "Shrewsbury", + "state": "Missouri" + }, + { + "city": "Shrewsbury", + "state": "Massachusetts" + }, + { + "city": "Sidney", + "state": "New York" + }, + { + "city": "Sidney", + "state": "Nebraska" + }, + { + "city": "Sidney", + "state": "Ohio" + }, + { + "city": "Sierra Madre", + "state": "California" + }, + { + "city": "Sierra Vista", + "state": "Arizona" + }, + { + "city": "Sierra Vista Southeast", + "state": "Arizona" + }, + { + "city": "Siesta Key", + "state": "Florida" + }, + { + "city": "Signal Hill", + "state": "California" + }, + { + "city": "Signal Mountain", + "state": "Tennessee" + }, + { + "city": "Sikeston", + "state": "Missouri" + }, + { + "city": "Siler City", + "state": "North Carolina" + }, + { + "city": "Siloam Springs", + "state": "Arkansas" + }, + { + "city": "Silsbee", + "state": "Texas" + }, + { + "city": "Silver City", + "state": "New Mexico" + }, + { + "city": "Silver Spring", + "state": "Maryland" + }, + { + "city": "Silver Springs Shores", + "state": "Florida" + }, + { + "city": "Silverdale", + "state": "Washington" + }, + { + "city": "Silverton", + "state": "Oregon" + }, + { + "city": "Silvis", + "state": "Illinois" + }, + { + "city": "Simi Valley", + "state": "California" + }, + { + "city": "Simpsonville", + "state": "South Carolina" + }, + { + "city": "Simsbury", + "state": "Connecticut" + }, + { + "city": "Sioux Center", + "state": "Iowa" + }, + { + "city": "Sioux City", + "state": "Iowa" + }, + { + "city": "Sioux Falls", + "state": "South Dakota" + }, + { + "city": "Sitka and", + "state": "Alaska" + }, + { + "city": "Skaneateles", + "state": "New York" + }, + { + "city": "Skidaway Island", + "state": "Georgia" + }, + { + "city": "Skokie", + "state": "Illinois" + }, + { + "city": "Skowhegan", + "state": "Maine" + }, + { + "city": "Skowhegan", + "state": "Maine" + }, + { + "city": "Slaton", + "state": "Texas" + }, + { + "city": "Sleepy Hollow", + "state": "New York" + }, + { + "city": "Slidell", + "state": "Louisiana" + }, + { + "city": "Smithfield", + "state": "North Carolina" + }, + { + "city": "Smithfield", + "state": "Rhode Island" + }, + { + "city": "Smithfield", + "state": "Utah" + }, + { + "city": "Smithfield", + "state": "Virginia" + }, + { + "city": "Smiths", + "state": "Alabama" + }, + { + "city": "Smithtown", + "state": "New York" + }, + { + "city": "Smithtown", + "state": "New York" + }, + { + "city": "Smyrna", + "state": "Tennessee" + }, + { + "city": "Smyrna", + "state": "Georgia" + }, + { + "city": "Snellville", + "state": "Georgia" + }, + { + "city": "Snohomish", + "state": "Washington" + }, + { + "city": "Snyder", + "state": "Texas" + }, + { + "city": "Socastee", + "state": "South Carolina" + }, + { + "city": "Socorro", + "state": "New Mexico" + }, + { + "city": "Socorro", + "state": "Texas" + }, + { + "city": "Soddy-Daisy", + "state": "Tennessee" + }, + { + "city": "Sodus", + "state": "New York" + }, + { + "city": "Solana Beach", + "state": "California" + }, + { + "city": "Soledad", + "state": "California" + }, + { + "city": "Solon", + "state": "Ohio" + }, + { + "city": "Solvay", + "state": "New York" + }, + { + "city": "Somers", + "state": "New York" + }, + { + "city": "Somers", + "state": "Wisconsin" + }, + { + "city": "Somers", + "state": "Connecticut" + }, + { + "city": "Somers Point", + "state": "New Jersey" + }, + { + "city": "Somerset", + "state": "New Jersey" + }, + { + "city": "Somerset", + "state": "Pennsylvania" + }, + { + "city": "Somerset", + "state": "Kentucky" + }, + { + "city": "Somerset", + "state": "Massachusetts" + }, + { + "city": "Somerset", + "state": "Massachusetts" + }, + { + "city": "Somersworth", + "state": "New Hampshire" + }, + { + "city": "Somerton", + "state": "Arizona" + }, + { + "city": "Somerville", + "state": "Massachusetts" + }, + { + "city": "Somerville", + "state": "New Jersey" + }, + { + "city": "Sonoma", + "state": "California" + }, + { + "city": "Souderton", + "state": "Pennsylvania" + }, + { + "city": "Sound Beach", + "state": "New York" + }, + { + "city": "South Amboy", + "state": "New Jersey" + }, + { + "city": "South Bend", + "state": "Indiana" + }, + { + "city": "South Berwick", + "state": "Maine" + }, + { + "city": "South Boston", + "state": "Virginia" + }, + { + "city": "South Bradenton", + "state": "Florida" + }, + { + "city": "South Burlington", + "state": "Vermont" + }, + { + "city": "South Charleston", + "state": "West Virginia" + }, + { + "city": "South Cleveland", + "state": "Tennessee" + }, + { + "city": "South Daytona", + "state": "Florida" + }, + { + "city": "South El Monte", + "state": "California" + }, + { + "city": "South Elgin", + "state": "Illinois" + }, + { + "city": "South Euclid", + "state": "Ohio" + }, + { + "city": "South Farmingdale", + "state": "New York" + }, + { + "city": "South Gate", + "state": "Maryland" + }, + { + "city": "South Gate", + "state": "California" + }, + { + "city": "South Hadley", + "state": "Massachusetts" + }, + { + "city": "South Highpoint", + "state": "Florida" + }, + { + "city": "South Hill", + "state": "New York" + }, + { + "city": "South Hill", + "state": "Washington" + }, + { + "city": "South Holland", + "state": "Illinois" + }, + { + "city": "South Houston", + "state": "Texas" + }, + { + "city": "South Huntington", + "state": "New York" + }, + { + "city": "South Jordan", + "state": "Utah" + }, + { + "city": "South Kensington", + "state": "Maryland" + }, + { + "city": "South Kingstown", + "state": "Rhode Island" + }, + { + "city": "South Lake Tahoe", + "state": "California" + }, + { + "city": "South Laurel", + "state": "Maryland" + }, + { + "city": "South Lockport", + "state": "New York" + }, + { + "city": "South Lyon", + "state": "Michigan" + }, + { + "city": "South Miami", + "state": "Florida" + }, + { + "city": "South Miami Heights", + "state": "Florida" + }, + { + "city": "South Milwaukee", + "state": "Wisconsin" + }, + { + "city": "South Monroe", + "state": "Michigan" + }, + { + "city": "South Ogden", + "state": "Utah" + }, + { + "city": "South Orange", + "state": "New Jersey" + }, + { + "city": "South Oroville", + "state": "California" + }, + { + "city": "South Park Township", + "state": "Pennsylvania" + }, + { + "city": "South Pasadena", + "state": "California" + }, + { + "city": "South Patrick Shores", + "state": "Florida" + }, + { + "city": "South Plainfield", + "state": "New Jersey" + }, + { + "city": "South Portland", + "state": "Maine" + }, + { + "city": "South River", + "state": "New Jersey" + }, + { + "city": "South Salt Lake", + "state": "Utah" + }, + { + "city": "South San Francisco", + "state": "California" + }, + { + "city": "South San Gabriel", + "state": "California" + }, + { + "city": "South San Jose Hills", + "state": "California" + }, + { + "city": "South Sioux City", + "state": "Nebraska" + }, + { + "city": "South St. Paul", + "state": "Minnesota" + }, + { + "city": "South Valley", + "state": "New Mexico" + }, + { + "city": "South Venice", + "state": "Florida" + }, + { + "city": "South Whittier", + "state": "California" + }, + { + "city": "South Williamsport", + "state": "Pennsylvania" + }, + { + "city": "South Windsor", + "state": "Connecticut" + }, + { + "city": "South Yarmouth", + "state": "Massachusetts" + }, + { + "city": "South Yuba City", + "state": "California" + }, + { + "city": "Southampton", + "state": "New York" + }, + { + "city": "Southaven", + "state": "Mississippi" + }, + { + "city": "Southborough", + "state": "Massachusetts" + }, + { + "city": "Southbridge", + "state": "Massachusetts" + }, + { + "city": "Southbridge", + "state": "Massachusetts" + }, + { + "city": "Southbury", + "state": "Connecticut" + }, + { + "city": "Southeast", + "state": "New York" + }, + { + "city": "Southeast Arcadia", + "state": "Florida" + }, + { + "city": "Southern Pines", + "state": "North Carolina" + }, + { + "city": "Southfield", + "state": "Michigan" + }, + { + "city": "Southgate", + "state": "Michigan" + }, + { + "city": "Southgate", + "state": "Florida" + }, + { + "city": "Southglenn", + "state": "Colorado" + }, + { + "city": "Southington", + "state": "Connecticut" + }, + { + "city": "Southlake", + "state": "Texas" + }, + { + "city": "Southold", + "state": "New York" + }, + { + "city": "Southport", + "state": "New York" + }, + { + "city": "Southport", + "state": "New York" + }, + { + "city": "Southside", + "state": "Alabama" + }, + { + "city": "Southwick", + "state": "Massachusetts" + }, + { + "city": "Southwood Acres", + "state": "Connecticut" + }, + { + "city": "Spanaway", + "state": "Washington" + }, + { + "city": "Spanish Fork", + "state": "Utah" + }, + { + "city": "Spanish Lake", + "state": "Missouri" + }, + { + "city": "Spanish Springs", + "state": "Nevada" + }, + { + "city": "Sparks", + "state": "Nevada" + }, + { + "city": "Sparta", + "state": "Wisconsin" + }, + { + "city": "Spartanburg", + "state": "South Carolina" + }, + { + "city": "Spearfish", + "state": "South Dakota" + }, + { + "city": "Speedway", + "state": "Indiana" + }, + { + "city": "Spencer", + "state": "Iowa" + }, + { + "city": "Spencer", + "state": "Massachusetts" + }, + { + "city": "Spencer", + "state": "Massachusetts" + }, + { + "city": "Spokane", + "state": "Washington" + }, + { + "city": "Spotswood", + "state": "New Jersey" + }, + { + "city": "Spring", + "state": "Texas" + }, + { + "city": "Spring Creek", + "state": "Nevada" + }, + { + "city": "Spring Hill", + "state": "Tennessee" + }, + { + "city": "Spring Hill", + "state": "Florida" + }, + { + "city": "Spring Lake", + "state": "North Carolina" + }, + { + "city": "Spring Lake Park", + "state": "Minnesota" + }, + { + "city": "Spring Valley", + "state": "California" + }, + { + "city": "Spring Valley", + "state": "Nevada" + }, + { + "city": "Spring Valley", + "state": "New York" + }, + { + "city": "Springboro", + "state": "Ohio" + }, + { + "city": "Springdale", + "state": "Ohio" + }, + { + "city": "Springdale", + "state": "New Jersey" + }, + { + "city": "Springdale", + "state": "Arkansas" + }, + { + "city": "Springfield", + "state": "Florida" + }, + { + "city": "Springfield", + "state": "Missouri" + }, + { + "city": "Springfield", + "state": "Massachusetts" + }, + { + "city": "Springfield", + "state": "Illinois" + }, + { + "city": "Springfield", + "state": "New Jersey" + }, + { + "city": "Springfield", + "state": "Ohio" + }, + { + "city": "Springfield", + "state": "Oregon" + }, + { + "city": "Springfield", + "state": "Pennsylvania" + }, + { + "city": "Springfield", + "state": "Vermont" + }, + { + "city": "Springfield", + "state": "Tennessee" + }, + { + "city": "Springfield", + "state": "Virginia" + }, + { + "city": "Springville", + "state": "Utah" + }, + { + "city": "St. Albans", + "state": "Vermont" + }, + { + "city": "St. Albans", + "state": "West Virginia" + }, + { + "city": "St. Andrews", + "state": "South Carolina" + }, + { + "city": "St. Ann", + "state": "Missouri" + }, + { + "city": "St. Anthony", + "state": "Minnesota" + }, + { + "city": "St. Augustine", + "state": "Florida" + }, + { + "city": "St. Charles", + "state": "Missouri" + }, + { + "city": "St. Charles", + "state": "Illinois" + }, + { + "city": "St. Charles", + "state": "Maryland" + }, + { + "city": "St. Clair Shores", + "state": "Michigan" + }, + { + "city": "St. Cloud", + "state": "Minnesota" + }, + { + "city": "St. Cloud", + "state": "Florida" + }, + { + "city": "St. Dennis", + "state": "Kentucky" + }, + { + "city": "St. Francis", + "state": "Wisconsin" + }, + { + "city": "St. George", + "state": "Utah" + }, + { + "city": "St. Helens", + "state": "Oregon" + }, + { + "city": "St. James", + "state": "New York" + }, + { + "city": "St. John", + "state": "Indiana" + }, + { + "city": "St. John", + "state": "Missouri" + }, + { + "city": "St. Johns", + "state": "Michigan" + }, + { + "city": "St. Johnsbury", + "state": "Vermont" + }, + { + "city": "St. Johnsbury", + "state": "Vermont" + }, + { + "city": "St. Joseph", + "state": "Michigan" + }, + { + "city": "St. Joseph", + "state": "Missouri" + }, + { + "city": "St. Louis", + "state": "Missouri" + }, + { + "city": "St. Louis Park", + "state": "Minnesota" + }, + { + "city": "St. Martin", + "state": "Mississippi" + }, + { + "city": "St. Martinville", + "state": "Louisiana" + }, + { + "city": "St. Marys", + "state": "Georgia" + }, + { + "city": "St. Marys", + "state": "Pennsylvania" + }, + { + "city": "St. Marys", + "state": "Ohio" + }, + { + "city": "St. Matthews", + "state": "Kentucky" + }, + { + "city": "St. Michael", + "state": "Minnesota" + }, + { + "city": "St. Paul", + "state": "Minnesota" + }, + { + "city": "St. Pete Beach", + "state": "Florida" + }, + { + "city": "St. Peter", + "state": "Minnesota" + }, + { + "city": "St. Peters", + "state": "Missouri" + }, + { + "city": "St. Petersburg", + "state": "Florida" + }, + { + "city": "St. Rose", + "state": "Louisiana" + }, + { + "city": "St. Simons", + "state": "Georgia" + }, + { + "city": "St. Stephens", + "state": "North Carolina" + }, + { + "city": "Stafford", + "state": "Texas" + }, + { + "city": "Stafford", + "state": "Connecticut" + }, + { + "city": "Stamford", + "state": "Connecticut" + }, + { + "city": "Stamford", + "state": "Connecticut" + }, + { + "city": "Standish", + "state": "Maine" + }, + { + "city": "Stanford", + "state": "California" + }, + { + "city": "Stanton", + "state": "California" + }, + { + "city": "Starkville", + "state": "Mississippi" + }, + { + "city": "State College", + "state": "Pennsylvania" + }, + { + "city": "Statesboro", + "state": "Georgia" + }, + { + "city": "Statesville", + "state": "North Carolina" + }, + { + "city": "Staunton", + "state": "Virginia" + }, + { + "city": "Stayton", + "state": "Oregon" + }, + { + "city": "Steamboat Springs", + "state": "Colorado" + }, + { + "city": "Steger", + "state": "Illinois" + }, + { + "city": "Steilacoom", + "state": "Washington" + }, + { + "city": "Stephenville", + "state": "Texas" + }, + { + "city": "Sterling", + "state": "Illinois" + }, + { + "city": "Sterling", + "state": "Massachusetts" + }, + { + "city": "Sterling", + "state": "Colorado" + }, + { + "city": "Sterling Heights", + "state": "Michigan" + }, + { + "city": "Steubenville", + "state": "Ohio" + }, + { + "city": "Stevens Point", + "state": "Wisconsin" + }, + { + "city": "Stickney", + "state": "Illinois" + }, + { + "city": "Stillwater", + "state": "Minnesota" + }, + { + "city": "Stillwater", + "state": "New York" + }, + { + "city": "Stillwater", + "state": "Oklahoma" + }, + { + "city": "Stockbridge", + "state": "Georgia" + }, + { + "city": "Stockton", + "state": "California" + }, + { + "city": "Stone Mountain", + "state": "Georgia" + }, + { + "city": "Stonegate", + "state": "Colorado" + }, + { + "city": "Stoneham", + "state": "Massachusetts" + }, + { + "city": "Stoneham", + "state": "Massachusetts" + }, + { + "city": "Stonington", + "state": "Connecticut" + }, + { + "city": "Stony Brook", + "state": "New York" + }, + { + "city": "Stony Point", + "state": "New York" + }, + { + "city": "Stony Point", + "state": "New York" + }, + { + "city": "Storm Lake", + "state": "Iowa" + }, + { + "city": "Storrs", + "state": "Connecticut" + }, + { + "city": "Stoughton", + "state": "Massachusetts" + }, + { + "city": "Stoughton", + "state": "Wisconsin" + }, + { + "city": "Stow", + "state": "Ohio" + }, + { + "city": "Stowe Township", + "state": "Pennsylvania" + }, + { + "city": "Stratford", + "state": "New Jersey" + }, + { + "city": "Stratford", + "state": "Connecticut" + }, + { + "city": "Stratford", + "state": "Connecticut" + }, + { + "city": "Stratham", + "state": "New Hampshire" + }, + { + "city": "Strathmore", + "state": "New Jersey" + }, + { + "city": "Stratmoor", + "state": "Colorado" + }, + { + "city": "Streamwood", + "state": "Illinois" + }, + { + "city": "Streator", + "state": "Illinois" + }, + { + "city": "Streetsboro", + "state": "Ohio" + }, + { + "city": "Strongsville", + "state": "Ohio" + }, + { + "city": "Struthers", + "state": "Ohio" + }, + { + "city": "Stuart", + "state": "Florida" + }, + { + "city": "Stuarts Draft", + "state": "Virginia" + }, + { + "city": "Sturbridge", + "state": "Massachusetts" + }, + { + "city": "Sturgeon Bay", + "state": "Wisconsin" + }, + { + "city": "Sturgis", + "state": "South Dakota" + }, + { + "city": "Sturgis", + "state": "Michigan" + }, + { + "city": "Stuttgart", + "state": "Arkansas" + }, + { + "city": "Suamico", + "state": "Wisconsin" + }, + { + "city": "Succasunna-Kenvil", + "state": "New Jersey" + }, + { + "city": "Sudbury", + "state": "Massachusetts" + }, + { + "city": "Sudley", + "state": "Virginia" + }, + { + "city": "Suffern", + "state": "New York" + }, + { + "city": "Suffield", + "state": "Connecticut" + }, + { + "city": "Suffolk", + "state": "Virginia" + }, + { + "city": "Sugar Hill", + "state": "Georgia" + }, + { + "city": "Sugar Land", + "state": "Texas" + }, + { + "city": "Sugarmill Woods", + "state": "Florida" + }, + { + "city": "Suisun City", + "state": "California" + }, + { + "city": "Suitland-Silver Hill", + "state": "Maryland" + }, + { + "city": "Sullivan", + "state": "Missouri" + }, + { + "city": "Sullivan", + "state": "New York" + }, + { + "city": "Sulphur", + "state": "Louisiana" + }, + { + "city": "Sulphur Springs", + "state": "Texas" + }, + { + "city": "Summerfield", + "state": "North Carolina" + }, + { + "city": "Summerville", + "state": "South Carolina" + }, + { + "city": "Summit", + "state": "New Jersey" + }, + { + "city": "Summit", + "state": "Washington" + }, + { + "city": "Summit", + "state": "Illinois" + }, + { + "city": "Summit Park", + "state": "Utah" + }, + { + "city": "Sumner", + "state": "Washington" + }, + { + "city": "Sumter", + "state": "South Carolina" + }, + { + "city": "Sun City", + "state": "California" + }, + { + "city": "Sun City", + "state": "Arizona" + }, + { + "city": "Sun City West", + "state": "Arizona" + }, + { + "city": "Sun Lakes", + "state": "Arizona" + }, + { + "city": "Sun Prairie", + "state": "Wisconsin" + }, + { + "city": "Sun Valley", + "state": "Nevada" + }, + { + "city": "Sunbury", + "state": "Pennsylvania" + }, + { + "city": "Sunland Park", + "state": "New Mexico" + }, + { + "city": "Sunny Isles Beach", + "state": "Florida" + }, + { + "city": "Sunnyside", + "state": "Oregon" + }, + { + "city": "Sunnyside", + "state": "Washington" + }, + { + "city": "Sunnyvale", + "state": "California" + }, + { + "city": "Sunrise", + "state": "Florida" + }, + { + "city": "Sunrise Manor", + "state": "Nevada" + }, + { + "city": "Sunset", + "state": "Florida" + }, + { + "city": "Sunset Hills", + "state": "Missouri" + }, + { + "city": "Superior", + "state": "Colorado" + }, + { + "city": "Superior", + "state": "Wisconsin" + }, + { + "city": "Surprise", + "state": "Arizona" + }, + { + "city": "Susanville", + "state": "California" + }, + { + "city": "Sussex", + "state": "Wisconsin" + }, + { + "city": "Sutherlin", + "state": "Oregon" + }, + { + "city": "Sutton", + "state": "Massachusetts" + }, + { + "city": "Suwanee", + "state": "Georgia" + }, + { + "city": "Swainsboro", + "state": "Georgia" + }, + { + "city": "Swampscott", + "state": "Massachusetts" + }, + { + "city": "Swampscott", + "state": "Massachusetts" + }, + { + "city": "Swansea", + "state": "Illinois" + }, + { + "city": "Swansea", + "state": "Massachusetts" + }, + { + "city": "Swanton", + "state": "Vermont" + }, + { + "city": "Swanzey", + "state": "New Hampshire" + }, + { + "city": "Swarthmore", + "state": "Pennsylvania" + }, + { + "city": "Sweden", + "state": "New York" + }, + { + "city": "Sweet Home", + "state": "Oregon" + }, + { + "city": "Sweetwater", + "state": "Texas" + }, + { + "city": "Sweetwater", + "state": "Florida" + }, + { + "city": "Swissvale", + "state": "Pennsylvania" + }, + { + "city": "Sycamore", + "state": "Illinois" + }, + { + "city": "Sylacauga", + "state": "Alabama" + }, + { + "city": "Sylvania", + "state": "Ohio" + }, + { + "city": "Syosset", + "state": "New York" + }, + { + "city": "Syracuse", + "state": "New York" + }, + { + "city": "Syracuse", + "state": "Utah" + }, + { + "city": "Tacoma", + "state": "Washington" + }, + { + "city": "Taft", + "state": "California" + }, + { + "city": "Tahlequah", + "state": "Oklahoma" + }, + { + "city": "Takoma Park", + "state": "Maryland" + }, + { + "city": "Talladega", + "state": "Alabama" + }, + { + "city": "Tallahassee", + "state": "Florida" + }, + { + "city": "Tallmadge", + "state": "Ohio" + }, + { + "city": "Tallulah", + "state": "Louisiana" + }, + { + "city": "Tamalpais-Homestead Valley", + "state": "California" + }, + { + "city": "Tamaqua", + "state": "Pennsylvania" + }, + { + "city": "Tamarac", + "state": "Florida" + }, + { + "city": "Tamiami", + "state": "Florida" + }, + { + "city": "Tampa", + "state": "Florida" + }, + { + "city": "Tanque Verde", + "state": "Arizona" + }, + { + "city": "Tappan", + "state": "New York" + }, + { + "city": "Tarboro", + "state": "North Carolina" + }, + { + "city": "Tarpon Springs", + "state": "Florida" + }, + { + "city": "Tarrant", + "state": "Alabama" + }, + { + "city": "Tarrytown", + "state": "New York" + }, + { + "city": "Taunton", + "state": "Massachusetts" + }, + { + "city": "Tavares", + "state": "Florida" + }, + { + "city": "Taylor", + "state": "Michigan" + }, + { + "city": "Taylor", + "state": "Pennsylvania" + }, + { + "city": "Taylor", + "state": "Texas" + }, + { + "city": "Taylor Mill", + "state": "Kentucky" + }, + { + "city": "Taylors", + "state": "South Carolina" + }, + { + "city": "Taylorsville", + "state": "Utah" + }, + { + "city": "Taylorville", + "state": "Illinois" + }, + { + "city": "Teaneck", + "state": "New Jersey" + }, + { + "city": "Teays Valley", + "state": "West Virginia" + }, + { + "city": "Tecumseh", + "state": "Michigan" + }, + { + "city": "Tecumseh", + "state": "Oklahoma" + }, + { + "city": "Tehachapi", + "state": "California" + }, + { + "city": "Tell City", + "state": "Indiana" + }, + { + "city": "Temecula", + "state": "California" + }, + { + "city": "Tempe", + "state": "Arizona" + }, + { + "city": "Temperance", + "state": "Michigan" + }, + { + "city": "Temple", + "state": "Texas" + }, + { + "city": "Temple City", + "state": "California" + }, + { + "city": "Temple Hills", + "state": "Maryland" + }, + { + "city": "Temple Terrace", + "state": "Florida" + }, + { + "city": "Templeton", + "state": "Massachusetts" + }, + { + "city": "Tenafly", + "state": "New Jersey" + }, + { + "city": "Terrace Heights", + "state": "Washington" + }, + { + "city": "Terre Haute", + "state": "Indiana" + }, + { + "city": "Terrell", + "state": "Texas" + }, + { + "city": "Terrytown", + "state": "Louisiana" + }, + { + "city": "Terryville", + "state": "New York" + }, + { + "city": "Tewksbury", + "state": "Massachusetts" + }, + { + "city": "Texarkana", + "state": "Texas" + }, + { + "city": "Texarkana", + "state": "Arkansas" + }, + { + "city": "Texas City", + "state": "Texas" + }, + { + "city": "The Colony", + "state": "Texas" + }, + { + "city": "The Crossings", + "state": "Florida" + }, + { + "city": "The Hammocks", + "state": "Florida" + }, + { + "city": "The Pinery", + "state": "Colorado" + }, + { + "city": "The Village", + "state": "Oklahoma" + }, + { + "city": "The Villages", + "state": "Florida" + }, + { + "city": "The Woodlands", + "state": "Texas" + }, + { + "city": "Theodore", + "state": "Alabama" + }, + { + "city": "Thermalito", + "state": "California" + }, + { + "city": "Thibodaux", + "state": "Louisiana" + }, + { + "city": "Thief River Falls", + "state": "Minnesota" + }, + { + "city": "Thomaston", + "state": "Georgia" + }, + { + "city": "Thomaston", + "state": "Connecticut" + }, + { + "city": "Thomasville", + "state": "Georgia" + }, + { + "city": "Thomasville", + "state": "North Carolina" + }, + { + "city": "Thompson", + "state": "New York" + }, + { + "city": "Thompson", + "state": "Connecticut" + }, + { + "city": "Thompsonville", + "state": "Connecticut" + }, + { + "city": "Thomson", + "state": "Georgia" + }, + { + "city": "Thonotosassa", + "state": "Florida" + }, + { + "city": "Thornton", + "state": "Colorado" + }, + { + "city": "Thousand Oaks", + "state": "California" + }, + { + "city": "Three Lakes", + "state": "Florida" + }, + { + "city": "Three Rivers", + "state": "Michigan" + }, + { + "city": "Tiburon", + "state": "California" + }, + { + "city": "Tiffin", + "state": "Ohio" + }, + { + "city": "Tifton", + "state": "Georgia" + }, + { + "city": "Tigard", + "state": "Oregon" + }, + { + "city": "Tillmans Corner", + "state": "Alabama" + }, + { + "city": "Timberlake", + "state": "Virginia" + }, + { + "city": "Timberlane", + "state": "Louisiana" + }, + { + "city": "Tinley Park", + "state": "Illinois" + }, + { + "city": "Tinton Falls", + "state": "New Jersey" + }, + { + "city": "Tipp City", + "state": "Ohio" + }, + { + "city": "Titusville", + "state": "Pennsylvania" + }, + { + "city": "Titusville", + "state": "Florida" + }, + { + "city": "Tiverton", + "state": "Rhode Island" + }, + { + "city": "Tiverton", + "state": "Rhode Island" + }, + { + "city": "Toccoa", + "state": "Georgia" + }, + { + "city": "Toledo", + "state": "Ohio" + }, + { + "city": "Tolland", + "state": "Connecticut" + }, + { + "city": "Tomah", + "state": "Wisconsin" + }, + { + "city": "Tomball", + "state": "Texas" + }, + { + "city": "Toms River", + "state": "New Jersey" + }, + { + "city": "Tonawanda", + "state": "New York" + }, + { + "city": "Tonawanda", + "state": "New York" + }, + { + "city": "Tonawanda", + "state": "New York" + }, + { + "city": "Tooele", + "state": "Utah" + }, + { + "city": "Topeka", + "state": "Kansas" + }, + { + "city": "Toppenish", + "state": "Washington" + }, + { + "city": "Topsfield", + "state": "Massachusetts" + }, + { + "city": "Topsham", + "state": "Maine" + }, + { + "city": "Topsham", + "state": "Maine" + }, + { + "city": "Torrance", + "state": "California" + }, + { + "city": "Torrington", + "state": "Connecticut" + }, + { + "city": "Torrington", + "state": "Connecticut" + }, + { + "city": "Totowa", + "state": "New Jersey" + }, + { + "city": "Town 'n' Country", + "state": "Florida" + }, + { + "city": "Town and Country", + "state": "Missouri" + }, + { + "city": "Townsend", + "state": "Massachusetts" + }, + { + "city": "Towson", + "state": "Maryland" + }, + { + "city": "Tracy", + "state": "California" + }, + { + "city": "Traverse City", + "state": "Michigan" + }, + { + "city": "Travilah", + "state": "Maryland" + }, + { + "city": "Treasure Island", + "state": "Florida" + }, + { + "city": "Trenton", + "state": "Michigan" + }, + { + "city": "Trenton", + "state": "Missouri" + }, + { + "city": "Trenton", + "state": "New Jersey" + }, + { + "city": "Trenton", + "state": "Ohio" + }, + { + "city": "Trinidad", + "state": "Colorado" + }, + { + "city": "Trinity", + "state": "North Carolina" + }, + { + "city": "Trooper", + "state": "Pennsylvania" + }, + { + "city": "Trophy Club", + "state": "Texas" + }, + { + "city": "Trotwood", + "state": "Ohio" + }, + { + "city": "Troutdale", + "state": "Oregon" + }, + { + "city": "Troy", + "state": "Ohio" + }, + { + "city": "Troy", + "state": "New York" + }, + { + "city": "Troy", + "state": "Missouri" + }, + { + "city": "Troy", + "state": "Michigan" + }, + { + "city": "Troy", + "state": "Alabama" + }, + { + "city": "Troy", + "state": "Illinois" + }, + { + "city": "Truckee", + "state": "California" + }, + { + "city": "Trumann", + "state": "Arkansas" + }, + { + "city": "Trumbull", + "state": "Connecticut" + }, + { + "city": "Trumbull", + "state": "Connecticut" + }, + { + "city": "Trussville", + "state": "Alabama" + }, + { + "city": "Truth or Consequences", + "state": "New Mexico" + }, + { + "city": "Tualatin", + "state": "Oregon" + }, + { + "city": "Tuba City", + "state": "Arizona" + }, + { + "city": "Tuckahoe", + "state": "New York" + }, + { + "city": "Tuckahoe", + "state": "Virginia" + }, + { + "city": "Tucker", + "state": "Georgia" + }, + { + "city": "Tucson", + "state": "Arizona" + }, + { + "city": "Tucson Estates", + "state": "Arizona" + }, + { + "city": "Tukwila", + "state": "Washington" + }, + { + "city": "Tulare", + "state": "California" + }, + { + "city": "Tullahoma", + "state": "Tennessee" + }, + { + "city": "Tulsa", + "state": "Oklahoma" + }, + { + "city": "Tumwater", + "state": "Washington" + }, + { + "city": "Tupelo", + "state": "Mississippi" + }, + { + "city": "Turlock", + "state": "California" + }, + { + "city": "Turtle Creek", + "state": "Pennsylvania" + }, + { + "city": "Tuscaloosa", + "state": "Alabama" + }, + { + "city": "Tuscumbia", + "state": "Alabama" + }, + { + "city": "Tuskegee", + "state": "Alabama" + }, + { + "city": "Tustin", + "state": "California" + }, + { + "city": "Tustin Foothills", + "state": "California" + }, + { + "city": "Twentynine Palms", + "state": "California" + }, + { + "city": "Twentynine Palms Base", + "state": "California" + }, + { + "city": "Twin Falls", + "state": "Idaho" + }, + { + "city": "Twin Lakes", + "state": "Colorado" + }, + { + "city": "Twin Rivers", + "state": "New Jersey" + }, + { + "city": "Twinsburg", + "state": "Ohio" + }, + { + "city": "Two Rivers", + "state": "Wisconsin" + }, + { + "city": "Tyler", + "state": "Texas" + }, + { + "city": "Tyngsborough", + "state": "Massachusetts" + }, + { + "city": "Tysons Corner", + "state": "Virginia" + }, + { + "city": "Ukiah", + "state": "California" + }, + { + "city": "Ulster", + "state": "New York" + }, + { + "city": "Union", + "state": "South Carolina" + }, + { + "city": "Union", + "state": "New York" + }, + { + "city": "Union", + "state": "Missouri" + }, + { + "city": "Union", + "state": "New Jersey" + }, + { + "city": "Union Beach", + "state": "New Jersey" + }, + { + "city": "Union City", + "state": "New Jersey" + }, + { + "city": "Union City", + "state": "California" + }, + { + "city": "Union City", + "state": "Georgia" + }, + { + "city": "Union City", + "state": "Tennessee" + }, + { + "city": "Union Hill-Novelty Hill", + "state": "Washington" + }, + { + "city": "Union Park", + "state": "Florida" + }, + { + "city": "Uniondale", + "state": "New York" + }, + { + "city": "Uniontown", + "state": "Pennsylvania" + }, + { + "city": "Universal City", + "state": "Texas" + }, + { + "city": "University", + "state": "Florida" + }, + { + "city": "University City", + "state": "Missouri" + }, + { + "city": "University Heights", + "state": "Ohio" + }, + { + "city": "University Park", + "state": "Texas" + }, + { + "city": "University Park", + "state": "Florida" + }, + { + "city": "University Park", + "state": "Illinois" + }, + { + "city": "University Place", + "state": "Washington" + }, + { + "city": "Upland", + "state": "California" + }, + { + "city": "Upper Arlington", + "state": "Ohio" + }, + { + "city": "Upper Grand Lagoon", + "state": "Florida" + }, + { + "city": "Upper Providence Township", + "state": "Pennsylvania" + }, + { + "city": "Upper Saddle River", + "state": "New Jersey" + }, + { + "city": "Upper Sandusky", + "state": "Ohio" + }, + { + "city": "Upper St. Clair", + "state": "Pennsylvania" + }, + { + "city": "Urbana", + "state": "Ohio" + }, + { + "city": "Urbana", + "state": "Illinois" + }, + { + "city": "Urbandale", + "state": "Iowa" + }, + { + "city": "Utica", + "state": "New York" + }, + { + "city": "Uvalde", + "state": "Texas" + }, + { + "city": "Uxbridge", + "state": "Massachusetts" + }, + { + "city": "Vacaville", + "state": "California" + }, + { + "city": "Vadnais Heights", + "state": "Minnesota" + }, + { + "city": "Valdosta", + "state": "Georgia" + }, + { + "city": "Valinda", + "state": "California" + }, + { + "city": "Valle Vista", + "state": "California" + }, + { + "city": "Vallejo", + "state": "California" + }, + { + "city": "Valley", + "state": "Alabama" + }, + { + "city": "Valley Center", + "state": "California" + }, + { + "city": "Valley City", + "state": "North Dakota" + }, + { + "city": "Valley Cottage", + "state": "New York" + }, + { + "city": "Valley Falls", + "state": "Rhode Island" + }, + { + "city": "Valley Park", + "state": "Missouri" + }, + { + "city": "Valley Station", + "state": "Kentucky" + }, + { + "city": "Valley Stream", + "state": "New York" + }, + { + "city": "Valparaiso", + "state": "Indiana" + }, + { + "city": "Valparaiso", + "state": "Florida" + }, + { + "city": "Valrico", + "state": "Florida" + }, + { + "city": "Van Buren", + "state": "Arkansas" + }, + { + "city": "Van Buren", + "state": "New York" + }, + { + "city": "Van Wert", + "state": "Ohio" + }, + { + "city": "Vancouver", + "state": "Washington" + }, + { + "city": "Vandalia", + "state": "Ohio" + }, + { + "city": "Vandalia", + "state": "Illinois" + }, + { + "city": "Vandenberg AFB", + "state": "California" + }, + { + "city": "Vashon", + "state": "Washington" + }, + { + "city": "Venice", + "state": "Florida" + }, + { + "city": "Venice Gardens", + "state": "Florida" + }, + { + "city": "Ventnor City", + "state": "New Jersey" + }, + { + "city": "Veradale", + "state": "Washington" + }, + { + "city": "Vermilion", + "state": "Ohio" + }, + { + "city": "Vermillion", + "state": "South Dakota" + }, + { + "city": "Vernal", + "state": "Utah" + }, + { + "city": "Vernon", + "state": "Wisconsin" + }, + { + "city": "Vernon", + "state": "Texas" + }, + { + "city": "Vernon", + "state": "Connecticut" + }, + { + "city": "Vernon Hills", + "state": "Illinois" + }, + { + "city": "Vero Beach", + "state": "Florida" + }, + { + "city": "Vero Beach South", + "state": "Florida" + }, + { + "city": "Verona", + "state": "New Jersey" + }, + { + "city": "Verona", + "state": "New York" + }, + { + "city": "Verona", + "state": "Wisconsin" + }, + { + "city": "Versailles", + "state": "Kentucky" + }, + { + "city": "Vestal", + "state": "New York" + }, + { + "city": "Vestavia Hills", + "state": "Alabama" + }, + { + "city": "Vicksburg", + "state": "Mississippi" + }, + { + "city": "Victor", + "state": "New York" + }, + { + "city": "Victoria", + "state": "Texas" + }, + { + "city": "Victorville", + "state": "California" + }, + { + "city": "Vidalia", + "state": "Georgia" + }, + { + "city": "Vidor", + "state": "Texas" + }, + { + "city": "Vienna", + "state": "Virginia" + }, + { + "city": "Vienna", + "state": "West Virginia" + }, + { + "city": "View Park-Windsor Hills", + "state": "California" + }, + { + "city": "Villa Hills", + "state": "Kentucky" + }, + { + "city": "Villa Park", + "state": "Illinois" + }, + { + "city": "Village Green-Green Ridge", + "state": "Pennsylvania" + }, + { + "city": "Village Park", + "state": "Hawaii" + }, + { + "city": "Village St. George", + "state": "Louisiana" + }, + { + "city": "Villas", + "state": "Florida" + }, + { + "city": "Villas", + "state": "New Jersey" + }, + { + "city": "Ville Platte", + "state": "Louisiana" + }, + { + "city": "Vincennes", + "state": "Indiana" + }, + { + "city": "Vincent", + "state": "California" + }, + { + "city": "Vineland", + "state": "New Jersey" + }, + { + "city": "Vineyard", + "state": "California" + }, + { + "city": "Vinings", + "state": "Georgia" + }, + { + "city": "Vinita", + "state": "Oklahoma" + }, + { + "city": "Vinton", + "state": "Virginia" + }, + { + "city": "Violet", + "state": "Louisiana" + }, + { + "city": "Virginia", + "state": "Minnesota" + }, + { + "city": "Virginia Beach", + "state": "Virginia" + }, + { + "city": "Visalia", + "state": "California" + }, + { + "city": "Vista", + "state": "California" + }, + { + "city": "Volney", + "state": "New York" + }, + { + "city": "Wabash", + "state": "Indiana" + }, + { + "city": "Waco", + "state": "Texas" + }, + { + "city": "Waconia", + "state": "Minnesota" + }, + { + "city": "Wade Hampton", + "state": "South Carolina" + }, + { + "city": "Wading River", + "state": "New York" + }, + { + "city": "Wadsworth", + "state": "Ohio" + }, + { + "city": "Waggaman", + "state": "Louisiana" + }, + { + "city": "Wagoner", + "state": "Oklahoma" + }, + { + "city": "Wahiawa", + "state": "Hawaii" + }, + { + "city": "Wahpeton", + "state": "North Dakota" + }, + { + "city": "Waianae", + "state": "Hawaii" + }, + { + "city": "Waihee-Waiehu", + "state": "Hawaii" + }, + { + "city": "Wailuku", + "state": "Hawaii" + }, + { + "city": "Waimalu", + "state": "Hawaii" + }, + { + "city": "Waimea", + "state": "Hawaii" + }, + { + "city": "Waipahu", + "state": "Hawaii" + }, + { + "city": "Waipio", + "state": "Hawaii" + }, + { + "city": "Waite Park", + "state": "Minnesota" + }, + { + "city": "Wake Forest", + "state": "North Carolina" + }, + { + "city": "Wakefield", + "state": "Massachusetts" + }, + { + "city": "Wakefield", + "state": "Massachusetts" + }, + { + "city": "Wakefield-Peacedale", + "state": "Rhode Island" + }, + { + "city": "Walden", + "state": "New York" + }, + { + "city": "Waldorf", + "state": "Maryland" + }, + { + "city": "Waldwick", + "state": "New Jersey" + }, + { + "city": "Walker", + "state": "Michigan" + }, + { + "city": "Walker Mill", + "state": "Maryland" + }, + { + "city": "Walla Walla", + "state": "Washington" + }, + { + "city": "Walled Lake", + "state": "Michigan" + }, + { + "city": "Waller", + "state": "Washington" + }, + { + "city": "Wallingford", + "state": "Connecticut" + }, + { + "city": "Wallingford Center", + "state": "Connecticut" + }, + { + "city": "Wallington", + "state": "New Jersey" + }, + { + "city": "Wallkill", + "state": "New York" + }, + { + "city": "Walnut", + "state": "California" + }, + { + "city": "Walnut Creek", + "state": "California" + }, + { + "city": "Walnut Grove", + "state": "Washington" + }, + { + "city": "Walnut Park", + "state": "California" + }, + { + "city": "Walpole", + "state": "Massachusetts" + }, + { + "city": "Waltham", + "state": "Massachusetts" + }, + { + "city": "Walworth", + "state": "New York" + }, + { + "city": "Wanaque", + "state": "New Jersey" + }, + { + "city": "Wantagh", + "state": "New York" + }, + { + "city": "Wapakoneta", + "state": "Ohio" + }, + { + "city": "Wappinger", + "state": "New York" + }, + { + "city": "Ware", + "state": "Massachusetts" + }, + { + "city": "Ware", + "state": "Massachusetts" + }, + { + "city": "Wareham", + "state": "Massachusetts" + }, + { + "city": "Warner Robins", + "state": "Georgia" + }, + { + "city": "Warr Acres", + "state": "Oklahoma" + }, + { + "city": "Warren", + "state": "Pennsylvania" + }, + { + "city": "Warren", + "state": "Rhode Island" + }, + { + "city": "Warren", + "state": "Arkansas" + }, + { + "city": "Warren", + "state": "Michigan" + }, + { + "city": "Warren", + "state": "Ohio" + }, + { + "city": "Warrensburg", + "state": "Missouri" + }, + { + "city": "Warrensville Heights", + "state": "Ohio" + }, + { + "city": "Warrenton", + "state": "Virginia" + }, + { + "city": "Warrenville", + "state": "Illinois" + }, + { + "city": "Warrington", + "state": "Florida" + }, + { + "city": "Warsaw", + "state": "Indiana" + }, + { + "city": "Warwick", + "state": "New York" + }, + { + "city": "Warwick", + "state": "New York" + }, + { + "city": "Warwick", + "state": "Rhode Island" + }, + { + "city": "Wasco", + "state": "California" + }, + { + "city": "Waseca", + "state": "Minnesota" + }, + { + "city": "Washington", + "state": "Missouri" + }, + { + "city": "Washington", + "state": "New Jersey" + }, + { + "city": "Washington", + "state": "Ohio" + }, + { + "city": "Washington", + "state": "North Carolina" + }, + { + "city": "Washington", + "state": "Indiana" + }, + { + "city": "Washington", + "state": "Iowa" + }, + { + "city": "Washington", + "state": "Illinois" + }, + { + "city": "Washington", + "state": "Pennsylvania" + }, + { + "city": "Washington", + "state": "Utah" + }, + { + "city": "Washington", + "state": "Wisconsin" + }, + { + "city": "Washington", + "state": "Washington" + }, + { + "city": "Washington Terrace", + "state": "Utah" + }, + { + "city": "Washington Township", + "state": "New Jersey" + }, + { + "city": "Washougal", + "state": "Washington" + }, + { + "city": "Watauga", + "state": "Texas" + }, + { + "city": "Waterboro", + "state": "Maine" + }, + { + "city": "Waterbury", + "state": "Connecticut" + }, + { + "city": "Waterbury", + "state": "Connecticut" + }, + { + "city": "Waterford", + "state": "Connecticut" + }, + { + "city": "Waterford", + "state": "California" + }, + { + "city": "Waterford", + "state": "Michigan" + }, + { + "city": "Waterford", + "state": "New York" + }, + { + "city": "Waterloo", + "state": "New York" + }, + { + "city": "Waterloo", + "state": "Illinois" + }, + { + "city": "Waterloo", + "state": "Iowa" + }, + { + "city": "Watertown", + "state": "Connecticut" + }, + { + "city": "Watertown", + "state": "New York" + }, + { + "city": "Watertown", + "state": "Massachusetts" + }, + { + "city": "Watertown", + "state": "South Dakota" + }, + { + "city": "Watertown", + "state": "Wisconsin" + }, + { + "city": "Waterville", + "state": "Maine" + }, + { + "city": "Watervliet", + "state": "New York" + }, + { + "city": "Watsonville", + "state": "California" + }, + { + "city": "Wauconda", + "state": "Illinois" + }, + { + "city": "Waukegan", + "state": "Illinois" + }, + { + "city": "Waukesha", + "state": "Wisconsin" + }, + { + "city": "Waukesha", + "state": "Wisconsin" + }, + { + "city": "Waunakee", + "state": "Wisconsin" + }, + { + "city": "Waupun", + "state": "Wisconsin" + }, + { + "city": "Wausau", + "state": "Wisconsin" + }, + { + "city": "Wauseon", + "state": "Ohio" + }, + { + "city": "Wauwatosa", + "state": "Wisconsin" + }, + { + "city": "Waveland", + "state": "Mississippi" + }, + { + "city": "Waverly", + "state": "Michigan" + }, + { + "city": "Waverly", + "state": "Iowa" + }, + { + "city": "Wawarsing", + "state": "New York" + }, + { + "city": "Wawayanda", + "state": "New York" + }, + { + "city": "Waxahachie", + "state": "Texas" + }, + { + "city": "Waycross", + "state": "Georgia" + }, + { + "city": "Wayland", + "state": "Massachusetts" + }, + { + "city": "Wayne", + "state": "Michigan" + }, + { + "city": "Wayne", + "state": "New Jersey" + }, + { + "city": "Waynesboro", + "state": "Virginia" + }, + { + "city": "Waynesboro", + "state": "Pennsylvania" + }, + { + "city": "Waynesville", + "state": "North Carolina" + }, + { + "city": "Weare", + "state": "New Hampshire" + }, + { + "city": "Weatherford", + "state": "Oklahoma" + }, + { + "city": "Weatherford", + "state": "Texas" + }, + { + "city": "Webb City", + "state": "Missouri" + }, + { + "city": "Webster", + "state": "Massachusetts" + }, + { + "city": "Webster", + "state": "Massachusetts" + }, + { + "city": "Webster", + "state": "New York" + }, + { + "city": "Webster", + "state": "Texas" + }, + { + "city": "Webster City", + "state": "Iowa" + }, + { + "city": "Webster Groves", + "state": "Missouri" + }, + { + "city": "Weddington", + "state": "North Carolina" + }, + { + "city": "Weigelstown", + "state": "Pennsylvania" + }, + { + "city": "Weirton", + "state": "West Virginia" + }, + { + "city": "Wekiwa Springs", + "state": "Florida" + }, + { + "city": "Welby", + "state": "Colorado" + }, + { + "city": "Welcome", + "state": "South Carolina" + }, + { + "city": "Wellesley", + "state": "Massachusetts" + }, + { + "city": "Wellesley", + "state": "Massachusetts" + }, + { + "city": "Wellington", + "state": "Florida" + }, + { + "city": "Wellington", + "state": "Kansas" + }, + { + "city": "Wells", + "state": "Maine" + }, + { + "city": "Wells Branch", + "state": "Texas" + }, + { + "city": "Wellston", + "state": "Ohio" + }, + { + "city": "Wellsville", + "state": "New York" + }, + { + "city": "Wenatchee", + "state": "Washington" + }, + { + "city": "Wentzville", + "state": "Missouri" + }, + { + "city": "Weslaco", + "state": "Texas" + }, + { + "city": "West Allis", + "state": "Wisconsin" + }, + { + "city": "West and East Lealman", + "state": "Florida" + }, + { + "city": "West Athens", + "state": "California" + }, + { + "city": "West Babylon", + "state": "New York" + }, + { + "city": "West Bend", + "state": "Wisconsin" + }, + { + "city": "West Bloomfield Township", + "state": "Michigan" + }, + { + "city": "West Boylston", + "state": "Massachusetts" + }, + { + "city": "West Bridgewater", + "state": "Massachusetts" + }, + { + "city": "West Caldwell", + "state": "New Jersey" + }, + { + "city": "West Carrollton City", + "state": "Ohio" + }, + { + "city": "West Carson", + "state": "California" + }, + { + "city": "West Chester", + "state": "Pennsylvania" + }, + { + "city": "West Chicago", + "state": "Illinois" + }, + { + "city": "West Columbia", + "state": "South Carolina" + }, + { + "city": "West Covina", + "state": "California" + }, + { + "city": "West Des Moines", + "state": "Iowa" + }, + { + "city": "West Fargo", + "state": "North Dakota" + }, + { + "city": "West Frankfort", + "state": "Illinois" + }, + { + "city": "West Freehold", + "state": "New Jersey" + }, + { + "city": "West Gate", + "state": "Virginia" + }, + { + "city": "West Glens Falls", + "state": "New York" + }, + { + "city": "West Goshen", + "state": "Pennsylvania" + }, + { + "city": "West Hartford", + "state": "Connecticut" + }, + { + "city": "West Hartford", + "state": "Connecticut" + }, + { + "city": "West Hattiesburg", + "state": "Mississippi" + }, + { + "city": "West Haven", + "state": "Connecticut" + }, + { + "city": "West Haven", + "state": "Connecticut" + }, + { + "city": "West Haven-Sylvan", + "state": "Oregon" + }, + { + "city": "West Haverstraw", + "state": "New York" + }, + { + "city": "West Helena", + "state": "Arkansas" + }, + { + "city": "West Hempstead", + "state": "New York" + }, + { + "city": "West Hollywood", + "state": "California" + }, + { + "city": "West Islip", + "state": "New York" + }, + { + "city": "West Jordan", + "state": "Utah" + }, + { + "city": "West Lafayette", + "state": "Indiana" + }, + { + "city": "West Lake Stevens", + "state": "Washington" + }, + { + "city": "West Linn", + "state": "Oregon" + }, + { + "city": "West Little River", + "state": "Florida" + }, + { + "city": "West Livingston", + "state": "Texas" + }, + { + "city": "West Long Branch", + "state": "New Jersey" + }, + { + "city": "West Melbourne", + "state": "Florida" + }, + { + "city": "West Memphis", + "state": "Arkansas" + }, + { + "city": "West Mifflin", + "state": "Pennsylvania" + }, + { + "city": "West Milford", + "state": "New Jersey" + }, + { + "city": "West Modesto", + "state": "California" + }, + { + "city": "West Monroe", + "state": "Louisiana" + }, + { + "city": "West New York", + "state": "New Jersey" + }, + { + "city": "West Norriton", + "state": "Pennsylvania" + }, + { + "city": "West Odessa", + "state": "Texas" + }, + { + "city": "West Orange", + "state": "New Jersey" + }, + { + "city": "West Palm Beach", + "state": "Florida" + }, + { + "city": "West Paterson", + "state": "New Jersey" + }, + { + "city": "West Pensacola", + "state": "Florida" + }, + { + "city": "West Perrine", + "state": "Florida" + }, + { + "city": "West Plains", + "state": "Missouri" + }, + { + "city": "West Point", + "state": "New York" + }, + { + "city": "West Point", + "state": "Mississippi" + }, + { + "city": "West Point", + "state": "Utah" + }, + { + "city": "West Puente Valley", + "state": "California" + }, + { + "city": "West Richland", + "state": "Washington" + }, + { + "city": "West Sacramento", + "state": "California" + }, + { + "city": "West Seneca", + "state": "New York" + }, + { + "city": "West Seneca", + "state": "New York" + }, + { + "city": "West Slope", + "state": "Oregon" + }, + { + "city": "West Springfield", + "state": "Virginia" + }, + { + "city": "West Springfield", + "state": "Massachusetts" + }, + { + "city": "West Springfield", + "state": "Massachusetts" + }, + { + "city": "West St. Paul", + "state": "Minnesota" + }, + { + "city": "West University Place", + "state": "Texas" + }, + { + "city": "West Valley", + "state": "Washington" + }, + { + "city": "West Valley City", + "state": "Utah" + }, + { + "city": "West Vero Corridor", + "state": "Florida" + }, + { + "city": "West View", + "state": "Pennsylvania" + }, + { + "city": "West Warwick", + "state": "Rhode Island" + }, + { + "city": "West Warwick", + "state": "Rhode Island" + }, + { + "city": "West Whittier-Los Nietos", + "state": "California" + }, + { + "city": "West Yarmouth", + "state": "Massachusetts" + }, + { + "city": "Westborough", + "state": "Massachusetts" + }, + { + "city": "Westbrook", + "state": "Connecticut" + }, + { + "city": "Westbrook", + "state": "Maine" + }, + { + "city": "Westbury", + "state": "New York" + }, + { + "city": "Westchase", + "state": "Florida" + }, + { + "city": "Westchester", + "state": "Florida" + }, + { + "city": "Westchester", + "state": "Illinois" + }, + { + "city": "Westerly", + "state": "Rhode Island" + }, + { + "city": "Westerly", + "state": "Rhode Island" + }, + { + "city": "Western Springs", + "state": "Illinois" + }, + { + "city": "Westerville", + "state": "Ohio" + }, + { + "city": "Westfield", + "state": "Massachusetts" + }, + { + "city": "Westfield", + "state": "New Jersey" + }, + { + "city": "Westfield", + "state": "Indiana" + }, + { + "city": "Westford", + "state": "Massachusetts" + }, + { + "city": "Westgate-Belvedere Homes", + "state": "Florida" + }, + { + "city": "Westlake", + "state": "Ohio" + }, + { + "city": "Westlake Village", + "state": "California" + }, + { + "city": "Westland", + "state": "Michigan" + }, + { + "city": "Westmere", + "state": "New York" + }, + { + "city": "Westminster", + "state": "Massachusetts" + }, + { + "city": "Westminster", + "state": "California" + }, + { + "city": "Westminster", + "state": "Colorado" + }, + { + "city": "Westminster", + "state": "Maryland" + }, + { + "city": "Westmont", + "state": "Illinois" + }, + { + "city": "Westmont", + "state": "California" + }, + { + "city": "Westmoreland", + "state": "New York" + }, + { + "city": "Weston", + "state": "Connecticut" + }, + { + "city": "Weston", + "state": "Florida" + }, + { + "city": "Weston", + "state": "Massachusetts" + }, + { + "city": "Weston", + "state": "Wisconsin" + }, + { + "city": "Westport", + "state": "Massachusetts" + }, + { + "city": "Westport", + "state": "Connecticut" + }, + { + "city": "Westport", + "state": "Connecticut" + }, + { + "city": "Westview", + "state": "Florida" + }, + { + "city": "Westwego", + "state": "Louisiana" + }, + { + "city": "Westwood", + "state": "Massachusetts" + }, + { + "city": "Westwood", + "state": "Michigan" + }, + { + "city": "Westwood", + "state": "New Jersey" + }, + { + "city": "Westwood Lakes", + "state": "Florida" + }, + { + "city": "Wethersfield", + "state": "Connecticut" + }, + { + "city": "Wethersfield", + "state": "Connecticut" + }, + { + "city": "Weymouth", + "state": "Massachusetts" + }, + { + "city": "Weymouth", + "state": "Massachusetts" + }, + { + "city": "Wharton", + "state": "New Jersey" + }, + { + "city": "Wharton", + "state": "Texas" + }, + { + "city": "Wheat Ridge", + "state": "Colorado" + }, + { + "city": "Wheatfield", + "state": "New York" + }, + { + "city": "Wheaton", + "state": "Illinois" + }, + { + "city": "Wheaton-Glenmont", + "state": "Maryland" + }, + { + "city": "Wheelersburg", + "state": "Ohio" + }, + { + "city": "Wheeling", + "state": "Illinois" + }, + { + "city": "Wheeling", + "state": "West Virginia" + }, + { + "city": "White Bear Lake", + "state": "Minnesota" + }, + { + "city": "White Center", + "state": "Washington" + }, + { + "city": "White Horse", + "state": "New Jersey" + }, + { + "city": "White House", + "state": "Tennessee" + }, + { + "city": "White Marsh", + "state": "Maryland" + }, + { + "city": "White Meadow Lake", + "state": "New Jersey" + }, + { + "city": "White Oak", + "state": "Ohio" + }, + { + "city": "White Oak", + "state": "Maryland" + }, + { + "city": "White Oak", + "state": "Pennsylvania" + }, + { + "city": "White Plains", + "state": "New York" + }, + { + "city": "White Rock", + "state": "New Mexico" + }, + { + "city": "White Settlement", + "state": "Texas" + }, + { + "city": "Whitefish Bay", + "state": "Wisconsin" + }, + { + "city": "Whitehall", + "state": "Pennsylvania" + }, + { + "city": "Whitehall", + "state": "Ohio" + }, + { + "city": "Whitestown", + "state": "New York" + }, + { + "city": "Whitewater", + "state": "Wisconsin" + }, + { + "city": "Whitinsville", + "state": "Massachusetts" + }, + { + "city": "Whitman", + "state": "Massachusetts" + }, + { + "city": "Whitmore Lake", + "state": "Michigan" + }, + { + "city": "Whitney", + "state": "Nevada" + }, + { + "city": "Whittier", + "state": "California" + }, + { + "city": "Wichita", + "state": "Kansas" + }, + { + "city": "Wichita Falls", + "state": "Texas" + }, + { + "city": "Wickliffe", + "state": "Ohio" + }, + { + "city": "Wilbraham", + "state": "Massachusetts" + }, + { + "city": "Wildomar", + "state": "California" + }, + { + "city": "Wildwood", + "state": "Missouri" + }, + { + "city": "Wilkes-Barre", + "state": "Pennsylvania" + }, + { + "city": "Wilkins Township", + "state": "Pennsylvania" + }, + { + "city": "Wilkinsburg", + "state": "Pennsylvania" + }, + { + "city": "Willard", + "state": "Ohio" + }, + { + "city": "Williamsburg", + "state": "Florida" + }, + { + "city": "Williamsburg", + "state": "Virginia" + }, + { + "city": "Williamson", + "state": "New York" + }, + { + "city": "Williamsport", + "state": "Pennsylvania" + }, + { + "city": "Williamstown", + "state": "New Jersey" + }, + { + "city": "Williamstown", + "state": "Massachusetts" + }, + { + "city": "Willimantic", + "state": "Connecticut" + }, + { + "city": "Williston", + "state": "North Dakota" + }, + { + "city": "Williston", + "state": "Vermont" + }, + { + "city": "Williston Park", + "state": "New York" + }, + { + "city": "Willmar", + "state": "Minnesota" + }, + { + "city": "Willoughby", + "state": "Ohio" + }, + { + "city": "Willoughby Hills", + "state": "Ohio" + }, + { + "city": "Willow Grove", + "state": "Pennsylvania" + }, + { + "city": "Willow Street", + "state": "Pennsylvania" + }, + { + "city": "Willowbrook", + "state": "California" + }, + { + "city": "Willowbrook", + "state": "Illinois" + }, + { + "city": "Willowick", + "state": "Ohio" + }, + { + "city": "Willows", + "state": "California" + }, + { + "city": "Wilmette", + "state": "Illinois" + }, + { + "city": "Wilmington", + "state": "Massachusetts" + }, + { + "city": "Wilmington", + "state": "Delaware" + }, + { + "city": "Wilmington", + "state": "Ohio" + }, + { + "city": "Wilmington", + "state": "North Carolina" + }, + { + "city": "Wilmington", + "state": "Massachusetts" + }, + { + "city": "Wilmington Island", + "state": "Georgia" + }, + { + "city": "Wilmington Manor", + "state": "Delaware" + }, + { + "city": "Wilna", + "state": "New York" + }, + { + "city": "Wilson", + "state": "North Carolina" + }, + { + "city": "Wilson", + "state": "Pennsylvania" + }, + { + "city": "Wilsonville", + "state": "Oregon" + }, + { + "city": "Wilton", + "state": "New York" + }, + { + "city": "Wilton", + "state": "Connecticut" + }, + { + "city": "Wilton Manors", + "state": "Florida" + }, + { + "city": "Winchendon", + "state": "Massachusetts" + }, + { + "city": "Winchester", + "state": "Massachusetts" + }, + { + "city": "Winchester", + "state": "Nevada" + }, + { + "city": "Winchester", + "state": "Connecticut" + }, + { + "city": "Winchester", + "state": "Massachusetts" + }, + { + "city": "Winchester", + "state": "Kentucky" + }, + { + "city": "Winchester", + "state": "Tennessee" + }, + { + "city": "Winchester", + "state": "Virginia" + }, + { + "city": "Windemere", + "state": "Texas" + }, + { + "city": "Winder", + "state": "Georgia" + }, + { + "city": "Windham", + "state": "Maine" + }, + { + "city": "Windham", + "state": "Connecticut" + }, + { + "city": "Windham", + "state": "New Hampshire" + }, + { + "city": "Windsor", + "state": "New York" + }, + { + "city": "Windsor", + "state": "Connecticut" + }, + { + "city": "Windsor", + "state": "Colorado" + }, + { + "city": "Windsor", + "state": "California" + }, + { + "city": "Windsor Locks", + "state": "Connecticut" + }, + { + "city": "Windsor Locks", + "state": "Connecticut" + }, + { + "city": "Winfield", + "state": "Kansas" + }, + { + "city": "Winfield", + "state": "Illinois" + }, + { + "city": "Winnemucca", + "state": "Nevada" + }, + { + "city": "Winnetka", + "state": "Illinois" + }, + { + "city": "Winona", + "state": "Minnesota" + }, + { + "city": "Winooski", + "state": "Vermont" + }, + { + "city": "Winslow", + "state": "Maine" + }, + { + "city": "Winslow", + "state": "Maine" + }, + { + "city": "Winslow", + "state": "Arizona" + }, + { + "city": "Winsted", + "state": "Connecticut" + }, + { + "city": "Winston", + "state": "Florida" + }, + { + "city": "Winston-Salem", + "state": "North Carolina" + }, + { + "city": "Winter Garden", + "state": "Florida" + }, + { + "city": "Winter Gardens", + "state": "California" + }, + { + "city": "Winter Haven", + "state": "Florida" + }, + { + "city": "Winter Park", + "state": "Florida" + }, + { + "city": "Winter Springs", + "state": "Florida" + }, + { + "city": "Winters", + "state": "California" + }, + { + "city": "Winthrop", + "state": "Maine" + }, + { + "city": "Winthrop", + "state": "Massachusetts" + }, + { + "city": "Winthrop", + "state": "Massachusetts" + }, + { + "city": "Winthrop Harbor", + "state": "Illinois" + }, + { + "city": "Winton", + "state": "California" + }, + { + "city": "Wisconsin Rapids", + "state": "Wisconsin" + }, + { + "city": "Wixom", + "state": "Michigan" + }, + { + "city": "Woburn", + "state": "Massachusetts" + }, + { + "city": "Wolcott", + "state": "Connecticut" + }, + { + "city": "Wolf Trap", + "state": "Virginia" + }, + { + "city": "Wolfeboro", + "state": "New Hampshire" + }, + { + "city": "Wonder Lake", + "state": "Illinois" + }, + { + "city": "Wood Dale", + "state": "Illinois" + }, + { + "city": "Wood River", + "state": "Illinois" + }, + { + "city": "Wood-Ridge", + "state": "New Jersey" + }, + { + "city": "Woodbourne-Hyde Park", + "state": "Ohio" + }, + { + "city": "Woodbridge", + "state": "New Jersey" + }, + { + "city": "Woodbridge", + "state": "Connecticut" + }, + { + "city": "Woodbridge", + "state": "Virginia" + }, + { + "city": "Woodburn", + "state": "Oregon" + }, + { + "city": "Woodbury", + "state": "Connecticut" + }, + { + "city": "Woodbury", + "state": "New Jersey" + }, + { + "city": "Woodbury", + "state": "Minnesota" + }, + { + "city": "Woodbury", + "state": "New York" + }, + { + "city": "Woodbury", + "state": "New York" + }, + { + "city": "Woodcrest", + "state": "California" + }, + { + "city": "Woodfield", + "state": "South Carolina" + }, + { + "city": "Woodhaven", + "state": "Michigan" + }, + { + "city": "Woodinville", + "state": "Washington" + }, + { + "city": "Woodlake", + "state": "California" + }, + { + "city": "Woodland", + "state": "California" + }, + { + "city": "Woodland Park", + "state": "Colorado" + }, + { + "city": "Woodlawn", + "state": "Maryland" + }, + { + "city": "Woodlawn", + "state": "Maryland" + }, + { + "city": "Woodlyn", + "state": "Pennsylvania" + }, + { + "city": "Woodmere", + "state": "Louisiana" + }, + { + "city": "Woodmere", + "state": "New York" + }, + { + "city": "Woodmoor", + "state": "Colorado" + }, + { + "city": "Woodmore", + "state": "Maryland" + }, + { + "city": "Woodridge", + "state": "Illinois" + }, + { + "city": "Woods Cross", + "state": "Utah" + }, + { + "city": "Woodstock", + "state": "Georgia" + }, + { + "city": "Woodstock", + "state": "Illinois" + }, + { + "city": "Woodstock", + "state": "Connecticut" + }, + { + "city": "Woodstock", + "state": "New York" + }, + { + "city": "Woodward", + "state": "Oklahoma" + }, + { + "city": "Woodway", + "state": "Texas" + }, + { + "city": "Woonsocket", + "state": "Rhode Island" + }, + { + "city": "Wooster", + "state": "Ohio" + }, + { + "city": "Worcester", + "state": "Massachusetts" + }, + { + "city": "Worth", + "state": "Illinois" + }, + { + "city": "Worthington", + "state": "Minnesota" + }, + { + "city": "Worthington", + "state": "Ohio" + }, + { + "city": "Wrentham", + "state": "Massachusetts" + }, + { + "city": "Wright", + "state": "Florida" + }, + { + "city": "Wright-Patterson AFB", + "state": "Ohio" + }, + { + "city": "Wyandanch", + "state": "New York" + }, + { + "city": "Wyandotte", + "state": "Michigan" + }, + { + "city": "Wyckoff", + "state": "New Jersey" + }, + { + "city": "Wylie", + "state": "Texas" + }, + { + "city": "Wyndham", + "state": "Virginia" + }, + { + "city": "Wynne", + "state": "Arkansas" + }, + { + "city": "Wyoming", + "state": "Ohio" + }, + { + "city": "Wyoming", + "state": "Michigan" + }, + { + "city": "Wyomissing", + "state": "Pennsylvania" + }, + { + "city": "Wytheville", + "state": "Virginia" + }, + { + "city": "Xenia", + "state": "Ohio" + }, + { + "city": "Yakima", + "state": "Washington" + }, + { + "city": "Yankton", + "state": "South Dakota" + }, + { + "city": "Yardville-Groveville", + "state": "New Jersey" + }, + { + "city": "Yarmouth", + "state": "Maine" + }, + { + "city": "Yarmouth", + "state": "Massachusetts" + }, + { + "city": "Yazoo City", + "state": "Mississippi" + }, + { + "city": "Yeadon", + "state": "Pennsylvania" + }, + { + "city": "Yeehaw Junction", + "state": "Florida" + }, + { + "city": "Yonkers", + "state": "New York" + }, + { + "city": "Yorba Linda", + "state": "California" + }, + { + "city": "York", + "state": "Nebraska" + }, + { + "city": "York", + "state": "Maine" + }, + { + "city": "York", + "state": "Pennsylvania" + }, + { + "city": "York", + "state": "South Carolina" + }, + { + "city": "Yorketown", + "state": "New Jersey" + }, + { + "city": "Yorkshire", + "state": "Virginia" + }, + { + "city": "Yorktown", + "state": "New York" + }, + { + "city": "Yorktown Heights", + "state": "New York" + }, + { + "city": "Yorkville", + "state": "Illinois" + }, + { + "city": "Youngstown", + "state": "Ohio" + }, + { + "city": "Ypsilanti", + "state": "Michigan" + }, + { + "city": "Yreka", + "state": "California" + }, + { + "city": "Yuba City", + "state": "California" + }, + { + "city": "Yucaipa", + "state": "California" + }, + { + "city": "Yucca Valley", + "state": "California" + }, + { + "city": "Yukon", + "state": "Oklahoma" + }, + { + "city": "Yulee", + "state": "Florida" + }, + { + "city": "Yuma", + "state": "Arizona" + }, + { + "city": "Zachary", + "state": "Louisiana" + }, + { + "city": "Zanesville", + "state": "Ohio" + }, + { + "city": "Zephyrhills", + "state": "Florida" + }, + { + "city": "Zion", + "state": "Illinois" + }, + { + "city": "Zionsville", + "state": "Indiana" + }, + { + "city": "Zuni Pueblo", + "state": "New Mexico" + } +] \ No newline at end of file diff --git a/public/assets/css/bootstrap-theme.css b/public/assets/css/bootstrap-theme.css new file mode 100644 index 0000000..31d8882 --- /dev/null +++ b/public/assets/css/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/public/assets/css/bootstrap-theme.css.map b/public/assets/css/bootstrap-theme.css.map new file mode 100644 index 0000000..d876f60 --- /dev/null +++ b/public/assets/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/public/assets/css/bootstrap-theme.min.css b/public/assets/css/bootstrap-theme.min.css new file mode 100644 index 0000000..5e39401 --- /dev/null +++ b/public/assets/css/bootstrap-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/public/assets/css/bootstrap-theme.min.css.map b/public/assets/css/bootstrap-theme.min.css.map new file mode 100644 index 0000000..94813e9 --- /dev/null +++ b/public/assets/css/bootstrap-theme.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/public/assets/css/bootstrap.css b/public/assets/css/bootstrap.css new file mode 100644 index 0000000..6167622 --- /dev/null +++ b/public/assets/css/bootstrap.css @@ -0,0 +1,6757 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/public/assets/css/bootstrap.css.map b/public/assets/css/bootstrap.css.map new file mode 100644 index 0000000..f010c82 --- /dev/null +++ b/public/assets/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,iBAAA;CH8O9C;AG7OmC;EAAW,iBAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EEnDA,2CAAA;EACA,qBAAA;CNokCD;AIvgCD;EACE,UAAA;CJygCD;AIngCD;EACE,uBAAA;CJqgCD;AIjgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CP+kCD;AIrgCD;EACE,mBAAA;CJugCD;AIjgCD;EACE,aAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CP+lCD;AIjgCD;EACE,mBAAA;CJmgCD;AI7/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJ+/BD;AIv/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJy/BD;AIj/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJm/BH;AIx+BD;EACE,gBAAA;CJ0+BD;AQjoCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR6oCD;AQlpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRmqCH;AQ/pCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRoqCD;AQxqCD;;;;;;;;;;;;EAQI,eAAA;CR8qCH;AQ3qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRgrCD;AQprCD;;;;;;;;;;;;EAQI,eAAA;CR0rCH;AQtrCD;;EAAU,gBAAA;CR0rCT;AQzrCD;;EAAU,gBAAA;CR6rCT;AQ5rCD;;EAAU,gBAAA;CRgsCT;AQ/rCD;;EAAU,gBAAA;CRmsCT;AQlsCD;;EAAU,gBAAA;CRssCT;AQrsCD;;EAAU,gBAAA;CRysCT;AQnsCD;EACE,iBAAA;CRqsCD;AQlsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRosCD;AQ/rCD;EAwOA;IA1OI,gBAAA;GRqsCD;CACF;AQ7rCD;;EAEE,eAAA;CR+rCD;AQ5rCD;;EAEE,0BAAA;EACA,cAAA;CR8rCD;AQ1rCD;EAAuB,iBAAA;CR6rCtB;AQ5rCD;EAAuB,kBAAA;CR+rCtB;AQ9rCD;EAAuB,mBAAA;CRisCtB;AQhsCD;EAAuB,oBAAA;CRmsCtB;AQlsCD;EAAuB,oBAAA;CRqsCtB;AQlsCD;EAAuB,0BAAA;CRqsCtB;AQpsCD;EAAuB,0BAAA;CRusCtB;AQtsCD;EAAuB,2BAAA;CRysCtB;AQtsCD;EACE,eAAA;CRwsCD;AQtsCD;ECrGE,eAAA;CT8yCD;AS7yCC;;EAEE,eAAA;CT+yCH;AQ1sCD;ECxGE,eAAA;CTqzCD;ASpzCC;;EAEE,eAAA;CTszCH;AQ9sCD;EC3GE,eAAA;CT4zCD;AS3zCC;;EAEE,eAAA;CT6zCH;AQltCD;EC9GE,eAAA;CTm0CD;ASl0CC;;EAEE,eAAA;CTo0CH;AQttCD;ECjHE,eAAA;CT00CD;ASz0CC;;EAEE,eAAA;CT20CH;AQttCD;EAGE,YAAA;EE3HA,0BAAA;CVk1CD;AUj1CC;;EAEE,0BAAA;CVm1CH;AQxtCD;EE9HE,0BAAA;CVy1CD;AUx1CC;;EAEE,0BAAA;CV01CH;AQ5tCD;EEjIE,0BAAA;CVg2CD;AU/1CC;;EAEE,0BAAA;CVi2CH;AQhuCD;EEpIE,0BAAA;CVu2CD;AUt2CC;;EAEE,0BAAA;CVw2CH;AQpuCD;EEvIE,0BAAA;CV82CD;AU72CC;;EAEE,0BAAA;CV+2CH;AQnuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRquCD;AQ7tCD;;EAEE,cAAA;EACA,oBAAA;CR+tCD;AQluCD;;;;EAMI,iBAAA;CRkuCH;AQ3tCD;EACE,gBAAA;EACA,iBAAA;CR6tCD;AQztCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR4tCD;AQ9tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR4tCH;AQvtCD;EACE,cAAA;EACA,oBAAA;CRytCD;AQvtCD;;EAEE,wBAAA;CRytCD;AQvtCD;EACE,kBAAA;CRytCD;AQvtCD;EACE,eAAA;CRytCD;AQhsCD;EA6EA;IAvFM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXq6CC;EQ7nCH;IAhFM,mBAAA;GRgtCH;CACF;AQvsCD;;EAGE,aAAA;EACA,kCAAA;CRwsCD;AQtsCD;EACE,eAAA;EA9IqB,0BAAA;CRu1CtB;AQpsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRssCD;AQjsCG;;;EACE,iBAAA;CRqsCL;AQ/sCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRisCH;AQ/rCG;;;EACE,uBAAA;CRmsCL;AQ3rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR6rCD;AQvrCG;;;;;;EAAW,YAAA;CR+rCd;AQ9rCG;;;;;;EACE,uBAAA;CRqsCL;AQ/rCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRisCD;AYv+CD;;;;EAIE,+DAAA;CZy+CD;AYr+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZu+CD;AYn+CD;EACE,iBAAA;EACA,eAAA;EACA,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZq+CD;AY3+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZq+CH;AYh+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;CZk+CD;AY7+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZi+CH;AY59CD;EACE,kBAAA;EACA,mBAAA;CZ89CD;AaxhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd8hDD;AaxhDC;EAqEF;IAvEI,aAAA;Gb8hDD;CACF;Aa1hDC;EAkEF;IApEI,aAAA;GbgiDD;CACF;Aa5hDD;EA+DA;IAjEI,cAAA;GbkiDD;CACF;AazhDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdmjDD;AathDD;ECvBE,mBAAA;EACA,oBAAA;CdgjDD;AehjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfgjDL;AehiDG;EACE,YAAA;CfkiDL;Ae3hDC;EACE,YAAA;Cf6hDH;Ae9hDC;EACE,oBAAA;CfgiDH;AejiDC;EACE,oBAAA;CfmiDH;AepiDC;EACE,WAAA;CfsiDH;AeviDC;EACE,oBAAA;CfyiDH;Ae1iDC;EACE,oBAAA;Cf4iDH;Ae7iDC;EACE,WAAA;Cf+iDH;AehjDC;EACE,oBAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,WAAA;CfwjDH;AezjDC;EACE,oBAAA;Cf2jDH;Ae5jDC;EACE,mBAAA;Cf8jDH;AehjDC;EACE,YAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,oBAAA;CfwjDH;AezjDC;EACE,WAAA;Cf2jDH;Ae5jDC;EACE,oBAAA;Cf8jDH;Ae/jDC;EACE,oBAAA;CfikDH;AelkDC;EACE,WAAA;CfokDH;AerkDC;EACE,oBAAA;CfukDH;AexkDC;EACE,oBAAA;Cf0kDH;Ae3kDC;EACE,WAAA;Cf6kDH;Ae9kDC;EACE,oBAAA;CfglDH;AejlDC;EACE,mBAAA;CfmlDH;Ae/kDC;EACE,YAAA;CfilDH;AejmDC;EACE,WAAA;CfmmDH;AepmDC;EACE,mBAAA;CfsmDH;AevmDC;EACE,mBAAA;CfymDH;Ae1mDC;EACE,UAAA;Cf4mDH;Ae7mDC;EACE,mBAAA;Cf+mDH;AehnDC;EACE,mBAAA;CfknDH;AennDC;EACE,UAAA;CfqnDH;AetnDC;EACE,mBAAA;CfwnDH;AeznDC;EACE,mBAAA;Cf2nDH;Ae5nDC;EACE,UAAA;Cf8nDH;Ae/nDC;EACE,mBAAA;CfioDH;AeloDC;EACE,kBAAA;CfooDH;AehoDC;EACE,WAAA;CfkoDH;AepnDC;EACE,kBAAA;CfsnDH;AevnDC;EACE,0BAAA;CfynDH;Ae1nDC;EACE,0BAAA;Cf4nDH;Ae7nDC;EACE,iBAAA;Cf+nDH;AehoDC;EACE,0BAAA;CfkoDH;AenoDC;EACE,0BAAA;CfqoDH;AetoDC;EACE,iBAAA;CfwoDH;AezoDC;EACE,0BAAA;Cf2oDH;Ae5oDC;EACE,0BAAA;Cf8oDH;Ae/oDC;EACE,iBAAA;CfipDH;AelpDC;EACE,0BAAA;CfopDH;AerpDC;EACE,yBAAA;CfupDH;AexpDC;EACE,gBAAA;Cf0pDH;Aa1pDD;EElCI;IACE,YAAA;Gf+rDH;EexrDD;IACE,YAAA;Gf0rDD;Ee3rDD;IACE,oBAAA;Gf6rDD;Ee9rDD;IACE,oBAAA;GfgsDD;EejsDD;IACE,WAAA;GfmsDD;EepsDD;IACE,oBAAA;GfssDD;EevsDD;IACE,oBAAA;GfysDD;Ee1sDD;IACE,WAAA;Gf4sDD;Ee7sDD;IACE,oBAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,WAAA;GfqtDD;EettDD;IACE,oBAAA;GfwtDD;EeztDD;IACE,mBAAA;Gf2tDD;Ee7sDD;IACE,YAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,oBAAA;GfqtDD;EettDD;IACE,WAAA;GfwtDD;EeztDD;IACE,oBAAA;Gf2tDD;Ee5tDD;IACE,oBAAA;Gf8tDD;Ee/tDD;IACE,WAAA;GfiuDD;EeluDD;IACE,oBAAA;GfouDD;EeruDD;IACE,oBAAA;GfuuDD;EexuDD;IACE,WAAA;Gf0uDD;Ee3uDD;IACE,oBAAA;Gf6uDD;Ee9uDD;IACE,mBAAA;GfgvDD;Ee5uDD;IACE,YAAA;Gf8uDD;Ee9vDD;IACE,WAAA;GfgwDD;EejwDD;IACE,mBAAA;GfmwDD;EepwDD;IACE,mBAAA;GfswDD;EevwDD;IACE,UAAA;GfywDD;Ee1wDD;IACE,mBAAA;Gf4wDD;Ee7wDD;IACE,mBAAA;Gf+wDD;EehxDD;IACE,UAAA;GfkxDD;EenxDD;IACE,mBAAA;GfqxDD;EetxDD;IACE,mBAAA;GfwxDD;EezxDD;IACE,UAAA;Gf2xDD;Ee5xDD;IACE,mBAAA;Gf8xDD;Ee/xDD;IACE,kBAAA;GfiyDD;Ee7xDD;IACE,WAAA;Gf+xDD;EejxDD;IACE,kBAAA;GfmxDD;EepxDD;IACE,0BAAA;GfsxDD;EevxDD;IACE,0BAAA;GfyxDD;Ee1xDD;IACE,iBAAA;Gf4xDD;Ee7xDD;IACE,0BAAA;Gf+xDD;EehyDD;IACE,0BAAA;GfkyDD;EenyDD;IACE,iBAAA;GfqyDD;EetyDD;IACE,0BAAA;GfwyDD;EezyDD;IACE,0BAAA;Gf2yDD;Ee5yDD;IACE,iBAAA;Gf8yDD;Ee/yDD;IACE,0BAAA;GfizDD;EelzDD;IACE,yBAAA;GfozDD;EerzDD;IACE,gBAAA;GfuzDD;CACF;Aa/yDD;EE3CI;IACE,YAAA;Gf61DH;Eet1DD;IACE,YAAA;Gfw1DD;Eez1DD;IACE,oBAAA;Gf21DD;Ee51DD;IACE,oBAAA;Gf81DD;Ee/1DD;IACE,WAAA;Gfi2DD;Eel2DD;IACE,oBAAA;Gfo2DD;Eer2DD;IACE,oBAAA;Gfu2DD;Eex2DD;IACE,WAAA;Gf02DD;Ee32DD;IACE,oBAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,WAAA;Gfm3DD;Eep3DD;IACE,oBAAA;Gfs3DD;Eev3DD;IACE,mBAAA;Gfy3DD;Ee32DD;IACE,YAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,oBAAA;Gfm3DD;Eep3DD;IACE,WAAA;Gfs3DD;Eev3DD;IACE,oBAAA;Gfy3DD;Ee13DD;IACE,oBAAA;Gf43DD;Ee73DD;IACE,WAAA;Gf+3DD;Eeh4DD;IACE,oBAAA;Gfk4DD;Een4DD;IACE,oBAAA;Gfq4DD;Eet4DD;IACE,WAAA;Gfw4DD;Eez4DD;IACE,oBAAA;Gf24DD;Ee54DD;IACE,mBAAA;Gf84DD;Ee14DD;IACE,YAAA;Gf44DD;Ee55DD;IACE,WAAA;Gf85DD;Ee/5DD;IACE,mBAAA;Gfi6DD;Eel6DD;IACE,mBAAA;Gfo6DD;Eer6DD;IACE,UAAA;Gfu6DD;Eex6DD;IACE,mBAAA;Gf06DD;Ee36DD;IACE,mBAAA;Gf66DD;Ee96DD;IACE,UAAA;Gfg7DD;Eej7DD;IACE,mBAAA;Gfm7DD;Eep7DD;IACE,mBAAA;Gfs7DD;Eev7DD;IACE,UAAA;Gfy7DD;Ee17DD;IACE,mBAAA;Gf47DD;Ee77DD;IACE,kBAAA;Gf+7DD;Ee37DD;IACE,WAAA;Gf67DD;Ee/6DD;IACE,kBAAA;Gfi7DD;Eel7DD;IACE,0BAAA;Gfo7DD;Eer7DD;IACE,0BAAA;Gfu7DD;Eex7DD;IACE,iBAAA;Gf07DD;Ee37DD;IACE,0BAAA;Gf67DD;Ee97DD;IACE,0BAAA;Gfg8DD;Eej8DD;IACE,iBAAA;Gfm8DD;Eep8DD;IACE,0BAAA;Gfs8DD;Eev8DD;IACE,0BAAA;Gfy8DD;Ee18DD;IACE,iBAAA;Gf48DD;Ee78DD;IACE,0BAAA;Gf+8DD;Eeh9DD;IACE,yBAAA;Gfk9DD;Een9DD;IACE,gBAAA;Gfq9DD;CACF;Aa18DD;EE9CI;IACE,YAAA;Gf2/DH;Eep/DD;IACE,YAAA;Gfs/DD;Eev/DD;IACE,oBAAA;Gfy/DD;Ee1/DD;IACE,oBAAA;Gf4/DD;Ee7/DD;IACE,WAAA;Gf+/DD;EehgED;IACE,oBAAA;GfkgED;EengED;IACE,oBAAA;GfqgED;EetgED;IACE,WAAA;GfwgED;EezgED;IACE,oBAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,WAAA;GfihED;EelhED;IACE,oBAAA;GfohED;EerhED;IACE,mBAAA;GfuhED;EezgED;IACE,YAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,oBAAA;GfihED;EelhED;IACE,WAAA;GfohED;EerhED;IACE,oBAAA;GfuhED;EexhED;IACE,oBAAA;Gf0hED;Ee3hED;IACE,WAAA;Gf6hED;Ee9hED;IACE,oBAAA;GfgiED;EejiED;IACE,oBAAA;GfmiED;EepiED;IACE,WAAA;GfsiED;EeviED;IACE,oBAAA;GfyiED;Ee1iED;IACE,mBAAA;Gf4iED;EexiED;IACE,YAAA;Gf0iED;Ee1jED;IACE,WAAA;Gf4jED;Ee7jED;IACE,mBAAA;Gf+jED;EehkED;IACE,mBAAA;GfkkED;EenkED;IACE,UAAA;GfqkED;EetkED;IACE,mBAAA;GfwkED;EezkED;IACE,mBAAA;Gf2kED;Ee5kED;IACE,UAAA;Gf8kED;Ee/kED;IACE,mBAAA;GfilED;EellED;IACE,mBAAA;GfolED;EerlED;IACE,UAAA;GfulED;EexlED;IACE,mBAAA;Gf0lED;Ee3lED;IACE,kBAAA;Gf6lED;EezlED;IACE,WAAA;Gf2lED;Ee7kED;IACE,kBAAA;Gf+kED;EehlED;IACE,0BAAA;GfklED;EenlED;IACE,0BAAA;GfqlED;EetlED;IACE,iBAAA;GfwlED;EezlED;IACE,0BAAA;Gf2lED;Ee5lED;IACE,0BAAA;Gf8lED;Ee/lED;IACE,iBAAA;GfimED;EelmED;IACE,0BAAA;GfomED;EermED;IACE,0BAAA;GfumED;EexmED;IACE,iBAAA;Gf0mED;Ee3mED;IACE,0BAAA;Gf6mED;Ee9mED;IACE,yBAAA;GfgnED;EejnED;IACE,gBAAA;GfmnED;CACF;AgBvrED;EACE,8BAAA;ChByrED;AgBvrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChByrED;AgBvrED;EACE,iBAAA;ChByrED;AgBnrED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBqrED;AgBxrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChBqrEP;AgBnsED;EAoBI,uBAAA;EACA,8BAAA;ChBkrEH;AgBvsED;;;;;;EA8BQ,cAAA;ChBirEP;AgB/sED;EAoCI,2BAAA;ChB8qEH;AgBltED;EAyCI,uBAAA;ChB4qEH;AgBrqED;;;;;;EAOQ,aAAA;ChBsqEP;AgB3pED;EACE,uBAAA;ChB6pED;AgB9pED;;;;;;EAQQ,uBAAA;ChB8pEP;AgBtqED;;EAeM,yBAAA;ChB2pEL;AgBjpED;EAEI,0BAAA;ChBkpEH;AgBzoED;EAEI,0BAAA;ChB0oEH;AgBjoED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBmoED;AgB9nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBioEL;AiB7wEC;;;;;;;;;;;;EAOI,0BAAA;CjBoxEL;AiB9wEC;;;;;EAMI,0BAAA;CjB+wEL;AiBlyEC;;;;;;;;;;;;EAOI,0BAAA;CjByyEL;AiBnyEC;;;;;EAMI,0BAAA;CjBoyEL;AiBvzEC;;;;;;;;;;;;EAOI,0BAAA;CjB8zEL;AiBxzEC;;;;;EAMI,0BAAA;CjByzEL;AiB50EC;;;;;;;;;;;;EAOI,0BAAA;CjBm1EL;AiB70EC;;;;;EAMI,0BAAA;CjB80EL;AiBj2EC;;;;;;;;;;;;EAOI,0BAAA;CjBw2EL;AiBl2EC;;;;;EAMI,0BAAA;CjBm2EL;AgBjtED;EACE,iBAAA;EACA,kBAAA;ChBmtED;AgBtpED;EACA;IA3DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBotED;EgB7pEH;IAnDM,iBAAA;GhBmtEH;EgBhqEH;;;;;;IA1CY,oBAAA;GhBktET;EgBxqEH;IAlCM,UAAA;GhB6sEH;EgB3qEH;;;;;;IAzBY,eAAA;GhB4sET;EgBnrEH;;;;;;IArBY,gBAAA;GhBgtET;EgB3rEH;;;;IARY,iBAAA;GhBysET;CACF;AkBn6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBk6ED;AkB/5ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBi6ED;AkB95ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBg6ED;AkBr5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL43ET;AkBr5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBu5ED;AkBp5ED;EACE,eAAA;ClBs5ED;AkBl5ED;EACE,eAAA;EACA,YAAA;ClBo5ED;AkBh5ED;;EAEE,aAAA;ClBk5ED;AkB94ED;;;EZrEE,2CAAA;EACA,qBAAA;CNw9ED;AkB74ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClB+4ED;AkBr3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CLwzET;AmBh8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CLy7ET;AKx5EC;EACE,YAAA;EACA,WAAA;CL05EH;AKx5EC;EAA0B,YAAA;CL25E3B;AK15EC;EAAgC,YAAA;CL65EjC;AkBj4EC;EACE,UAAA;EACA,8BAAA;ClBm4EH;AkB33EC;;;EAGE,0BAAA;EACA,WAAA;ClB63EH;AkB13EC;;EAEE,oBAAA;ClB43EH;AkBx3EC;EACE,aAAA;ClB03EH;AkB92ED;EACE,yBAAA;ClBg3ED;AkBx0ED;EAtBI;;;;IACE,kBAAA;GlBo2EH;EkBj2EC;;;;;;;;IAEE,kBAAA;GlBy2EH;EkBt2EC;;;;;;;;IAEE,kBAAA;GlB82EH;CACF;AkBp2ED;EACE,oBAAA;ClBs2ED;AkB91ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBg2ED;AkBr2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2EH;AkB91ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBg2ED;AkB71ED;;EAEE,iBAAA;ClB+1ED;AkB31ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClB61ED;AkB31ED;;EAEE,cAAA;EACA,kBAAA;ClB61ED;AkBp1EC;;;;;;EAGE,oBAAA;ClBy1EH;AkBn1EC;;;;EAEE,oBAAA;ClBu1EH;AkBj1EC;;;;EAGI,oBAAA;ClBo1EL;AkBz0ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClBy0ED;AkBv0EC;;EAEE,gBAAA;EACA,iBAAA;ClBy0EH;AkB5zED;ECnQE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBkkFD;AmBhkFC;EACE,aAAA;EACA,kBAAA;CnBkkFH;AmB/jFC;;EAEE,aAAA;CnBikFH;AkBx0ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClBy0EH;AkB/0ED;EASI,aAAA;EACA,kBAAA;ClBy0EH;AkBn1ED;;EAcI,aAAA;ClBy0EH;AkBv1ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClBy0EH;AkBr0ED;EC/RE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBumFD;AmBrmFC;EACE,aAAA;EACA,kBAAA;CnBumFH;AmBpmFC;;EAEE,aAAA;CnBsmFH;AkBj1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBk1EH;AkBx1ED;EASI,aAAA;EACA,kBAAA;ClBk1EH;AkB51ED;;EAcI,aAAA;ClBk1EH;AkBh2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBk1EH;AkBz0ED;EAEE,mBAAA;ClB00ED;AkB50ED;EAMI,sBAAA;ClBy0EH;AkBr0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBn0ED;;;;;;;;;;EC1ZI,eAAA;CnByuFH;AkB/0ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL0rFT;AmBxuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL+rFT;AkBz1ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBwuFH;AkB91ED;ECtYI,eAAA;CnBuuFH;AkB91ED;;;;;;;;;;EC7ZI,eAAA;CnBuwFH;AkB12ED;ECzZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwtFT;AmBtwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6tFT;AkBp3ED;EC/YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBswFH;AkBz3ED;ECzYI,eAAA;CnBqwFH;AkBz3ED;;;;;;;;;;EChaI,eAAA;CnBqyFH;AkBr4ED;EC5ZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLsvFT;AmBpyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2vFT;AkB/4ED;EClZI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBoyFH;AkBp5ED;EC5YI,eAAA;CnBmyFH;AkBh5EC;EACE,UAAA;ClBk5EH;AkBh5EC;EACE,OAAA;ClBk5EH;AkBx4ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB04ED;AkBvzED;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBy3EH;EkBrvEH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBu3EH;EkB1vEH;IAxHM,sBAAA;GlBq3EH;EkB7vEH;IApHM,sBAAA;IACA,uBAAA;GlBo3EH;EkBjwEH;;;IA9GQ,YAAA;GlBo3EL;EkBtwEH;IAxGM,YAAA;GlBi3EH;EkBzwEH;IApGM,iBAAA;IACA,uBAAA;GlBg3EH;EkB7wEH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB62EH;EkBpxEH;;IAtFQ,gBAAA;GlB82EL;EkBxxEH;;IAjFM,mBAAA;IACA,eAAA;GlB62EH;EkB7xEH;IA3EM,OAAA;GlB22EH;CACF;AkBj2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClB81EH;AkBz2ED;;EAiBI,iBAAA;ClB41EH;AkB72ED;EJthBE,mBAAA;EACA,oBAAA;Cds4FD;AkB10EC;EAyBF;IAnCM,kBAAA;IACA,iBAAA;IACA,iBAAA;GlBw1EH;CACF;AkBx3ED;EAwCI,YAAA;ClBm1EH;AkBr0EC;EAUF;IAdQ,kBAAA;IACA,gBAAA;GlB60EL;CACF;AkBn0EC;EAEF;IANQ,iBAAA;IACA,gBAAA;GlB20EL;CACF;AoBp6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC0CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB+JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL+tFT;AoBv6FG;;;;;;EdnBF,2CAAA;EACA,qBAAA;CNk8FD;AoB16FC;;;EAGE,YAAA;EACA,sBAAA;CpB46FH;AoBz6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLi5FT;AoBz6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CL05FT;AoBz6FG;;EAEE,qBAAA;CpB26FL;AoBl6FD;EC3DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBg+FD;AqB99FC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBs+FT;AqBn+FC;;;EAGE,uBAAA;CrBq+FH;AqBh+FG;;;;;;;;;EAGE,uBAAA;EACI,mBAAA;CrBw+FT;AoBv9FD;ECZI,YAAA;EACA,uBAAA;CrBs+FH;AoBx9FD;EC9DE,YAAA;EACA,0BAAA;EACA,sBAAA;CrByhGD;AqBvhGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB+hGT;AqB5hGC;;;EAGE,uBAAA;CrB8hGH;AqBzhGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBiiGT;AoB7gGD;ECfI,eAAA;EACA,uBAAA;CrB+hGH;AoB7gGD;EClEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBklGD;AqBhlGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBwlGT;AqBrlGC;;;EAGE,uBAAA;CrBulGH;AqBllGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB0lGT;AoBlkGD;ECnBI,eAAA;EACA,uBAAA;CrBwlGH;AoBlkGD;ECtEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB2oGD;AqBzoGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBipGT;AqB9oGC;;;EAGE,uBAAA;CrBgpGH;AqB3oGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBmpGT;AoBvnGD;ECvBI,eAAA;EACA,uBAAA;CrBipGH;AoBvnGD;EC1EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBosGD;AqBlsGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB0sGT;AqBvsGC;;;EAGE,uBAAA;CrBysGH;AqBpsGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB4sGT;AoB5qGD;EC3BI,eAAA;EACA,uBAAA;CrB0sGH;AoB5qGD;EC9EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6vGD;AqB3vGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBmwGT;AqBhwGC;;;EAGE,uBAAA;CrBkwGH;AqB7vGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBqwGT;AoBjuGD;EC/BI,eAAA;EACA,uBAAA;CrBmwGH;AoB5tGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpB8tGD;AoB5tGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLkwGT;AoB7tGC;;;;EAIE,0BAAA;CpB+tGH;AoB7tGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpB+tGH;AoB3tGG;;;;EAEE,eAAA;EACA,sBAAA;CpB+tGL;AoBttGD;;ECxEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBkyGD;AoBztGD;;EC5EE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrByyGD;AoB5tGD;;EChFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBgzGD;AoB3tGD;EACE,eAAA;EACA,YAAA;CpB6tGD;AoBztGD;EACE,gBAAA;CpB2tGD;AoBptGC;;;EACE,YAAA;CpBwtGH;AuBl3GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLisGT;AuBr3GC;EACE,WAAA;CvBu3GH;AuBn3GD;EACE,cAAA;CvBq3GD;AuBn3GC;EAAY,eAAA;CvBs3Gb;AuBr3GC;EAAY,mBAAA;CvBw3Gb;AuBv3GC;EAAY,yBAAA;CvB03Gb;AuBv3GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CL2sGT;AwBr5GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxBu5GD;AwBn5GD;;EAEE,mBAAA;CxBq5GD;AwBj5GD;EACE,WAAA;CxBm5GD;AwB/4GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBk5GD;AwB74GC;EACE,SAAA;EACA,WAAA;CxB+4GH;AwBx6GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBo8GD;AwB96GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB84GH;AwBx4GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB04GH;AwBp4GC;;;EAGE,YAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxBs4GH;AwB73GC;;;EAGE,eAAA;CxB+3GH;AwB33GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxB63GH;AwBx3GD;EAGI,eAAA;CxBw3GH;AwB33GD;EAQI,WAAA;CxBs3GH;AwB92GD;EACE,WAAA;EACA,SAAA;CxBg3GD;AwBx2GD;EACE,QAAA;EACA,YAAA;CxB02GD;AwBt2GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBw2GD;AwBp2GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxBs2GD;AwBl2GD;EACE,SAAA;EACA,WAAA;CxBo2GD;AwB51GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxB41GH;AwBn2GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB41GH;AwBv0GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB05GC;EwBv1GD;IA1DA,QAAA;IACA,YAAA;GxBo5GC;CACF;A2BpiHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3BsiHD;A2B1iHD;;EAMI,mBAAA;EACA,YAAA;C3BwiHH;A2BtiHG;;;;;;;;EAIE,WAAA;C3B4iHL;A2BtiHD;;;;EAKI,kBAAA;C3BuiHH;A2BliHD;EACE,kBAAA;C3BoiHD;A2BriHD;;;EAOI,YAAA;C3BmiHH;A2B1iHD;;;EAYI,iBAAA;C3BmiHH;A2B/hHD;EACE,iBAAA;C3BiiHD;A2B7hHD;EACE,eAAA;C3B+hHD;A2B9hHC;EClDA,8BAAA;EACG,2BAAA;C5BmlHJ;A2B7hHD;;EC/CE,6BAAA;EACG,0BAAA;C5BglHJ;A2B5hHD;EACE,YAAA;C3B8hHD;A2B5hHD;EACE,iBAAA;C3B8hHD;A2B5hHD;;ECnEE,8BAAA;EACG,2BAAA;C5BmmHJ;A2B3hHD;ECjEE,6BAAA;EACG,0BAAA;C5B+lHJ;A2B1hHD;;EAEE,WAAA;C3B4hHD;A2B3gHD;EACE,kBAAA;EACA,mBAAA;C3B6gHD;A2B3gHD;EACE,mBAAA;EACA,oBAAA;C3B6gHD;A2BxgHD;EtB/CE,yDAAA;EACQ,iDAAA;CL0jHT;A2BxgHC;EtBnDA,yBAAA;EACQ,iBAAA;CL8jHT;A2BrgHD;EACE,eAAA;C3BugHD;A2BpgHD;EACE,wBAAA;EACA,uBAAA;C3BsgHD;A2BngHD;EACE,wBAAA;C3BqgHD;A2B9/GD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3B+/GH;A2BtgHD;EAcM,YAAA;C3B2/GL;A2BzgHD;;;;EAsBI,iBAAA;EACA,eAAA;C3By/GH;A2Bp/GC;EACE,iBAAA;C3Bs/GH;A2Bp/GC;EC3KA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B4pHF;A2Bt/GC;EC/KA,2BAAA;EACC,0BAAA;EAOD,gCAAA;EACC,+BAAA;C5BkqHF;A2Bv/GD;EACE,iBAAA;C3By/GD;A2Bv/GD;;EC/KE,8BAAA;EACC,6BAAA;C5B0qHF;A2Bt/GD;EC7LE,2BAAA;EACC,0BAAA;C5BsrHF;A2Bl/GD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3Bo/GD;A2Bx/GD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3Bq/GH;A2B9/GD;EAYI,YAAA;C3Bq/GH;A2BjgHD;EAgBI,WAAA;C3Bo/GH;A2Bn+GD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3Bo+GL;A6B9sHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BgtHD;A6B7sHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7B+sHH;A6BxtHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7BusHH;A6BrsHG;EACE,WAAA;C7BusHL;A6B7rHD;;;EV0BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwqHD;AmBtqHC;;;EACE,aAAA;EACA,kBAAA;CnB0qHH;AmBvqHC;;;;;;EAEE,aAAA;CnB6qHH;A6B/sHD;;;EVqBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+rHD;AmB7rHC;;;EACE,aAAA;EACA,kBAAA;CnBisHH;AmB9rHC;;;;;;EAEE,aAAA;CnBosHH;A6B7tHD;;;EAGE,oBAAA;C7B+tHD;A6B7tHC;;;EACE,iBAAA;C7BiuHH;A6B7tHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7B+tHD;A6B1tHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7B4tHD;A6BztHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6BztHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6B/uHD;;EA0BI,cAAA;C7BytHH;A6BptHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;C5Bi0HJ;A6BrtHD;EACE,gBAAA;C7ButHD;A6BrtHD;;;;;;;EDxGE,6BAAA;EACG,0BAAA;C5Bs0HJ;A6BttHD;EACE,eAAA;C7BwtHD;A6BntHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BmtHD;A6BxtHD;EAUI,mBAAA;C7BitHH;A6B3tHD;EAYM,kBAAA;C7BktHL;A6B/sHG;;;EAGE,WAAA;C7BitHL;A6B5sHC;;EAGI,mBAAA;C7B6sHL;A6B1sHC;;EAGI,WAAA;EACA,kBAAA;C7B2sHL;A8B12HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B42HD;A8B/2HD;EAOI,mBAAA;EACA,eAAA;C9B22HH;A8Bn3HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B22HL;A8B12HK;;EAEE,sBAAA;EACA,0BAAA;C9B42HP;A8Bv2HG;EACE,eAAA;C9By2HL;A8Bv2HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By2HP;A8Bl2HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo2HL;A8B74HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm5HD;A8Bn5HD;EA0DI,gBAAA;C9B41HH;A8Bn1HD;EACE,8BAAA;C9Bq1HD;A8Bt1HD;EAGI,YAAA;EAEA,oBAAA;C9Bq1HH;A8B11HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo1HL;A8Bn1HK;EACE,mCAAA;C9Bq1HP;A8B/0HK;;;EAGE,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;EACA,gBAAA;C9Bi1HP;A8B50HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6vHD;A8Bh1HC;EAwDE,YAAA;C9B2xHH;A8Bn1HC;EA0DI,mBAAA;EACA,mBAAA;C9B4xHL;A8Bv1HC;EAgEE,UAAA;EACA,WAAA;C9B0xHH;A8B9wHD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9ByxHH;E8BztHH;IA9DQ,iBAAA;G9B0xHL;CACF;A8Bp2HC;EAuFE,gBAAA;EACA,mBAAA;C9BgxHH;A8Bx2HC;;;EA8FE,uBAAA;C9B+wHH;A8BjwHD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9B8wHH;E8B3uHH;;;IA9BM,0BAAA;G9B8wHH;CACF;A8B/2HD;EAEI,YAAA;C9Bg3HH;A8Bl3HD;EAMM,mBAAA;C9B+2HL;A8Br3HD;EASM,iBAAA;C9B+2HL;A8B12HK;;;EAGE,YAAA;EACA,0BAAA;C9B42HP;A8Bp2HD;EAEI,YAAA;C9Bq2HH;A8Bv2HD;EAIM,gBAAA;EACA,eAAA;C9Bs2HL;A8B11HD;EACE,YAAA;C9B41HD;A8B71HD;EAII,YAAA;C9B41HH;A8Bh2HD;EAMM,mBAAA;EACA,mBAAA;C9B61HL;A8Bp2HD;EAYI,UAAA;EACA,WAAA;C9B21HH;A8B/0HD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B01HH;E8B1xHH;IA9DQ,iBAAA;G9B21HL;CACF;A8Bn1HD;EACE,iBAAA;C9Bq1HD;A8Bt1HD;EAKI,gBAAA;EACA,mBAAA;C9Bo1HH;A8B11HD;;;EAYI,uBAAA;C9Bm1HH;A8Br0HD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9Bk1HH;E8B/yHH;;;IA9BM,0BAAA;G9Bk1HH;CACF;A8Bz0HD;EAEI,cAAA;C9B00HH;A8B50HD;EAKI,eAAA;C9B00HH;A8Bj0HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8iIF;A+BxiID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0iID;A+BliID;EA8nBA;IAhoBI,mBAAA;G/BwiID;CACF;A+BzhID;EAgnBA;IAlnBI,YAAA;G/B+hID;CACF;A+BjhID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkhID;A+BhhIC;EACE,iBAAA;C/BkhIH;A+Bt/HD;EA6jBA;IArlBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkhID;E+BhhIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkhIH;E+B/gIC;IACE,oBAAA;G/BihIH;E+B5gIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8gIH;CACF;A+B1gID;;EAGI,kBAAA;C/B2gIH;A+BtgIC;EAmjBF;;IArjBM,kBAAA;G/B6gIH;CACF;A+BpgID;;;;EAII,oBAAA;EACA,mBAAA;C/BsgIH;A+BhgIC;EAgiBF;;;;IAniBM,gBAAA;IACA,eAAA;G/B0gIH;CACF;A+B9/HD;EACE,cAAA;EACA,sBAAA;C/BggID;A+B3/HD;EA8gBA;IAhhBI,iBAAA;G/BigID;CACF;A+B7/HD;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+/HD;A+Bz/HD;EAggBA;;IAlgBI,iBAAA;G/BggID;CACF;A+B9/HD;EACE,OAAA;EACA,sBAAA;C/BggID;A+B9/HD;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BggID;A+B1/HD;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4/HD;A+B1/HC;;EAEE,sBAAA;C/B4/HH;A+BrgID;EAaI,eAAA;C/B2/HH;A+Bl/HD;EALI;;IAEE,mBAAA;G/B0/HH;CACF;A+Bh/HD;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/Bm/HD;A+B/+HC;EACE,WAAA;C/Bi/HH;A+B//HD;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B++HH;A+BrgID;EAyBI,gBAAA;C/B++HH;A+Bz+HD;EAqbA;IAvbI,cAAA;G/B++HD;CACF;A+Bt+HD;EACE,oBAAA;C/Bw+HD;A+Bz+HD;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/Bw+HH;A+B58HC;EA2YF;IAjaM,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/Bs+HH;E+B3kHH;;IAxZQ,2BAAA;G/Bu+HL;E+B/kHH;IArZQ,kBAAA;G/Bu+HL;E+Bt+HK;;IAEE,uBAAA;G/Bw+HP;CACF;A+Bt9HD;EA+XA;IA1YI,YAAA;IACA,UAAA;G/Bq+HD;E+B5lHH;IAtYM,YAAA;G/Bq+HH;E+B/lHH;IApYQ,kBAAA;IACA,qBAAA;G/Bs+HL;CACF;A+B39HD;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4vID;AkBtuHD;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBwyHH;EkBpqHH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBsyHH;EkBzqHH;IAxHM,sBAAA;GlBoyHH;EkB5qHH;IApHM,sBAAA;IACA,uBAAA;GlBmyHH;EkBhrHH;;;IA9GQ,YAAA;GlBmyHL;EkBrrHH;IAxGM,YAAA;GlBgyHH;EkBxrHH;IApGM,iBAAA;IACA,uBAAA;GlB+xHH;EkB5rHH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB4xHH;EkBnsHH;;IAtFQ,gBAAA;GlB6xHL;EkBvsHH;;IAjFM,mBAAA;IACA,eAAA;GlB4xHH;EkB5sHH;IA3EM,OAAA;GlB0xHH;CACF;A+BpgIC;EAmWF;IAzWM,mBAAA;G/B8gIH;E+B5gIG;IACE,iBAAA;G/B8gIL;CACF;A+B7/HD;EAoVA;IA5VI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmwIP;CACF;A+BngID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B00IF;A+BngID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By0IF;A+B//HD;EChVE,gBAAA;EACA,mBAAA;ChCk1ID;A+BhgIC;ECnVA,iBAAA;EACA,oBAAA;ChCs1ID;A+BjgIC;ECtVA,iBAAA;EACA,oBAAA;ChC01ID;A+B3/HD;EChWE,iBAAA;EACA,oBAAA;ChC81ID;A+Bv/HD;EAsSA;IA1SI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+/HD;CACF;A+Bl+HD;EAhBE;IExWA,uBAAA;GjC81IC;E+Br/HD;IE5WA,wBAAA;IF8WE,oBAAA;G/Bu/HD;E+Bz/HD;IAKI,gBAAA;G/Bu/HH;CACF;A+B9+HD;EACE,0BAAA;EACA,sBAAA;C/Bg/HD;A+Bl/HD;EAKI,YAAA;C/Bg/HH;A+B/+HG;;EAEE,eAAA;EACA,8BAAA;C/Bi/HL;A+B1/HD;EAcI,YAAA;C/B++HH;A+B7/HD;EAmBM,YAAA;C/B6+HL;A+B3+HK;;EAEE,YAAA;EACA,8BAAA;C/B6+HP;A+Bz+HK;;;EAGE,YAAA;EACA,0BAAA;C/B2+HP;A+Bv+HK;;;EAGE,YAAA;EACA,8BAAA;C/By+HP;A+BjhID;EA8CI,mBAAA;C/Bs+HH;A+Br+HG;;EAEE,uBAAA;C/Bu+HL;A+BxhID;EAoDM,uBAAA;C/Bu+HL;A+B3hID;;EA0DI,sBAAA;C/Bq+HH;A+B99HK;;;EAGE,0BAAA;EACA,YAAA;C/Bg+HP;A+B/7HC;EAoKF;IA7LU,YAAA;G/B49HP;E+B39HO;;IAEE,YAAA;IACA,8BAAA;G/B69HT;E+Bz9HO;;;IAGE,YAAA;IACA,0BAAA;G/B29HT;E+Bv9HO;;;IAGE,YAAA;IACA,8BAAA;G/By9HT;CACF;A+B3jID;EA8GI,YAAA;C/Bg9HH;A+B/8HG;EACE,YAAA;C/Bi9HL;A+BjkID;EAqHI,YAAA;C/B+8HH;A+B98HG;;EAEE,YAAA;C/Bg9HL;A+B58HK;;;;EAEE,YAAA;C/Bg9HP;A+Bx8HD;EACE,uBAAA;EACA,sBAAA;C/B08HD;A+B58HD;EAKI,eAAA;C/B08HH;A+Bz8HG;;EAEE,YAAA;EACA,8BAAA;C/B28HL;A+Bp9HD;EAcI,eAAA;C/By8HH;A+Bv9HD;EAmBM,eAAA;C/Bu8HL;A+Br8HK;;EAEE,YAAA;EACA,8BAAA;C/Bu8HP;A+Bn8HK;;;EAGE,YAAA;EACA,0BAAA;C/Bq8HP;A+Bj8HK;;;EAGE,YAAA;EACA,8BAAA;C/Bm8HP;A+B3+HD;EA+CI,mBAAA;C/B+7HH;A+B97HG;;EAEE,uBAAA;C/Bg8HL;A+Bl/HD;EAqDM,uBAAA;C/Bg8HL;A+Br/HD;;EA2DI,sBAAA;C/B87HH;A+Bx7HK;;;EAGE,0BAAA;EACA,YAAA;C/B07HP;A+Bn5HC;EAwBF;IAvDU,sBAAA;G/Bs7HP;E+B/3HH;IApDU,0BAAA;G/Bs7HP;E+Bl4HH;IAjDU,eAAA;G/Bs7HP;E+Br7HO;;IAEE,YAAA;IACA,8BAAA;G/Bu7HT;E+Bn7HO;;;IAGE,YAAA;IACA,0BAAA;G/Bq7HT;E+Bj7HO;;;IAGE,YAAA;IACA,8BAAA;G/Bm7HT;CACF;A+B3hID;EA+GI,eAAA;C/B+6HH;A+B96HG;EACE,YAAA;C/Bg7HL;A+BjiID;EAsHI,eAAA;C/B86HH;A+B76HG;;EAEE,YAAA;C/B+6HL;A+B36HK;;;;EAEE,YAAA;C/B+6HP;AkCzjJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2jJD;AkChkJD;EAQI,sBAAA;ClC2jJH;AkCnkJD;EAWM,kBAAA;EACA,eAAA;EACA,YAAA;ClC2jJL;AkCxkJD;EAkBI,eAAA;ClCyjJH;AmC7kJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+kJD;AmCnlJD;EAOI,gBAAA;CnC+kJH;AmCtlJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,kBAAA;CnCglJL;AmC9kJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2lJJ;AmC7kJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwmJJ;AmCxkJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC4kJL;AmCtkJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2kJL;AmCloJD;;;;;;EAkEM,eAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;CnCwkJL;AmC/jJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8oJL;AoC5oJG;;ERKF,+BAAA;EACG,4BAAA;C5B2oJJ;AoC3oJG;;ERTF,gCAAA;EACG,6BAAA;C5BwpJJ;AmC1kJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8pJL;AoC5pJG;;ERKF,+BAAA;EACG,4BAAA;C5B2pJJ;AoC3pJG;;ERTF,gCAAA;EACG,6BAAA;C5BwqJJ;AqC3qJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6qJD;AqCjrJD;EAOI,gBAAA;CrC6qJH;AqCprJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrC8qJL;AqC5rJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6qJL;AqCjsJD;;EA2BM,aAAA;CrC0qJL;AqCrsJD;;EAkCM,YAAA;CrCuqJL;AqCzsJD;;;;EA2CM,eAAA;EACA,uBAAA;EACA,oBAAA;CrCoqJL;AsCltJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCotJD;AsChtJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtCktJL;AsC7sJC;EACE,cAAA;CtC+sJH;AsC3sJC;EACE,mBAAA;EACA,UAAA;CtC6sJH;AsCtsJD;ECtCE,0BAAA;CvC+uJD;AuC5uJG;;EAEE,0BAAA;CvC8uJL;AsCzsJD;EC1CE,0BAAA;CvCsvJD;AuCnvJG;;EAEE,0BAAA;CvCqvJL;AsC5sJD;EC9CE,0BAAA;CvC6vJD;AuC1vJG;;EAEE,0BAAA;CvC4vJL;AsC/sJD;EClDE,0BAAA;CvCowJD;AuCjwJG;;EAEE,0BAAA;CvCmwJL;AsCltJD;ECtDE,0BAAA;CvC2wJD;AuCxwJG;;EAEE,0BAAA;CvC0wJL;AsCrtJD;EC1DE,0BAAA;CvCkxJD;AuC/wJG;;EAEE,0BAAA;CvCixJL;AwCnxJD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCqxJD;AwClxJC;EACE,cAAA;CxCoxJH;AwChxJC;EACE,mBAAA;EACA,UAAA;CxCkxJH;AwC/wJC;;EAEE,OAAA;EACA,iBAAA;CxCixJH;AwC5wJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxC8wJL;AwCzwJC;;EAEE,eAAA;EACA,uBAAA;CxC2wJH;AwCxwJC;EACE,aAAA;CxC0wJH;AwCvwJC;EACE,kBAAA;CxCywJH;AwCtwJC;EACE,iBAAA;CxCwwJH;AyCl0JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo0JD;AyCz0JD;;EASI,eAAA;CzCo0JH;AyC70JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm0JH;AyCl1JD;EAmBI,0BAAA;CzCk0JH;AyC/zJC;;EAEE,mBAAA;EACA,mBAAA;EACA,oBAAA;CzCi0JH;AyC31JD;EA8BI,gBAAA;CzCg0JH;AyC9yJD;EACA;IAfI,kBAAA;IACA,qBAAA;GzCg0JD;EyC9zJC;;IAEE,mBAAA;IACA,oBAAA;GzCg0JH;EyCvzJH;;IAJM,gBAAA;GzC+zJH;CACF;A0C52JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL8rJT;A0Cx3JD;;EAaI,kBAAA;EACA,mBAAA;C1C+2JH;A0C32JC;;;EAGE,sBAAA;C1C62JH;A0Cl4JD;EA0BI,aAAA;EACA,eAAA;C1C22JH;A2Cp4JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Cs4JD;A2C14JD;EAQI,cAAA;EAEA,eAAA;C3Co4JH;A2C94JD;EAeI,kBAAA;C3Ck4JH;A2Cj5JD;;EAqBI,iBAAA;C3Cg4JH;A2Cr5JD;EAyBI,gBAAA;C3C+3JH;A2Cv3JD;;EAEE,oBAAA;C3Cy3JD;A2C33JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cy3JH;A2Cj3JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C26JD;A2Ct3JD;EClDI,0BAAA;C5C26JH;A2Cz3JD;EC/CI,eAAA;C5C26JH;A2Cx3JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cs7JD;A2C73JD;ECtDI,0BAAA;C5Cs7JH;A2Ch4JD;ECnDI,eAAA;C5Cs7JH;A2C/3JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Ci8JD;A2Cp4JD;EC1DI,0BAAA;C5Ci8JH;A2Cv4JD;ECvDI,eAAA;C5Ci8JH;A2Ct4JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C48JD;A2C34JD;EC9DI,0BAAA;C5C48JH;A2C94JD;EC3DI,eAAA;C5C48JH;A6C98JD;EACE;IAAQ,4BAAA;G7Ci9JP;E6Ch9JD;IAAQ,yBAAA;G7Cm9JP;CACF;A6Ch9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6Cx9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6C98JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CL26JT;A6C78JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL+zJT;A6C18JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C88JD;A6Cv8JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLu/JT;A6Cp8JD;EErEE,0BAAA;C/C4gKD;A+CzgKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C49JH;A6Cx8JD;EEzEE,0BAAA;C/CohKD;A+CjhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co+JH;A6C58JD;EE7EE,0BAAA;C/C4hKD;A+CzhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C4+JH;A6Ch9JD;EEjFE,0BAAA;C/CoiKD;A+CjiKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co/JH;AgD5iKD;EAEE,iBAAA;ChD6iKD;AgD3iKC;EACE,cAAA;ChD6iKH;AgDziKD;;EAEE,QAAA;EACA,iBAAA;ChD2iKD;AgDxiKD;EACE,eAAA;ChD0iKD;AgDviKD;EACE,eAAA;ChDyiKD;AgDtiKC;EACE,gBAAA;ChDwiKH;AgDpiKD;;EAEE,mBAAA;ChDsiKD;AgDniKD;;EAEE,oBAAA;ChDqiKD;AgDliKD;;;EAGE,oBAAA;EACA,oBAAA;ChDoiKD;AgDjiKD;EACE,uBAAA;ChDmiKD;AgDhiKD;EACE,uBAAA;ChDkiKD;AgD9hKD;EACE,cAAA;EACA,mBAAA;ChDgiKD;AgD1hKD;EACE,gBAAA;EACA,iBAAA;ChD4hKD;AiDnlKD;EAEE,oBAAA;EACA,gBAAA;CjDolKD;AiD5kKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjD6kKD;AiD1kKC;ErB3BA,6BAAA;EACC,4BAAA;C5BwmKF;AiD3kKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BqmKF;AiDpkKD;;EAEE,YAAA;CjDskKD;AiDxkKD;;EAKI,YAAA;CjDukKH;AiDnkKC;;;;EAEE,sBAAA;EACA,YAAA;EACA,0BAAA;CjDukKH;AiDnkKD;EACE,YAAA;EACA,iBAAA;CjDqkKD;AiDhkKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDkkKH;AiDvkKC;;;EASI,eAAA;CjDmkKL;AiD5kKC;;;EAYI,eAAA;CjDqkKL;AiDhkKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDkkKH;AiDxkKC;;;;;;;;;EAYI,eAAA;CjDukKL;AiDnlKC;;;EAeI,eAAA;CjDykKL;AkD3qKC;EACE,eAAA;EACA,0BAAA;ClD6qKH;AkD3qKG;;EAEE,eAAA;ClD6qKL;AkD/qKG;;EAKI,eAAA;ClD8qKP;AkD3qKK;;;;EAEE,eAAA;EACA,0BAAA;ClD+qKP;AkD7qKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDkrKP;AkDxsKC;EACE,eAAA;EACA,0BAAA;ClD0sKH;AkDxsKG;;EAEE,eAAA;ClD0sKL;AkD5sKG;;EAKI,eAAA;ClD2sKP;AkDxsKK;;;;EAEE,eAAA;EACA,0BAAA;ClD4sKP;AkD1sKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD+sKP;AkDruKC;EACE,eAAA;EACA,0BAAA;ClDuuKH;AkDruKG;;EAEE,eAAA;ClDuuKL;AkDzuKG;;EAKI,eAAA;ClDwuKP;AkDruKK;;;;EAEE,eAAA;EACA,0BAAA;ClDyuKP;AkDvuKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD4uKP;AkDlwKC;EACE,eAAA;EACA,0BAAA;ClDowKH;AkDlwKG;;EAEE,eAAA;ClDowKL;AkDtwKG;;EAKI,eAAA;ClDqwKP;AkDlwKK;;;;EAEE,eAAA;EACA,0BAAA;ClDswKP;AkDpwKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDywKP;AiDxqKD;EACE,cAAA;EACA,mBAAA;CjD0qKD;AiDxqKD;EACE,iBAAA;EACA,iBAAA;CjD0qKD;AmDpyKD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL6uKT;AmDnyKD;EACE,cAAA;CnDqyKD;AmDhyKD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5BuzKF;AmDtyKD;EAMI,eAAA;CnDmyKH;AmD9xKD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDgyKD;AmDpyKD;;;;;EAWI,eAAA;CnDgyKH;AmD3xKD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bs0KF;AmDrxKD;;EAGI,iBAAA;CnDsxKH;AmDzxKD;;EAMM,oBAAA;EACA,iBAAA;CnDuxKL;AmDnxKG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B61KF;AmDjxKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5B21KF;AmD1yKD;EvB1DE,2BAAA;EACC,0BAAA;C5Bu2KF;AmD7wKD;EAEI,oBAAA;CnD8wKH;AmD3wKD;EACE,oBAAA;CnD6wKD;AmDrwKD;;;EAII,iBAAA;CnDswKH;AmD1wKD;;;EAOM,mBAAA;EACA,oBAAA;CnDwwKL;AmDhxKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B63KF;AmDrxKD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDwwKP;AmD5xKD;;;;;;;;EAwBU,4BAAA;CnD8wKT;AmDtyKD;;;;;;;;EA4BU,6BAAA;CnDoxKT;AmDhzKD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bq5KF;AmDrzKD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDkxKP;AmD5zKD;;;;;;;;EA8CU,+BAAA;CnDwxKT;AmDt0KD;;;;;;;;EAkDU,gCAAA;CnD8xKT;AmDh1KD;;;;EA2DI,2BAAA;CnD2xKH;AmDt1KD;;EA+DI,cAAA;CnD2xKH;AmD11KD;;EAmEI,UAAA;CnD2xKH;AmD91KD;;;;;;;;;;;;EA0EU,eAAA;CnDkyKT;AmD52KD;;;;;;;;;;;;EA8EU,gBAAA;CnD4yKT;AmD13KD;;;;;;;;EAuFU,iBAAA;CnD6yKT;AmDp4KD;;;;;;;;EAgGU,iBAAA;CnD8yKT;AmD94KD;EAsGI,UAAA;EACA,iBAAA;CnD2yKH;AmDjyKD;EACE,oBAAA;CnDmyKD;AmDpyKD;EAKI,iBAAA;EACA,mBAAA;CnDkyKH;AmDxyKD;EASM,gBAAA;CnDkyKL;AmD3yKD;EAcI,iBAAA;CnDgyKH;AmD9yKD;;EAkBM,2BAAA;CnDgyKL;AmDlzKD;EAuBI,cAAA;CnD8xKH;AmDrzKD;EAyBM,8BAAA;CnD+xKL;AmDxxKD;EC1PE,mBAAA;CpDqhLD;AoDnhLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDqhLH;AoDxhLC;EAMI,uBAAA;CpDqhLL;AoD3hLC;EASI,eAAA;EACA,0BAAA;CpDqhLL;AoDlhLC;EAEI,0BAAA;CpDmhLL;AmDvyKD;EC7PE,sBAAA;CpDuiLD;AoDriLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpDuiLH;AoD1iLC;EAMI,0BAAA;CpDuiLL;AoD7iLC;EASI,eAAA;EACA,uBAAA;CpDuiLL;AoDpiLC;EAEI,6BAAA;CpDqiLL;AmDtzKD;EChQE,sBAAA;CpDyjLD;AoDvjLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDyjLH;AoD5jLC;EAMI,0BAAA;CpDyjLL;AoD/jLC;EASI,eAAA;EACA,0BAAA;CpDyjLL;AoDtjLC;EAEI,6BAAA;CpDujLL;AmDr0KD;ECnQE,sBAAA;CpD2kLD;AoDzkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2kLH;AoD9kLC;EAMI,0BAAA;CpD2kLL;AoDjlLC;EASI,eAAA;EACA,0BAAA;CpD2kLL;AoDxkLC;EAEI,6BAAA;CpDykLL;AmDp1KD;ECtQE,sBAAA;CpD6lLD;AoD3lLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6lLH;AoDhmLC;EAMI,0BAAA;CpD6lLL;AoDnmLC;EASI,eAAA;EACA,0BAAA;CpD6lLL;AoD1lLC;EAEI,6BAAA;CpD2lLL;AmDn2KD;ECzQE,sBAAA;CpD+mLD;AoD7mLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD+mLH;AoDlnLC;EAMI,0BAAA;CpD+mLL;AoDrnLC;EASI,eAAA;EACA,0BAAA;CpD+mLL;AoD5mLC;EAEI,6BAAA;CpD6mLL;AqD7nLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD+nLD;AqDpoLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD+nLH;AqD1nLD;EACE,uBAAA;CrD4nLD;AqDxnLD;EACE,oBAAA;CrD0nLD;AsDrpLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CLgmLT;AsD/pLD;EASI,mBAAA;EACA,kCAAA;CtDypLH;AsDppLD;EACE,cAAA;EACA,mBAAA;CtDspLD;AsDppLD;EACE,aAAA;EACA,mBAAA;CtDspLD;AuD5qLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBqrLD;AuD7qLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB6rLD;AuDzqLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvD2qLH;AwDhsLD;EACE,iBAAA;CxDksLD;AwD9rLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD6rLD;AwD1rLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL6gLT;AwDhsLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLwlLT;AwDpsLD;EACE,mBAAA;EACA,iBAAA;CxDssLD;AwDlsLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDosLD;AwDhsLD;EACE,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDksLD;AwD9rLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxDgsLD;AwD9rLC;ElCrEA,WAAA;EAGA,yBAAA;CtBowLD;AwDjsLC;ElCtEA,aAAA;EAGA,0BAAA;CtBwwLD;AwDhsLD;EACE,cAAA;EACA,iCAAA;CxDksLD;AwD9rLD;EACE,iBAAA;CxDgsLD;AwD5rLD;EACE,UAAA;EACA,wBAAA;CxD8rLD;AwDzrLD;EACE,mBAAA;EACA,cAAA;CxD2rLD;AwDvrLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDyrLD;AwD5rLD;EAQI,iBAAA;EACA,iBAAA;CxDurLH;AwDhsLD;EAaI,kBAAA;CxDsrLH;AwDnsLD;EAiBI,eAAA;CxDqrLH;AwDhrLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDkrLD;AwDhqLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD+qLD;EwD7qLD;InDvEA,kDAAA;IACQ,0CAAA;GLuvLP;EwD5qLD;IAAY,aAAA;GxD+qLX;CACF;AwD1qLD;EAFE;IAAY,aAAA;GxDgrLX;CACF;AyD/zLD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBs1LD;AyD30LC;EnCdA,aAAA;EAGA,0BAAA;CtB01LD;AyD90LC;EAAW,iBAAA;EAAmB,eAAA;CzDk1L/B;AyDj1LC;EAAW,iBAAA;EAAmB,eAAA;CzDq1L/B;AyDp1LC;EAAW,gBAAA;EAAmB,eAAA;CzDw1L/B;AyDv1LC;EAAW,kBAAA;EAAmB,eAAA;CzD21L/B;AyDv1LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzDy1LD;AyDr1LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDu1LD;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;A2Dl7LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,uBAAA;EACA,qCAAA;UAAA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLk5LT;A2D77LC;EAAY,kBAAA;C3Dg8Lb;A2D/7LC;EAAY,kBAAA;C3Dk8Lb;A2Dj8LC;EAAY,iBAAA;C3Do8Lb;A2Dn8LC;EAAY,mBAAA;C3Ds8Lb;A2Dn8LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Dq8LD;A2Dl8LD;EACE,kBAAA;C3Do8LD;A2D57LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D87LH;A2D37LD;EACE,mBAAA;C3D67LD;A2D37LD;EACE,mBAAA;EACA,YAAA;C3D67LD;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;C3D47LL;A2Dz7LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;C3D47LL;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,0BAAA;C3D47LL;A2Dx7LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D07LH;A2Dz7LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,wBAAA;EACA,cAAA;C3D27LL;A4DpjMD;EACE,mBAAA;C5DsjMD;A4DnjMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DqjMD;A4DxjMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLy4LT;A4D/jMD;;EAcM,eAAA;C5DqjML;A4D3hMC;EA4NF;IvD3DE,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL86LP;E4DzjMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D4jML;E4D1jMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D6jML;E4D3jMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D8jML;CACF;A4DpmMD;;;EA6CI,eAAA;C5D4jMH;A4DzmMD;EAiDI,QAAA;C5D2jMH;A4D5mMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5D0jMH;A4DlnMD;EA4DI,WAAA;C5DyjMH;A4DrnMD;EA+DI,YAAA;C5DyjMH;A4DxnMD;;EAmEI,QAAA;C5DyjMH;A4D5nMD;EAuEI,YAAA;C5DwjMH;A4D/nMD;EA0EI,WAAA;C5DwjMH;A4DhjMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;C5DmjMD;A4D9iMC;EdnGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CopMH;A4DljMC;EACE,WAAA;EACA,SAAA;EdxGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C6pMH;A4DpjMC;;EAEE,WAAA;EACA,YAAA;EACA,sBAAA;EtCvHF,aAAA;EAGA,0BAAA;CtB4qMD;A4DtlMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DqjMH;A4DhmMD;;EA+CI,UAAA;EACA,mBAAA;C5DqjMH;A4DrmMD;;EAoDI,WAAA;EACA,oBAAA;C5DqjMH;A4D1mMD;;EAyDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DqjMH;A4DhjMG;EACE,iBAAA;C5DkjML;A4D9iMG;EACE,iBAAA;C5DgjML;A4DtiMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DwiMD;A4DjjMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D8hMH;A4D7jMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;C5D8hMH;A4DvhMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5DyhMD;A4DxhMC;EACE,kBAAA;C5D0hMH;A4Dj/LD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DmhMH;E4D3hMD;;IAYI,mBAAA;G5DmhMH;E4D/hMD;;IAgBI,oBAAA;G5DmhMH;E4D9gMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5DghMD;E4D5gMD;IACE,aAAA;G5D8gMD;CACF;A6D7wMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7D6yMH;A6D3yMC;;;;;;;;;;;;;;;;EACE,YAAA;C7D4zMH;AiCp0MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D+0MD;AiCt0MD;EACE,wBAAA;CjCw0MD;AiCt0MD;EACE,uBAAA;CjCw0MD;AiCh0MD;EACE,yBAAA;CjCk0MD;AiCh0MD;EACE,0BAAA;CjCk0MD;AiCh0MD;EACE,mBAAA;CjCk0MD;AiCh0MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/D41MD;AiC9zMD;EACE,yBAAA;CjCg0MD;AiCzzMD;EACE,gBAAA;CjC2zMD;AgE51MD;EACE,oBAAA;ChE81MD;AgEx1MD;;;;ECdE,yBAAA;CjE42MD;AgEv1MD;;;;;;;;;;;;EAYE,yBAAA;ChEy1MD;AgEl1MD;EA6IA;IC7LE,0BAAA;GjEs4MC;EiEr4MD;IAAU,0BAAA;GjEw4MT;EiEv4MD;IAAU,8BAAA;GjE04MT;EiEz4MD;;IACU,+BAAA;GjE44MT;CACF;AgE51MD;EAwIA;IA1II,0BAAA;GhEk2MD;CACF;AgE51MD;EAmIA;IArII,2BAAA;GhEk2MD;CACF;AgE51MD;EA8HA;IAhII,iCAAA;GhEk2MD;CACF;AgE31MD;EAwHA;IC7LE,0BAAA;GjEo6MC;EiEn6MD;IAAU,0BAAA;GjEs6MT;EiEr6MD;IAAU,8BAAA;GjEw6MT;EiEv6MD;;IACU,+BAAA;GjE06MT;CACF;AgEr2MD;EAmHA;IArHI,0BAAA;GhE22MD;CACF;AgEr2MD;EA8GA;IAhHI,2BAAA;GhE22MD;CACF;AgEr2MD;EAyGA;IA3GI,iCAAA;GhE22MD;CACF;AgEp2MD;EAmGA;IC7LE,0BAAA;GjEk8MC;EiEj8MD;IAAU,0BAAA;GjEo8MT;EiEn8MD;IAAU,8BAAA;GjEs8MT;EiEr8MD;;IACU,+BAAA;GjEw8MT;CACF;AgE92MD;EA8FA;IAhGI,0BAAA;GhEo3MD;CACF;AgE92MD;EAyFA;IA3FI,2BAAA;GhEo3MD;CACF;AgE92MD;EAoFA;IAtFI,iCAAA;GhEo3MD;CACF;AgE72MD;EA8EA;IC7LE,0BAAA;GjEg+MC;EiE/9MD;IAAU,0BAAA;GjEk+MT;EiEj+MD;IAAU,8BAAA;GjEo+MT;EiEn+MD;;IACU,+BAAA;GjEs+MT;CACF;AgEv3MD;EAyEA;IA3EI,0BAAA;GhE63MD;CACF;AgEv3MD;EAoEA;IAtEI,2BAAA;GhE63MD;CACF;AgEv3MD;EA+DA;IAjEI,iCAAA;GhE63MD;CACF;AgEt3MD;EAyDA;ICrLE,yBAAA;GjEs/MC;CACF;AgEt3MD;EAoDA;ICrLE,yBAAA;GjE2/MC;CACF;AgEt3MD;EA+CA;ICrLE,yBAAA;GjEggNC;CACF;AgEt3MD;EA0CA;ICrLE,yBAAA;GjEqgNC;CACF;AgEn3MD;ECnJE,yBAAA;CjEygND;AgEh3MD;EA4BA;IC7LE,0BAAA;GjEqhNC;EiEphND;IAAU,0BAAA;GjEuhNT;EiEthND;IAAU,8BAAA;GjEyhNT;EiExhND;;IACU,+BAAA;GjE2hNT;CACF;AgE93MD;EACE,yBAAA;ChEg4MD;AgE33MD;EAqBA;IAvBI,0BAAA;GhEi4MD;CACF;AgE/3MD;EACE,yBAAA;ChEi4MD;AgE53MD;EAcA;IAhBI,2BAAA;GhEk4MD;CACF;AgEh4MD;EACE,yBAAA;ChEk4MD;AgE73MD;EAOA;IATI,iCAAA;GhEm4MD;CACF;AgE53MD;EACA;ICrLE,yBAAA;GjEojNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on
    + + +
    + +
    +

    Payment Methods:

    + Visa + Mastercard + American Express + Paypal + +

    + Etsy doostang zoodles disqus groupon greplin oooj voxy zoodles, weebly ning heekya handango imeem plugg dopplr + jibjab, movity jajah plickers sifteo edmodo ifttt zimbra. +

    +
    + +
    +

    Amount Due 2/22/2014

    + +
    + + + + + + + + + + + + + + + + + +
    Subtotal:$250.30
    Tax (9.3%)$10.34
    Shipping:$5.80
    Total:$265.24
    +
    +
    + +
    + + + +
    + + + diff --git a/public/bower_components/AdminLTE/pages/examples/invoice.html b/public/bower_components/AdminLTE/pages/examples/invoice.html new file mode 100644 index 0000000..580bfac --- /dev/null +++ b/public/bower_components/AdminLTE/pages/examples/invoice.html @@ -0,0 +1,886 @@ + + + + + + AdminLTE 2 | Invoice + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Invoice + #007612 +

    + +
    + +
    +
    +

    Note:

    + This page has been enhanced for printing. Click the print button at the bottom of the invoice to test. +
    +
    + + +
    + +
    +
    + +
    + +
    + +
    +
    + From +
    + Admin, Inc.
    + 795 Folsom Ave, Suite 600
    + San Francisco, CA 94107
    + Phone: (804) 123-5432
    + Email: info@almasaeedstudio.com +
    +
    + +
    + To +
    + John Doe
    + 795 Folsom Ave, Suite 600
    + San Francisco, CA 94107
    + Phone: (555) 539-1037
    + Email: john.doe@example.com +
    +
    + +
    + Invoice #007612
    +
    + Order ID: 4F3S8J
    + Payment Due: 2/22/2014
    + Account: 968-34567 +
    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    QtyProductSerial #DescriptionSubtotal
    1Call of Duty455-981-221El snort testosterone trophy driving gloves handsome$64.50
    1Need for Speed IV247-925-726Wes Anderson umami biodiesel$50.00
    1Monsters DVD735-845-642Terry Richardson helvetica tousled street art master$10.70
    1Grown Ups Blue Ray422-568-642Tousled lomo letterpress$25.99
    +
    + +
    + + +
    + +
    +

    Payment Methods:

    + Visa + Mastercard + American Express + Paypal + +

    + Etsy doostang zoodles disqus groupon greplin oooj voxy zoodles, weebly ning heekya handango imeem plugg + dopplr jibjab, movity jajah plickers sifteo edmodo ifttt zimbra. +

    +
    + +
    +

    Amount Due 2/22/2014

    + +
    + + + + + + + + + + + + + + + + + +
    Subtotal:$250.30
    Tax (9.3%)$10.34
    Shipping:$5.80
    Total:$265.24
    +
    +
    + +
    + + + +
    +
    + Print + + +
    +
    +
    + +
    +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/examples/lockscreen.html b/public/bower_components/AdminLTE/pages/examples/lockscreen.html new file mode 100644 index 0000000..72b013a --- /dev/null +++ b/public/bower_components/AdminLTE/pages/examples/lockscreen.html @@ -0,0 +1,74 @@ + + + + + + AdminLTE 2 | Lockscreen + + + + + + + + + + + + + + + + + +
    + + +
    John Doe
    + + +
    + +
    + User Image +
    + + + +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    + Enter your password to retrieve your session +
    + + +
    + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/examples/login.html b/public/bower_components/AdminLTE/pages/examples/login.html new file mode 100644 index 0000000..34baf97 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/examples/login.html @@ -0,0 +1,94 @@ + + + + + + AdminLTE 2 | Log in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/examples/pace.html b/public/bower_components/AdminLTE/pages/examples/pace.html new file mode 100644 index 0000000..98af506 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/examples/pace.html @@ -0,0 +1,679 @@ + + + + + + AdminLTE 2 | Pace Page + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + + + + + + +
    + +
    +

    + Pace page + Loading example +

    + +
    + + +
    + + +
    +
    +

    Title

    + +
    + + +
    +
    +
    + Pace loading works automatically on page. You can still implement it with ajax requests by adding this js: +
    $(document).ajaxStart(function() { Pace.restart(); }); +
    +
    +
    + +
    +
    +
    +
    +
    + + + +
    + + +
    + +
    + + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/examples/profile.html b/public/bower_components/AdminLTE/pages/examples/profile.html new file mode 100644 index 0000000..06f5757 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/examples/profile.html @@ -0,0 +1,1085 @@ + + + + + + AdminLTE 2 | User Profile + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + User Profile +

    + +
    + + +
    + +
    +
    + + +
    +
    + User profile picture + +

    Nina Mcintire

    + +

    Software Engineer

    + + + + Follow +
    + +
    + + + +
    +
    +

    About Me

    +
    + +
    + Education + +

    + B.S. in Computer Science from the University of Tennessee at Knoxville +

    + +
    + + Location + +

    Malibu, California

    + +
    + + Skills + +

    + UI Design + Coding + Javascript + PHP + Node.js +

    + +
    + + Notes + +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam fermentum enim neque.

    +
    + +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/examples/register.html b/public/bower_components/AdminLTE/pages/examples/register.html new file mode 100644 index 0000000..c53b233 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/examples/register.html @@ -0,0 +1,99 @@ + + + + + + AdminLTE 2 | Registration Page + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    + + + + I already have a membership +
    + +
    + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/forms/advanced.html b/public/bower_components/AdminLTE/pages/forms/advanced.html new file mode 100644 index 0000000..509e699 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/forms/advanced.html @@ -0,0 +1,1220 @@ + + + + + + AdminLTE 2 | Advanced form elements + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Advanced Form Elements + Preview +

    + +
    + + +
    + + +
    +
    +

    Select2

    + +
    + + +
    +
    + +
    +
    +
    +
    + + +
    + +
    + + +
    + +
    + +
    +
    + + +
    + +
    + + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    +

    Input masks

    +
    +
    + +
    + + +
    +
    + +
    + +
    + +
    + + + +
    +
    +
    + +
    + +
    + +
    + + + +
    + + +
    +
    + +
    + +
    + +
    + + + +
    + + +
    +
    + +
    + +
    + +
    + + + +
    + + +
    +
    + +
    + +
    + +
    + + +
    + +
    + + +
    +
    +

    Color & Time Picker

    +
    +
    + +
    + + +
    + + + +
    + + +
    + + +
    + +
    +
    + +
    + + + +
    +
    + + +
    + + +
    + +
    +
    + +
    + +
    +
    + +
    + + +
    + +
    +
    +
    +

    Date picker

    +
    +
    + +
    + + +
    +
    + +
    + +
    + +
    + + + +
    + + +
    +
    + +
    + +
    + +
    + + + +
    + + +
    +
    + +
    + +
    + +
    + + + +
    + + +
    + +
    +
    + + +
    + +
    + + + +
    +
    +

    iCheck - Checkbox & Radio Inputs

    +
    +
    + + + +
    + + + +
    + + +
    + + + +
    + + + + +
    + + + +
    + + +
    + + + +
    + + + + +
    + + + +
    + + +
    + + + +
    +
    + + +
    + +
    + +
    + + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/forms/editors.html b/public/bower_components/AdminLTE/pages/forms/editors.html new file mode 100644 index 0000000..0e0e05a --- /dev/null +++ b/public/bower_components/AdminLTE/pages/forms/editors.html @@ -0,0 +1,798 @@ + + + + + + AdminLTE 2 | Editors + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Text Editors + Advanced form element +

    + +
    + + +
    +
    +
    +
    +
    +

    CK Editor + Advanced and full of features +

    + +
    + + +
    + +
    + +
    +
    + +
    +
    +
    + + +
    +
    +

    Bootstrap WYSIHTML5 + Simple and fast +

    + +
    + + +
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/forms/general.html b/public/bower_components/AdminLTE/pages/forms/general.html new file mode 100644 index 0000000..a834097 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/forms/general.html @@ -0,0 +1,1116 @@ + + + + + + AdminLTE 2 | General Form Elements + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + General Form Elements + Preview +

    + +
    + + +
    +
    + +
    + +
    +
    +

    Quick Example

    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + + +

    Example block-level help text here.

    +
    +
    + +
    +
    + + + +
    +
    + + + +
    +
    +

    Different Height

    +
    +
    + +
    + +
    + +
    + +
    + + +
    +
    +

    Different Width

    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    + + + +
    +
    +

    Input Addon

    +
    +
    +
    + @ + +
    +
    + +
    + + .00 +
    +
    + +
    + $ + + .00 +
    + +

    With icons

    + +
    + + +
    +
    + +
    + + +
    +
    + +
    + + + +
    + +

    With checkbox and radio inputs

    + +
    +
    +
    + + + + +
    + +
    + +
    +
    + + + + +
    + +
    + +
    + + +

    With buttons

    + +

    Large: .input-group.input-group-lg

    + +
    + + + +
    + +

    Normal

    + +
    +
    + +
    + + +
    + +

    Small .input-group.input-group-sm

    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    + +
    +
    +

    Horizontal Form

    +
    + + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + + +
    +
    + + +
    +
    +

    General Elements

    +
    + +
    +
    + +
    + + +
    +
    + + +
    + + +
    + + +
    +
    + + +
    + + +
    + + + Help block with success +
    +
    + + + Help block with warning +
    +
    + + + Help block with error +
    + + +
    +
    + +
    + +
    + +
    + +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
    + + +
    +
    + + +
    + + +
    + + +
    +
    + + +
    + +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/layout/boxed.html b/public/bower_components/AdminLTE/pages/layout/boxed.html new file mode 100644 index 0000000..3d29487 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/layout/boxed.html @@ -0,0 +1,654 @@ + + + + + + AdminLTE 2 | Boxed Layout + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + + + + + + +
    + +
    +

    + Boxed Layout + Blank example to the boxed layout +

    + +
    + + +
    +
    +

    Tip!

    + +

    Add the layout-boxed class to the body tag to get this layout. The boxed layout is helpful when working on + large screens because it prevents the site from stretching very wide.

    +
    + +
    +
    +

    Title

    + +
    + + +
    +
    +
    + Start creating your amazing application! +
    + + + +
    + +
    + +
    + + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/layout/collapsed-sidebar.html b/public/bower_components/AdminLTE/pages/layout/collapsed-sidebar.html new file mode 100644 index 0000000..ad1da1d --- /dev/null +++ b/public/bower_components/AdminLTE/pages/layout/collapsed-sidebar.html @@ -0,0 +1,660 @@ + + + + + + AdminLTE 2 | Collapsed Sidebar Layout + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + + + + + + +
    + +
    +

    + Sidebar Collapsed + Layout with collapsed sidebar on load +

    + +
    + + +
    +
    +

    Tip!

    + +

    Add the sidebar-collapse class to the body tag to get this layout. You should combine this option with a + fixed layout if you have a long sidebar. Doing that will prevent your page content from getting stretched + vertically.

    +
    + +
    +
    +

    Title

    + +
    + + +
    +
    +
    + Start creating your amazing application! +
    + + + +
    + +
    + +
    + + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/layout/fixed.html b/public/bower_components/AdminLTE/pages/layout/fixed.html new file mode 100644 index 0000000..5e3efbb --- /dev/null +++ b/public/bower_components/AdminLTE/pages/layout/fixed.html @@ -0,0 +1,660 @@ + + + + + + AdminLTE 2 | Fixed Layout + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + + + + + + +
    + +
    +

    + Fixed Layout + Blank example to the fixed layout +

    + +
    + + +
    +
    +

    Tip!

    + +

    Add the fixed class to the body tag to get this layout. The fixed layout is your best option if your sidebar + is bigger than your content because it prevents extra unwanted scrolling.

    +
    + +
    +
    +

    Title

    + +
    + + +
    +
    +
    + Start creating your amazing application! +
    + + + +
    + + +
    + +
    + + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/layout/top-nav.html b/public/bower_components/AdminLTE/pages/layout/top-nav.html new file mode 100644 index 0000000..e5a92ac --- /dev/null +++ b/public/bower_components/AdminLTE/pages/layout/top-nav.html @@ -0,0 +1,290 @@ + + + + + + AdminLTE 2 | Top Navigation + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    + +
    +

    + Top Navigation + Example 2.0 +

    + +
    + + +
    +
    +

    Tip!

    + +

    Add the layout-top-nav class to the body tag to get this layout. This feature can also be used with a + sidebar! So use this class if you want to remove the custom dropdown menus from the navbar and use regular + links instead.

    +
    +
    +

    Warning!

    + +

    The construction of this layout differs from the normal one. In other words, the HTML markup of the navbar + and the content will slightly differ than that of the normal layout.

    +
    +
    +
    +

    Blank Box

    +
    +
    + The great content goes here +
    + +
    + +
    + +
    + +
    + +
    +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/mailbox/compose.html b/public/bower_components/AdminLTE/pages/mailbox/compose.html new file mode 100644 index 0000000..a4d601e --- /dev/null +++ b/public/bower_components/AdminLTE/pages/mailbox/compose.html @@ -0,0 +1,760 @@ + + + + + + AdminLTE 2 | Compose Message + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Mailbox + 13 new messages +

    + +
    + + +
    +
    +
    + Back to Inbox + +
    +
    +

    Folders

    + +
    + +
    +
    + + +
    + +
    +
    +

    Labels

    + +
    + +
    +
    + + + +
    + +
    + +
    +
    +
    +

    Compose New Message

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + Attachment + +
    +

    Max. 32MB

    +
    +
    + + + +
    + +
    + +
    + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/mailbox/mailbox.html b/public/bower_components/AdminLTE/pages/mailbox/mailbox.html new file mode 100644 index 0000000..0f904c1 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/mailbox/mailbox.html @@ -0,0 +1,940 @@ + + + + + + AdminLTE 2 | Mailbox + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Mailbox + 13 new messages +

    + +
    + + +
    +
    +
    + Compose + +
    +
    +

    Folders

    + +
    + +
    +
    + + +
    + +
    +
    +

    Labels

    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    +

    Inbox

    + +
    +
    + + +
    +
    + +
    + +
    +
    + + +
    + + + +
    + + +
    + 1-50/200 +
    + + +
    + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 5 mins ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 28 mins ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 11 hours ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 15 hours ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + Yesterday
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 2 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 2 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 2 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 2 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 2 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 4 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 12 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 12 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 14 days ago
    Alexander PierceAdminLTE 2.0 Issue - Trying to find a solution to this problem... + 15 days ago
    + +
    + +
    + + +
    + +
    + +
    + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/mailbox/read-mail.html b/public/bower_components/AdminLTE/pages/mailbox/read-mail.html new file mode 100644 index 0000000..6eaf277 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/mailbox/read-mail.html @@ -0,0 +1,815 @@ + + + + + + AdminLTE 2 | Read Mail + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Read Mail +

    + +
    + + +
    +
    +
    + Compose + +
    +
    +

    Folders

    + +
    + +
    +
    + + +
    + +
    +
    +

    Labels

    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    +

    Read Mail

    + +
    + + +
    +
    + +
    +
    +

    Message Subject Is Placed Here

    +
    From: help@example.com + 15 Feb. 2016 11:03 PM
    +
    + +
    +
    + + + +
    + + +
    + +
    +

    Hello John,

    + +

    Keffiyeh blog actually fashion axe vegan, irony biodiesel. Cold-pressed hoodie chillwave put a bird + on it aesthetic, bitters brunch meggings vegan iPhone. Dreamcatcher vegan scenester mlkshk. Ethical + master cleanse Bushwick, occupy Thundercats banjo cliche ennui farm-to-table mlkshk fanny pack + gluten-free. Marfa butcher vegan quinoa, bicycle rights disrupt tofu scenester chillwave 3 wolf moon + asymmetrical taxidermy pour-over. Quinoa tote bag fashion axe, Godard disrupt migas church-key tofu + blog locavore. Thundercats cronut polaroid Neutra tousled, meh food truck selfies narwhal American + Apparel.

    + +

    Raw denim McSweeney's bicycle rights, iPhone trust fund quinoa Neutra VHS kale chips vegan PBR&B + literally Thundercats +1. Forage tilde four dollar toast, banjo health goth paleo butcher. Four dollar + toast Brooklyn pour-over American Apparel sustainable, lumbersexual listicle gluten-free health goth + umami hoodie. Synth Echo Park bicycle rights DIY farm-to-table, retro kogi sriracha dreamcatcher PBR&B + flannel hashtag irony Wes Anderson. Lumbersexual Williamsburg Helvetica next level. Cold-pressed + slow-carb pop-up normcore Thundercats Portland, cardigan literally meditation lumbersexual crucifix. + Wayfarers raw denim paleo Bushwick, keytar Helvetica scenester keffiyeh 8-bit irony mumblecore + whatever viral Truffaut.

    + +

    Post-ironic shabby chic VHS, Marfa keytar flannel lomo try-hard keffiyeh cray. Actually fap fanny + pack yr artisan trust fund. High Life dreamcatcher church-key gentrify. Tumblr stumptown four dollar + toast vinyl, cold-pressed try-hard blog authentic keffiyeh Helvetica lo-fi tilde Intelligentsia. Lomo + locavore salvia bespoke, twee fixie paleo cliche brunch Schlitz blog McSweeney's messenger bag swag + slow-carb. Odd Future photo booth pork belly, you probably haven't heard of them actually tofu ennui + keffiyeh lo-fi Truffaut health goth. Narwhal sustainable retro disrupt.

    + +

    Skateboard artisan letterpress before they sold out High Life messenger bag. Bitters chambray + leggings listicle, drinking vinegar chillwave synth. Fanny pack hoodie American Apparel twee. American + Apparel PBR listicle, salvia aesthetic occupy sustainable Neutra kogi. Organic synth Tumblr viral + plaid, shabby chic single-origin coffee Etsy 3 wolf moon slow-carb Schlitz roof party tousled squid + vinyl. Readymade next level literally trust fund. Distillery master cleanse migas, Vice sriracha + flannel chambray chia cronut.

    + +

    Thanks,
    Jane

    +
    + +
    + + + + + +
    + +
    + +
    + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/tables/data.html b/public/bower_components/AdminLTE/pages/tables/data.html new file mode 100644 index 0000000..7cdb33c --- /dev/null +++ b/public/bower_components/AdminLTE/pages/tables/data.html @@ -0,0 +1,1638 @@ + + + + + + AdminLTE 2 | Data Tables + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Data Tables + advanced tables +

    + +
    + + +
    +
    +
    +
    +
    +

    Hover Data Table

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Rendering engineBrowserPlatform(s)Engine versionCSS grade
    TridentInternet + Explorer 4.0 + Win 95+ 4X
    TridentInternet + Explorer 5.0 + Win 95+5C
    TridentInternet + Explorer 5.5 + Win 95+5.5A
    TridentInternet + Explorer 6 + Win 98+6A
    TridentInternet Explorer 7Win XP SP2+7A
    TridentAOL browser (AOL desktop)Win XP6A
    GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
    GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
    GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
    GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
    GeckoCamino 1.0OSX.2+1.8A
    GeckoCamino 1.5OSX.3+1.8A
    GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
    GeckoNetscape Browser 8Win 98SE+1.7A
    GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
    GeckoMozilla 1.0Win 95+ / OSX.1+1A
    GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
    GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
    GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
    GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
    GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
    GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
    GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
    GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
    GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
    GeckoEpiphany 2.20Gnome1.8A
    WebkitSafari 1.2OSX.3125.5A
    WebkitSafari 1.3OSX.3312.8A
    WebkitSafari 2.0OSX.4+419.3A
    WebkitSafari 3.0OSX.4+522.1A
    WebkitOmniWeb 5.5OSX.4+420A
    WebkitiPod Touch / iPhoneiPod420.1A
    WebkitS60S60413A
    PrestoOpera 7.0Win 95+ / OSX.1+-A
    PrestoOpera 7.5Win 95+ / OSX.2+-A
    PrestoOpera 8.0Win 95+ / OSX.2+-A
    PrestoOpera 8.5Win 95+ / OSX.2+-A
    PrestoOpera 9.0Win 95+ / OSX.3+-A
    PrestoOpera 9.2Win 88+ / OSX.3+-A
    PrestoOpera 9.5Win 88+ / OSX.3+-A
    PrestoOpera for WiiWii-A
    PrestoNokia N800N800-A
    PrestoNintendo DS browserNintendo DS8.5C/A1
    KHTMLKonqureror 3.1KDE 3.13.1C
    KHTMLKonqureror 3.3KDE 3.33.3A
    KHTMLKonqureror 3.5KDE 3.53.5A
    TasmanInternet Explorer 4.5Mac OS 8-9-X
    TasmanInternet Explorer 5.1Mac OS 7.6-91C
    TasmanInternet Explorer 5.2Mac OS 8-X1C
    MiscNetFront 3.1Embedded devices-C
    MiscNetFront 3.4Embedded devices-A
    MiscDillo 0.8Embedded devices-X
    MiscLinksText only-X
    MiscLynxText only-X
    MiscIE MobileWindows Mobile 6-C
    MiscPSP browserPSP-C
    Other browsersAll others--U
    Rendering engineBrowserPlatform(s)Engine versionCSS grade
    +
    + +
    + + +
    +
    +

    Data Table With Full Features

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Rendering engineBrowserPlatform(s)Engine versionCSS grade
    TridentInternet + Explorer 4.0 + Win 95+ 4X
    TridentInternet + Explorer 5.0 + Win 95+5C
    TridentInternet + Explorer 5.5 + Win 95+5.5A
    TridentInternet + Explorer 6 + Win 98+6A
    TridentInternet Explorer 7Win XP SP2+7A
    TridentAOL browser (AOL desktop)Win XP6A
    GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
    GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
    GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
    GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
    GeckoCamino 1.0OSX.2+1.8A
    GeckoCamino 1.5OSX.3+1.8A
    GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
    GeckoNetscape Browser 8Win 98SE+1.7A
    GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
    GeckoMozilla 1.0Win 95+ / OSX.1+1A
    GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
    GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
    GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
    GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
    GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
    GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
    GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
    GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
    GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
    GeckoEpiphany 2.20Gnome1.8A
    WebkitSafari 1.2OSX.3125.5A
    WebkitSafari 1.3OSX.3312.8A
    WebkitSafari 2.0OSX.4+419.3A
    WebkitSafari 3.0OSX.4+522.1A
    WebkitOmniWeb 5.5OSX.4+420A
    WebkitiPod Touch / iPhoneiPod420.1A
    WebkitS60S60413A
    PrestoOpera 7.0Win 95+ / OSX.1+-A
    PrestoOpera 7.5Win 95+ / OSX.2+-A
    PrestoOpera 8.0Win 95+ / OSX.2+-A
    PrestoOpera 8.5Win 95+ / OSX.2+-A
    PrestoOpera 9.0Win 95+ / OSX.3+-A
    PrestoOpera 9.2Win 88+ / OSX.3+-A
    PrestoOpera 9.5Win 88+ / OSX.3+-A
    PrestoOpera for WiiWii-A
    PrestoNokia N800N800-A
    PrestoNintendo DS browserNintendo DS8.5C/A1
    KHTMLKonqureror 3.1KDE 3.13.1C
    KHTMLKonqureror 3.3KDE 3.33.3A
    KHTMLKonqureror 3.5KDE 3.53.5A
    TasmanInternet Explorer 4.5Mac OS 8-9-X
    TasmanInternet Explorer 5.1Mac OS 7.6-91C
    TasmanInternet Explorer 5.2Mac OS 8-X1C
    MiscNetFront 3.1Embedded devices-C
    MiscNetFront 3.4Embedded devices-A
    MiscDillo 0.8Embedded devices-X
    MiscLinksText only-X
    MiscLynxText only-X
    MiscIE MobileWindows Mobile 6-C
    MiscPSP browserPSP-C
    Other browsersAll others--U
    Rendering engineBrowserPlatform(s)Engine versionCSS grade
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/tables/simple.html b/public/bower_components/AdminLTE/pages/tables/simple.html new file mode 100644 index 0000000..60f6874 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/tables/simple.html @@ -0,0 +1,1056 @@ + + + + + + AdminLTE 2 | Simple Tables + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Simple Tables + preview of simple tables +

    + +
    + + +
    +
    +
    +
    +
    +

    Bordered Table

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TaskProgressLabel
    1.Update software +
    +
    +
    +
    55%
    2.Clean database +
    +
    +
    +
    70%
    3.Cron job running +
    +
    +
    +
    30%
    4.Fix and squish bugs +
    +
    +
    +
    90%
    +
    + + +
    + + +
    +
    +

    Condensed Full Width Table

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TaskProgressLabel
    1.Update software +
    +
    +
    +
    55%
    2.Clean database +
    +
    +
    +
    70%
    3.Cron job running +
    +
    +
    +
    30%
    4.Fix and squish bugs +
    +
    +
    +
    90%
    +
    + +
    + +
    + +
    +
    +
    +

    Simple Full Width Table

    + +
    + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TaskProgressLabel
    1.Update software +
    +
    +
    +
    55%
    2.Clean database +
    +
    +
    +
    70%
    3.Cron job running +
    +
    +
    +
    30%
    4.Fix and squish bugs +
    +
    +
    +
    90%
    +
    + +
    + + +
    +
    +

    Striped Full Width Table

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TaskProgressLabel
    1.Update software +
    +
    +
    +
    55%
    2.Clean database +
    +
    +
    +
    70%
    3.Cron job running +
    +
    +
    +
    30%
    4.Fix and squish bugs +
    +
    +
    +
    90%
    +
    + +
    + +
    + +
    + +
    +
    +
    +
    +

    Responsive Hover Table

    + +
    +
    + + +
    + +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    IDUserDateStatusReason
    183John Doe11-7-2014ApprovedBacon ipsum dolor sit amet salami venison chicken flank fatback doner.
    219Alexander Pierce11-7-2014PendingBacon ipsum dolor sit amet salami venison chicken flank fatback doner.
    657Bob Doe11-7-2014ApprovedBacon ipsum dolor sit amet salami venison chicken flank fatback doner.
    175Mike Doe11-7-2014DeniedBacon ipsum dolor sit amet salami venison chicken flank fatback doner.
    +
    + +
    + +
    +
    +
    + +
    + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/pages/widgets.html b/public/bower_components/AdminLTE/pages/widgets.html new file mode 100644 index 0000000..baf23a9 --- /dev/null +++ b/public/bower_components/AdminLTE/pages/widgets.html @@ -0,0 +1,1788 @@ + + + + + + AdminLTE 2 | Widgets + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + + + +
    + +
    +

    + Widgets + Preview page +

    + +
    + + +
    + +
    +
    +
    + + +
    + Messages + 1,410 +
    + +
    + +
    + +
    +
    + + +
    + Bookmarks + 410 +
    + +
    + +
    + +
    +
    + + +
    + Uploads + 13,648 +
    + +
    + +
    + +
    +
    + + +
    + Likes + 93,139 +
    + +
    + +
    + +
    + + + + +
    +
    +
    + + +
    + Bookmarks + 41,410 + +
    +
    +
    + + 70% Increase in 30 Days + +
    + +
    + +
    + +
    +
    + + +
    + Likes + 41,410 + +
    +
    +
    + + 70% Increase in 30 Days + +
    + +
    + +
    + +
    +
    + + +
    + Events + 41,410 + +
    +
    +
    + + 70% Increase in 30 Days + +
    + +
    + +
    + +
    +
    + + +
    + Comments + 41,410 + +
    +
    +
    + + 70% Increase in 30 Days + +
    + +
    + +
    + +
    + + + + + +
    +
    + +
    +
    +

    150

    + +

    New Orders

    +
    +
    + +
    + + More info + +
    +
    + +
    + +
    +
    +

    53%

    + +

    Bounce Rate

    +
    +
    + +
    + + More info + +
    +
    + +
    + +
    +
    +

    44

    + +

    User Registrations

    +
    +
    + +
    + + More info + +
    +
    + +
    + +
    +
    +

    65

    + +

    Unique Visitors

    +
    +
    + +
    + + More info + +
    +
    + +
    + + + + +
    +
    +
    +
    +

    Expandable

    + +
    + +
    + +
    + +
    + The body of the box +
    + +
    + +
    + +
    +
    +
    +

    Removable

    + +
    + +
    + +
    + +
    + The body of the box +
    + +
    + +
    + +
    +
    +
    +

    Collapsable

    + +
    + +
    + +
    + +
    + The body of the box +
    + +
    + +
    + +
    +
    +
    +

    Loading state

    +
    +
    + The body of the box +
    + + +
    + +
    + +
    + +
    + +
    + + + + +
    +
    +
    +
    +

    Expandable

    + +
    + +
    + +
    + +
    + The body of the box +
    + +
    + +
    + +
    +
    +
    +

    Removable

    + +
    + +
    + +
    + +
    + The body of the box +
    + +
    + +
    + +
    +
    +
    +

    Collapsable

    + +
    + +
    + +
    + +
    + The body of the box +
    + +
    + +
    + +
    +
    +
    +

    Loading state

    +
    +
    + The body of the box +
    + + +
    + +
    + +
    + +
    + +
    + + + + + +
    +
    + +
    +
    +

    Direct Chat

    + +
    + 3 + + + +
    +
    + +
    + +
    + +
    +
    + Alexander Pierce + 23 Jan 2:00 pm +
    + + Message User Image +
    + Is this template really for free? That's unbelievable! +
    + +
    + + + +
    +
    + Sarah Bullock + 23 Jan 2:05 pm +
    + + Message User Image +
    + You better believe it! +
    + +
    + +
    + + + + + +
    + + + +
    + +
    + + +
    + +
    +
    +

    Direct Chat

    + +
    + 3 + + + +
    +
    + +
    + +
    + +
    +
    + Alexander Pierce + 23 Jan 2:00 pm +
    + + Message User Image +
    + Is this template really for free? That's unbelievable! +
    + +
    + + + +
    +
    + Sarah Bullock + 23 Jan 2:05 pm +
    + + Message User Image +
    + You better believe it! +
    + +
    + +
    + + + + + +
    + + + +
    + +
    + + +
    + +
    +
    +

    Direct Chat

    + +
    + 3 + + + +
    +
    + +
    + +
    + +
    +
    + Alexander Pierce + 23 Jan 2:00 pm +
    + + Message User Image +
    + Is this template really for free? That's unbelievable! +
    + +
    + + + +
    +
    + Sarah Bullock + 23 Jan 2:05 pm +
    + + Message User Image +
    + You better believe it! +
    + +
    + +
    + + + + + +
    + + + +
    + +
    + + +
    + +
    +
    +

    Direct Chat

    + +
    + 3 + + + +
    +
    + +
    + +
    + +
    +
    + Alexander Pierce + 23 Jan 2:00 pm +
    + + Message User Image +
    + Is this template really for free? That's unbelievable! +
    + +
    + + + +
    +
    + Sarah Bullock + 23 Jan 2:05 pm +
    + + Message User Image +
    + You better believe it! +
    + +
    + +
    + + + + + +
    + + + +
    + +
    + +
    + + + + +
    +
    + +
    + +
    +
    + User Avatar +
    + +

    Nadia Carmichael

    +
    Lead Developer
    +
    + +
    + +
    + +
    + +
    + +
    +

    Alexander Pierce

    +
    Founder & CEO
    +
    +
    + User Avatar +
    + +
    + +
    + +
    + +
    + +
    +

    Elizabeth Pierce

    +
    Web Designer
    +
    +
    + User Avatar +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    +
    + User Image + Jonathan Burke Jr. + Shared publicly - 7:30 PM Today +
    + +
    + + + +
    + +
    + +
    + Photo + +

    I took this photo this morning. What do you guys think?

    + + + 127 likes - 3 comments +
    + + + + + +
    + +
    + +
    + +
    +
    +
    + User Image + Jonathan Burke Jr. + Shared publicly - 7:30 PM Today +
    + +
    + + + +
    + +
    + +
    + +

    Far far away, behind the word mountains, far from the + countries Vokalia and Consonantia, there live the blind + texts. Separated they live in Bookmarksgrove right at

    + +

    the coast of the Semantics, a large language ocean. + A small river named Duden flows by their place and supplies + it with the necessary regelialia. It is a paradisematic + country, in which roasted parts of sentences fly into + your mouth.

    + + +
    + Attachment Image + +
    +

    Lorem ipsum text generator

    + +
    + Description about the attachment can be placed here. + Lorem Ipsum is simply dummy text of the printing and typesetting industry... more +
    + +
    + +
    + + + + + + 45 likes - 2 comments +
    + + + + + +
    + +
    + +
    + + +
    + +
    + + +
    + + Copyright © 2014-2016 Almsaeed Studio. All rights + reserved. +
    + + + + + +
    +
    + + + + + + + + + + + + + + + + diff --git a/public/bower_components/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js b/public/bower_components/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js new file mode 100644 index 0000000..3a0e464 --- /dev/null +++ b/public/bower_components/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js @@ -0,0 +1,1576 @@ +/*! ========================================================= + * bootstrap-slider.js + * + * Maintainers: + * Kyle Kemp + * - Twitter: @seiyria + * - Github: seiyria + * Rohit Kalkur + * - Twitter: @Rovolutionary + * - Github: rovolution + * + * ========================================================= + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +/** + * Bridget makes jQuery widgets + * v1.0.1 + * MIT license + */ + +(function(root, factory) { + if(typeof define === "function" && define.amd) { + define(["jquery"], factory); + } + else if(typeof module === "object" && module.exports) { + var jQuery; + try { + jQuery = require("jquery"); + } + catch (err) { + jQuery = null; + } + module.exports = factory(jQuery); + } + else { + root.Slider = factory(root.jQuery); + } +}(this, function($) { + // Reference to Slider constructor + var Slider; + + + (function( $ ) { + + 'use strict'; + + // -------------------------- utils -------------------------- // + + var slice = Array.prototype.slice; + + function noop() {} + + // -------------------------- definition -------------------------- // + + function defineBridget( $ ) { + + // bail if no jQuery + if ( !$ ) { + return; + } + + // -------------------------- addOptionMethod -------------------------- // + + /** + * adds option method -> $().plugin('option', {...}) + * @param {Function} PluginClass - constructor class + */ + function addOptionMethod( PluginClass ) { + // don't overwrite original option method + if ( PluginClass.prototype.option ) { + return; + } + + // option setter + PluginClass.prototype.option = function( opts ) { + // bail out if not an object + if ( !$.isPlainObject( opts ) ){ + return; + } + this.options = $.extend( true, this.options, opts ); + }; + } + + + // -------------------------- plugin bridge -------------------------- // + + // helper function for logging errors + // $.error breaks jQuery chaining + var logError = typeof console === 'undefined' ? noop : + function( message ) { + console.error( message ); + }; + + /** + * jQuery plugin bridge, access methods like $elem.plugin('method') + * @param {String} namespace - plugin name + * @param {Function} PluginClass - constructor class + */ + function bridge( namespace, PluginClass ) { + // add to jQuery fn namespace + $.fn[ namespace ] = function( options ) { + if ( typeof options === 'string' ) { + // call plugin method when first argument is a string + // get arguments for method + var args = slice.call( arguments, 1 ); + + for ( var i=0, len = this.length; i < len; i++ ) { + var elem = this[i]; + var instance = $.data( elem, namespace ); + if ( !instance ) { + logError( "cannot call methods on " + namespace + " prior to initialization; " + + "attempted to call '" + options + "'" ); + continue; + } + if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) { + logError( "no such method '" + options + "' for " + namespace + " instance" ); + continue; + } + + // trigger method with arguments + var returnValue = instance[ options ].apply( instance, args); + + // break look and return first value if provided + if ( returnValue !== undefined && returnValue !== instance) { + return returnValue; + } + } + // return this if no return value + return this; + } else { + var objects = this.map( function() { + var instance = $.data( this, namespace ); + if ( instance ) { + // apply options & init + instance.option( options ); + instance._init(); + } else { + // initialize new instance + instance = new PluginClass( this, options ); + $.data( this, namespace, instance ); + } + return $(this); + }); + + if(!objects || objects.length > 1) { + return objects; + } else { + return objects[0]; + } + } + }; + + } + + // -------------------------- bridget -------------------------- // + + /** + * converts a Prototypical class into a proper jQuery plugin + * the class must have a ._init method + * @param {String} namespace - plugin name, used in $().pluginName + * @param {Function} PluginClass - constructor class + */ + $.bridget = function( namespace, PluginClass ) { + addOptionMethod( PluginClass ); + bridge( namespace, PluginClass ); + }; + + return $.bridget; + + } + + // get jquery from browser global + defineBridget( $ ); + + })( $ ); + + + /************************************************* + + BOOTSTRAP-SLIDER SOURCE CODE + + **************************************************/ + + (function($) { + + var ErrorMsgs = { + formatInvalidInputErrorMsg : function(input) { + return "Invalid input value '" + input + "' passed in"; + }, + callingContextNotSliderInstance : "Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method" + }; + + var SliderScale = { + linear: { + toValue: function(percentage) { + var rawValue = percentage/100 * (this.options.max - this.options.min); + if (this.options.ticks_positions.length > 0) { + var minv, maxv, minp, maxp = 0; + for (var i = 0; i < this.options.ticks_positions.length; i++) { + if (percentage <= this.options.ticks_positions[i]) { + minv = (i > 0) ? this.options.ticks[i-1] : 0; + minp = (i > 0) ? this.options.ticks_positions[i-1] : 0; + maxv = this.options.ticks[i]; + maxp = this.options.ticks_positions[i]; + + break; + } + } + if (i > 0) { + var partialPercentage = (percentage - minp) / (maxp - minp); + rawValue = minv + partialPercentage * (maxv - minv); + } + } + + var value = this.options.min + Math.round(rawValue / this.options.step) * this.options.step; + if (value < this.options.min) { + return this.options.min; + } else if (value > this.options.max) { + return this.options.max; + } else { + return value; + } + }, + toPercentage: function(value) { + if (this.options.max === this.options.min) { + return 0; + } + + if (this.options.ticks_positions.length > 0) { + var minv, maxv, minp, maxp = 0; + for (var i = 0; i < this.options.ticks.length; i++) { + if (value <= this.options.ticks[i]) { + minv = (i > 0) ? this.options.ticks[i-1] : 0; + minp = (i > 0) ? this.options.ticks_positions[i-1] : 0; + maxv = this.options.ticks[i]; + maxp = this.options.ticks_positions[i]; + + break; + } + } + if (i > 0) { + var partialPercentage = (value - minv) / (maxv - minv); + return minp + partialPercentage * (maxp - minp); + } + } + + return 100 * (value - this.options.min) / (this.options.max - this.options.min); + } + }, + + logarithmic: { + /* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */ + toValue: function(percentage) { + var min = (this.options.min === 0) ? 0 : Math.log(this.options.min); + var max = Math.log(this.options.max); + var value = Math.exp(min + (max - min) * percentage / 100); + value = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step; + /* Rounding to the nearest step could exceed the min or + * max, so clip to those values. */ + if (value < this.options.min) { + return this.options.min; + } else if (value > this.options.max) { + return this.options.max; + } else { + return value; + } + }, + toPercentage: function(value) { + if (this.options.max === this.options.min) { + return 0; + } else { + var max = Math.log(this.options.max); + var min = this.options.min === 0 ? 0 : Math.log(this.options.min); + var v = value === 0 ? 0 : Math.log(value); + return 100 * (v - min) / (max - min); + } + } + } + }; + + + /************************************************* + + CONSTRUCTOR + + **************************************************/ + Slider = function(element, options) { + createNewSlider.call(this, element, options); + return this; + }; + + function createNewSlider(element, options) { + + /* + The internal state object is used to store data about the current 'state' of slider. + + This includes values such as the `value`, `enabled`, etc... + */ + this._state = { + value: null, + enabled: null, + offset: null, + size: null, + percentage: null, + inDrag: false, + over: false + }; + + + if(typeof element === "string") { + this.element = document.querySelector(element); + } else if(element instanceof HTMLElement) { + this.element = element; + } + + /************************************************* + + Process Options + + **************************************************/ + options = options ? options : {}; + var optionTypes = Object.keys(this.defaultOptions); + + for(var i = 0; i < optionTypes.length; i++) { + var optName = optionTypes[i]; + + // First check if an option was passed in via the constructor + var val = options[optName]; + // If no data attrib, then check data atrributes + val = (typeof val !== 'undefined') ? val : getDataAttrib(this.element, optName); + // Finally, if nothing was specified, use the defaults + val = (val !== null) ? val : this.defaultOptions[optName]; + + // Set all options on the instance of the Slider + if(!this.options) { + this.options = {}; + } + this.options[optName] = val; + } + + /* + Validate `tooltip_position` against 'orientation` + - if `tooltip_position` is incompatible with orientation, swith it to a default compatible with specified `orientation` + -- default for "vertical" -> "right" + -- default for "horizontal" -> "left" + */ + if(this.options.orientation === "vertical" && (this.options.tooltip_position === "top" || this.options.tooltip_position === "bottom")) { + + this.options.tooltip_position = "right"; + + } + else if(this.options.orientation === "horizontal" && (this.options.tooltip_position === "left" || this.options.tooltip_position === "right")) { + + this.options.tooltip_position = "top"; + + } + + function getDataAttrib(element, optName) { + var dataName = "data-slider-" + optName.replace(/_/g, '-'); + var dataValString = element.getAttribute(dataName); + + try { + return JSON.parse(dataValString); + } + catch(err) { + return dataValString; + } + } + + /************************************************* + + Create Markup + + **************************************************/ + + var origWidth = this.element.style.width; + var updateSlider = false; + var parent = this.element.parentNode; + var sliderTrackSelection; + var sliderTrackLow, sliderTrackHigh; + var sliderMinHandle; + var sliderMaxHandle; + + if (this.sliderElem) { + updateSlider = true; + } else { + /* Create elements needed for slider */ + this.sliderElem = document.createElement("div"); + this.sliderElem.className = "slider"; + + /* Create slider track elements */ + var sliderTrack = document.createElement("div"); + sliderTrack.className = "slider-track"; + + sliderTrackLow = document.createElement("div"); + sliderTrackLow.className = "slider-track-low"; + + sliderTrackSelection = document.createElement("div"); + sliderTrackSelection.className = "slider-selection"; + + sliderTrackHigh = document.createElement("div"); + sliderTrackHigh.className = "slider-track-high"; + + sliderMinHandle = document.createElement("div"); + sliderMinHandle.className = "slider-handle min-slider-handle"; + sliderMinHandle.setAttribute('role', 'slider'); + sliderMinHandle.setAttribute('aria-valuemin', this.options.min); + sliderMinHandle.setAttribute('aria-valuemax', this.options.max); + + sliderMaxHandle = document.createElement("div"); + sliderMaxHandle.className = "slider-handle max-slider-handle"; + sliderMaxHandle.setAttribute('role', 'slider'); + sliderMaxHandle.setAttribute('aria-valuemin', this.options.min); + sliderMaxHandle.setAttribute('aria-valuemax', this.options.max); + + sliderTrack.appendChild(sliderTrackLow); + sliderTrack.appendChild(sliderTrackSelection); + sliderTrack.appendChild(sliderTrackHigh); + + /* Add aria-labelledby to handle's */ + var isLabelledbyArray = Array.isArray(this.options.labelledby); + if (isLabelledbyArray && this.options.labelledby[0]) { + sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]); + } + if (isLabelledbyArray && this.options.labelledby[1]) { + sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]); + } + if (!isLabelledbyArray && this.options.labelledby) { + sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby); + sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby); + } + + /* Create ticks */ + this.ticks = []; + if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) { + for (i = 0; i < this.options.ticks.length; i++) { + var tick = document.createElement('div'); + tick.className = 'slider-tick'; + + this.ticks.push(tick); + sliderTrack.appendChild(tick); + } + + sliderTrackSelection.className += " tick-slider-selection"; + } + + sliderTrack.appendChild(sliderMinHandle); + sliderTrack.appendChild(sliderMaxHandle); + + this.tickLabels = []; + if (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) { + this.tickLabelContainer = document.createElement('div'); + this.tickLabelContainer.className = 'slider-tick-label-container'; + + for (i = 0; i < this.options.ticks_labels.length; i++) { + var label = document.createElement('div'); + var noTickPositionsSpecified = this.options.ticks_positions.length === 0; + var tickLabelsIndex = (this.options.reversed && noTickPositionsSpecified) ? (this.options.ticks_labels.length - (i + 1)) : i; + label.className = 'slider-tick-label'; + label.innerHTML = this.options.ticks_labels[tickLabelsIndex]; + + this.tickLabels.push(label); + this.tickLabelContainer.appendChild(label); + } + } + + + var createAndAppendTooltipSubElements = function(tooltipElem) { + var arrow = document.createElement("div"); + arrow.className = "tooltip-arrow"; + + var inner = document.createElement("div"); + inner.className = "tooltip-inner"; + + tooltipElem.appendChild(arrow); + tooltipElem.appendChild(inner); + + }; + + /* Create tooltip elements */ + var sliderTooltip = document.createElement("div"); + sliderTooltip.className = "tooltip tooltip-main"; + sliderTooltip.setAttribute('role', 'presentation'); + createAndAppendTooltipSubElements(sliderTooltip); + + var sliderTooltipMin = document.createElement("div"); + sliderTooltipMin.className = "tooltip tooltip-min"; + sliderTooltipMin.setAttribute('role', 'presentation'); + createAndAppendTooltipSubElements(sliderTooltipMin); + + var sliderTooltipMax = document.createElement("div"); + sliderTooltipMax.className = "tooltip tooltip-max"; + sliderTooltipMax.setAttribute('role', 'presentation'); + createAndAppendTooltipSubElements(sliderTooltipMax); + + + /* Append components to sliderElem */ + this.sliderElem.appendChild(sliderTrack); + this.sliderElem.appendChild(sliderTooltip); + this.sliderElem.appendChild(sliderTooltipMin); + this.sliderElem.appendChild(sliderTooltipMax); + + if (this.tickLabelContainer) { + this.sliderElem.appendChild(this.tickLabelContainer); + } + + /* Append slider element to parent container, right before the original element */ + parent.insertBefore(this.sliderElem, this.element); + + /* Hide original element */ + this.element.style.display = "none"; + } + /* If JQuery exists, cache JQ references */ + if($) { + this.$element = $(this.element); + this.$sliderElem = $(this.sliderElem); + } + + /************************************************* + + Setup + + **************************************************/ + this.eventToCallbackMap = {}; + this.sliderElem.id = this.options.id; + + this.touchCapable = 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch); + + this.tooltip = this.sliderElem.querySelector('.tooltip-main'); + this.tooltipInner = this.tooltip.querySelector('.tooltip-inner'); + + this.tooltip_min = this.sliderElem.querySelector('.tooltip-min'); + this.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner'); + + this.tooltip_max = this.sliderElem.querySelector('.tooltip-max'); + this.tooltipInner_max= this.tooltip_max.querySelector('.tooltip-inner'); + + if (SliderScale[this.options.scale]) { + this.options.scale = SliderScale[this.options.scale]; + } + + if (updateSlider === true) { + // Reset classes + this._removeClass(this.sliderElem, 'slider-horizontal'); + this._removeClass(this.sliderElem, 'slider-vertical'); + this._removeClass(this.tooltip, 'hide'); + this._removeClass(this.tooltip_min, 'hide'); + this._removeClass(this.tooltip_max, 'hide'); + + // Undo existing inline styles for track + ["left", "top", "width", "height"].forEach(function(prop) { + this._removeProperty(this.trackLow, prop); + this._removeProperty(this.trackSelection, prop); + this._removeProperty(this.trackHigh, prop); + }, this); + + // Undo inline styles on handles + [this.handle1, this.handle2].forEach(function(handle) { + this._removeProperty(handle, 'left'); + this._removeProperty(handle, 'top'); + }, this); + + // Undo inline styles and classes on tooltips + [this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function(tooltip) { + this._removeProperty(tooltip, 'left'); + this._removeProperty(tooltip, 'top'); + this._removeProperty(tooltip, 'margin-left'); + this._removeProperty(tooltip, 'margin-top'); + + this._removeClass(tooltip, 'right'); + this._removeClass(tooltip, 'top'); + }, this); + } + + if(this.options.orientation === 'vertical') { + this._addClass(this.sliderElem,'slider-vertical'); + this.stylePos = 'top'; + this.mousePos = 'pageY'; + this.sizePos = 'offsetHeight'; + } else { + this._addClass(this.sliderElem, 'slider-horizontal'); + this.sliderElem.style.width = origWidth; + this.options.orientation = 'horizontal'; + this.stylePos = 'left'; + this.mousePos = 'pageX'; + this.sizePos = 'offsetWidth'; + + } + this._setTooltipPosition(); + /* In case ticks are specified, overwrite the min and max bounds */ + if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) { + this.options.max = Math.max.apply(Math, this.options.ticks); + this.options.min = Math.min.apply(Math, this.options.ticks); + } + + if (Array.isArray(this.options.value)) { + this.options.range = true; + this._state.value = this.options.value; + } + else if (this.options.range) { + // User wants a range, but value is not an array + this._state.value = [this.options.value, this.options.max]; + } + else { + this._state.value = this.options.value; + } + + this.trackLow = sliderTrackLow || this.trackLow; + this.trackSelection = sliderTrackSelection || this.trackSelection; + this.trackHigh = sliderTrackHigh || this.trackHigh; + + if (this.options.selection === 'none') { + this._addClass(this.trackLow, 'hide'); + this._addClass(this.trackSelection, 'hide'); + this._addClass(this.trackHigh, 'hide'); + } + + this.handle1 = sliderMinHandle || this.handle1; + this.handle2 = sliderMaxHandle || this.handle2; + + if (updateSlider === true) { + // Reset classes + this._removeClass(this.handle1, 'round triangle'); + this._removeClass(this.handle2, 'round triangle hide'); + + for (i = 0; i < this.ticks.length; i++) { + this._removeClass(this.ticks[i], 'round triangle hide'); + } + } + + var availableHandleModifiers = ['round', 'triangle', 'custom']; + var isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1; + if (isValidHandleType) { + this._addClass(this.handle1, this.options.handle); + this._addClass(this.handle2, this.options.handle); + + for (i = 0; i < this.ticks.length; i++) { + this._addClass(this.ticks[i], this.options.handle); + } + } + + this._state.offset = this._offset(this.sliderElem); + this._state.size = this.sliderElem[this.sizePos]; + this.setValue(this._state.value); + + /****************************************** + + Bind Event Listeners + + ******************************************/ + + // Bind keyboard handlers + this.handle1Keydown = this._keydown.bind(this, 0); + this.handle1.addEventListener("keydown", this.handle1Keydown, false); + + this.handle2Keydown = this._keydown.bind(this, 1); + this.handle2.addEventListener("keydown", this.handle2Keydown, false); + + this.mousedown = this._mousedown.bind(this); + if (this.touchCapable) { + // Bind touch handlers + this.sliderElem.addEventListener("touchstart", this.mousedown, false); + } + this.sliderElem.addEventListener("mousedown", this.mousedown, false); + + + // Bind tooltip-related handlers + if(this.options.tooltip === 'hide') { + this._addClass(this.tooltip, 'hide'); + this._addClass(this.tooltip_min, 'hide'); + this._addClass(this.tooltip_max, 'hide'); + } + else if(this.options.tooltip === 'always') { + this._showTooltip(); + this._alwaysShowTooltip = true; + } + else { + this.showTooltip = this._showTooltip.bind(this); + this.hideTooltip = this._hideTooltip.bind(this); + + this.sliderElem.addEventListener("mouseenter", this.showTooltip, false); + this.sliderElem.addEventListener("mouseleave", this.hideTooltip, false); + + this.handle1.addEventListener("focus", this.showTooltip, false); + this.handle1.addEventListener("blur", this.hideTooltip, false); + + this.handle2.addEventListener("focus", this.showTooltip, false); + this.handle2.addEventListener("blur", this.hideTooltip, false); + } + + if(this.options.enabled) { + this.enable(); + } else { + this.disable(); + } + } + + + + /************************************************* + + INSTANCE PROPERTIES/METHODS + + - Any methods bound to the prototype are considered + part of the plugin's `public` interface + + **************************************************/ + Slider.prototype = { + _init: function() {}, // NOTE: Must exist to support bridget + + constructor: Slider, + + defaultOptions: { + id: "", + min: 0, + max: 10, + step: 1, + precision: 0, + orientation: 'horizontal', + value: 5, + range: false, + selection: 'before', + tooltip: 'show', + tooltip_split: false, + handle: 'round', + reversed: false, + enabled: true, + formatter: function(val) { + if (Array.isArray(val)) { + return val[0] + " : " + val[1]; + } else { + return val; + } + }, + natural_arrow_keys: false, + ticks: [], + ticks_positions: [], + ticks_labels: [], + ticks_snap_bounds: 0, + scale: 'linear', + focus: false, + tooltip_position: null, + labelledby: null + }, + + getElement: function() { + return this.sliderElem; + }, + + getValue: function() { + if (this.options.range) { + return this._state.value; + } + else { + return this._state.value[0]; + } + }, + + setValue: function(val, triggerSlideEvent, triggerChangeEvent) { + if (!val) { + val = 0; + } + var oldValue = this.getValue(); + this._state.value = this._validateInputValue(val); + var applyPrecision = this._applyPrecision.bind(this); + + if (this.options.range) { + this._state.value[0] = applyPrecision(this._state.value[0]); + this._state.value[1] = applyPrecision(this._state.value[1]); + + this._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0])); + this._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1])); + } + else { + this._state.value = applyPrecision(this._state.value); + this._state.value = [ Math.max(this.options.min, Math.min(this.options.max, this._state.value))]; + this._addClass(this.handle2, 'hide'); + if (this.options.selection === 'after') { + this._state.value[1] = this.options.max; + } else { + this._state.value[1] = this.options.min; + } + } + + if (this.options.max > this.options.min) { + this._state.percentage = [ + this._toPercentage(this._state.value[0]), + this._toPercentage(this._state.value[1]), + this.options.step * 100 / (this.options.max - this.options.min) + ]; + } else { + this._state.percentage = [0, 0, 100]; + } + + this._layout(); + var newValue = this.options.range ? this._state.value : this._state.value[0]; + + if(triggerSlideEvent === true) { + this._trigger('slide', newValue); + } + if( (oldValue !== newValue) && (triggerChangeEvent === true) ) { + this._trigger('change', { + oldValue: oldValue, + newValue: newValue + }); + } + this._setDataVal(newValue); + + return this; + }, + + destroy: function(){ + // Remove event handlers on slider elements + this._removeSliderEventHandlers(); + + // Remove the slider from the DOM + this.sliderElem.parentNode.removeChild(this.sliderElem); + /* Show original element */ + this.element.style.display = ""; + + // Clear out custom event bindings + this._cleanUpEventCallbacksMap(); + + // Remove data values + this.element.removeAttribute("data"); + + // Remove JQuery handlers/data + if($) { + this._unbindJQueryEventHandlers(); + this.$element.removeData('slider'); + } + }, + + disable: function() { + this._state.enabled = false; + this.handle1.removeAttribute("tabindex"); + this.handle2.removeAttribute("tabindex"); + this._addClass(this.sliderElem, 'slider-disabled'); + this._trigger('slideDisabled'); + + return this; + }, + + enable: function() { + this._state.enabled = true; + this.handle1.setAttribute("tabindex", 0); + this.handle2.setAttribute("tabindex", 0); + this._removeClass(this.sliderElem, 'slider-disabled'); + this._trigger('slideEnabled'); + + return this; + }, + + toggle: function() { + if(this._state.enabled) { + this.disable(); + } else { + this.enable(); + } + return this; + }, + + isEnabled: function() { + return this._state.enabled; + }, + + on: function(evt, callback) { + this._bindNonQueryEventHandler(evt, callback); + return this; + }, + + off: function(evt, callback) { + if($) { + this.$element.off(evt, callback); + this.$sliderElem.off(evt, callback); + } else { + this._unbindNonQueryEventHandler(evt, callback); + } + }, + + getAttribute: function(attribute) { + if(attribute) { + return this.options[attribute]; + } else { + return this.options; + } + }, + + setAttribute: function(attribute, value) { + this.options[attribute] = value; + return this; + }, + + refresh: function() { + this._removeSliderEventHandlers(); + createNewSlider.call(this, this.element, this.options); + if($) { + // Bind new instance of slider to the element + $.data(this.element, 'slider', this); + } + return this; + }, + + relayout: function() { + this._layout(); + return this; + }, + + /******************************+ + + HELPERS + + - Any method that is not part of the public interface. + - Place it underneath this comment block and write its signature like so: + + _fnName : function() {...} + + ********************************/ + _removeSliderEventHandlers: function() { + // Remove keydown event listeners + this.handle1.removeEventListener("keydown", this.handle1Keydown, false); + this.handle2.removeEventListener("keydown", this.handle2Keydown, false); + + if (this.showTooltip) { + this.handle1.removeEventListener("focus", this.showTooltip, false); + this.handle2.removeEventListener("focus", this.showTooltip, false); + } + if (this.hideTooltip) { + this.handle1.removeEventListener("blur", this.hideTooltip, false); + this.handle2.removeEventListener("blur", this.hideTooltip, false); + } + + // Remove event listeners from sliderElem + if (this.showTooltip) { + this.sliderElem.removeEventListener("mouseenter", this.showTooltip, false); + } + if (this.hideTooltip) { + this.sliderElem.removeEventListener("mouseleave", this.hideTooltip, false); + } + this.sliderElem.removeEventListener("touchstart", this.mousedown, false); + this.sliderElem.removeEventListener("mousedown", this.mousedown, false); + }, + _bindNonQueryEventHandler: function(evt, callback) { + if(this.eventToCallbackMap[evt] === undefined) { + this.eventToCallbackMap[evt] = []; + } + this.eventToCallbackMap[evt].push(callback); + }, + _unbindNonQueryEventHandler: function(evt, callback) { + var callbacks = this.eventToCallbackMap[evt]; + if(callbacks !== undefined) { + for (var i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + callbacks.splice(i, 1); + break; + } + } + } + }, + _cleanUpEventCallbacksMap: function() { + var eventNames = Object.keys(this.eventToCallbackMap); + for(var i = 0; i < eventNames.length; i++) { + var eventName = eventNames[i]; + this.eventToCallbackMap[eventName] = null; + } + }, + _showTooltip: function() { + if (this.options.tooltip_split === false ){ + this._addClass(this.tooltip, 'in'); + this.tooltip_min.style.display = 'none'; + this.tooltip_max.style.display = 'none'; + } else { + this._addClass(this.tooltip_min, 'in'); + this._addClass(this.tooltip_max, 'in'); + this.tooltip.style.display = 'none'; + } + this._state.over = true; + }, + _hideTooltip: function() { + if (this._state.inDrag === false && this.alwaysShowTooltip !== true) { + this._removeClass(this.tooltip, 'in'); + this._removeClass(this.tooltip_min, 'in'); + this._removeClass(this.tooltip_max, 'in'); + } + this._state.over = false; + }, + _layout: function() { + var positionPercentages; + + if(this.options.reversed) { + positionPercentages = [ 100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]]; + } + else { + positionPercentages = [ this._state.percentage[0], this._state.percentage[1] ]; + } + + this.handle1.style[this.stylePos] = positionPercentages[0]+'%'; + this.handle1.setAttribute('aria-valuenow', this._state.value[0]); + + this.handle2.style[this.stylePos] = positionPercentages[1]+'%'; + this.handle2.setAttribute('aria-valuenow', this._state.value[1]); + + /* Position ticks and labels */ + if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) { + + var styleSize = this.options.orientation === 'vertical' ? 'height' : 'width'; + var styleMargin = this.options.orientation === 'vertical' ? 'marginTop' : 'marginLeft'; + var labelSize = this._state.size / (this.options.ticks.length - 1); + + if (this.tickLabelContainer) { + var extraMargin = 0; + if (this.options.ticks_positions.length === 0) { + if (this.options.orientation !== 'vertical') { + this.tickLabelContainer.style[styleMargin] = -labelSize/2 + 'px'; + } + + extraMargin = this.tickLabelContainer.offsetHeight; + } else { + /* Chidren are position absolute, calculate height by finding the max offsetHeight of a child */ + for (i = 0 ; i < this.tickLabelContainer.childNodes.length; i++) { + if (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) { + extraMargin = this.tickLabelContainer.childNodes[i].offsetHeight; + } + } + } + if (this.options.orientation === 'horizontal') { + this.sliderElem.style.marginBottom = extraMargin + 'px'; + } + } + for (var i = 0; i < this.options.ticks.length; i++) { + + var percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]); + + if (this.options.reversed) { + percentage = 100 - percentage; + } + + this.ticks[i].style[this.stylePos] = percentage + '%'; + + /* Set class labels to denote whether ticks are in the selection */ + this._removeClass(this.ticks[i], 'in-selection'); + if (!this.options.range) { + if (this.options.selection === 'after' && percentage >= positionPercentages[0]){ + this._addClass(this.ticks[i], 'in-selection'); + } else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) { + this._addClass(this.ticks[i], 'in-selection'); + } + } else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) { + this._addClass(this.ticks[i], 'in-selection'); + } + + if (this.tickLabels[i]) { + this.tickLabels[i].style[styleSize] = labelSize + 'px'; + + if (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) { + this.tickLabels[i].style.position = 'absolute'; + this.tickLabels[i].style[this.stylePos] = percentage + '%'; + this.tickLabels[i].style[styleMargin] = -labelSize/2 + 'px'; + } else if (this.options.orientation === 'vertical') { + this.tickLabels[i].style['marginLeft'] = this.sliderElem.offsetWidth + 'px'; + this.tickLabelContainer.style['marginTop'] = this.sliderElem.offsetWidth / 2 * -1 + 'px'; + } + } + } + } + + var formattedTooltipVal; + + if (this.options.range) { + formattedTooltipVal = this.options.formatter(this._state.value); + this._setText(this.tooltipInner, formattedTooltipVal); + this.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0])/2 + '%'; + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px'); + } + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px'); + } + + var innerTooltipMinText = this.options.formatter(this._state.value[0]); + this._setText(this.tooltipInner_min, innerTooltipMinText); + + var innerTooltipMaxText = this.options.formatter(this._state.value[1]); + this._setText(this.tooltipInner_max, innerTooltipMaxText); + + this.tooltip_min.style[this.stylePos] = positionPercentages[0] + '%'; + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip_min, 'margin-top', -this.tooltip_min.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip_min, 'margin-left', -this.tooltip_min.offsetWidth / 2 + 'px'); + } + + this.tooltip_max.style[this.stylePos] = positionPercentages[1] + '%'; + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip_max, 'margin-top', -this.tooltip_max.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip_max, 'margin-left', -this.tooltip_max.offsetWidth / 2 + 'px'); + } + } else { + formattedTooltipVal = this.options.formatter(this._state.value[0]); + this._setText(this.tooltipInner, formattedTooltipVal); + + this.tooltip.style[this.stylePos] = positionPercentages[0] + '%'; + if (this.options.orientation === 'vertical') { + this._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px'); + } + } + + if (this.options.orientation === 'vertical') { + this.trackLow.style.top = '0'; + this.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) +'%'; + + this.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) +'%'; + this.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%'; + + this.trackHigh.style.bottom = '0'; + this.trackHigh.style.height = (100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1])) +'%'; + } + else { + this.trackLow.style.left = '0'; + this.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) +'%'; + + this.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) +'%'; + this.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%'; + + this.trackHigh.style.right = '0'; + this.trackHigh.style.width = (100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1])) +'%'; + + var offset_min = this.tooltip_min.getBoundingClientRect(); + var offset_max = this.tooltip_max.getBoundingClientRect(); + + if (offset_min.right > offset_max.left) { + this._removeClass(this.tooltip_max, 'top'); + this._addClass(this.tooltip_max, 'bottom'); + this.tooltip_max.style.top = 18 + 'px'; + } else { + this._removeClass(this.tooltip_max, 'bottom'); + this._addClass(this.tooltip_max, 'top'); + this.tooltip_max.style.top = this.tooltip_min.style.top; + } + } + }, + _removeProperty: function(element, prop) { + if (element.style.removeProperty) { + element.style.removeProperty(prop); + } else { + element.style.removeAttribute(prop); + } + }, + _mousedown: function(ev) { + if(!this._state.enabled) { + return false; + } + + this._state.offset = this._offset(this.sliderElem); + this._state.size = this.sliderElem[this.sizePos]; + + var percentage = this._getPercentage(ev); + + if (this.options.range) { + var diff1 = Math.abs(this._state.percentage[0] - percentage); + var diff2 = Math.abs(this._state.percentage[1] - percentage); + this._state.dragged = (diff1 < diff2) ? 0 : 1; + } else { + this._state.dragged = 0; + } + + this._state.percentage[this._state.dragged] = percentage; + this._layout(); + + if (this.touchCapable) { + document.removeEventListener("touchmove", this.mousemove, false); + document.removeEventListener("touchend", this.mouseup, false); + } + + if(this.mousemove){ + document.removeEventListener("mousemove", this.mousemove, false); + } + if(this.mouseup){ + document.removeEventListener("mouseup", this.mouseup, false); + } + + this.mousemove = this._mousemove.bind(this); + this.mouseup = this._mouseup.bind(this); + + if (this.touchCapable) { + // Touch: Bind touch events: + document.addEventListener("touchmove", this.mousemove, false); + document.addEventListener("touchend", this.mouseup, false); + } + // Bind mouse events: + document.addEventListener("mousemove", this.mousemove, false); + document.addEventListener("mouseup", this.mouseup, false); + + this._state.inDrag = true; + var newValue = this._calculateValue(); + + this._trigger('slideStart', newValue); + + this._setDataVal(newValue); + this.setValue(newValue, false, true); + + this._pauseEvent(ev); + + if (this.options.focus) { + this._triggerFocusOnHandle(this._state.dragged); + } + + return true; + }, + _triggerFocusOnHandle: function(handleIdx) { + if(handleIdx === 0) { + this.handle1.focus(); + } + if(handleIdx === 1) { + this.handle2.focus(); + } + }, + _keydown: function(handleIdx, ev) { + if(!this._state.enabled) { + return false; + } + + var dir; + switch (ev.keyCode) { + case 37: // left + case 40: // down + dir = -1; + break; + case 39: // right + case 38: // up + dir = 1; + break; + } + if (!dir) { + return; + } + + // use natural arrow keys instead of from min to max + if (this.options.natural_arrow_keys) { + var ifVerticalAndNotReversed = (this.options.orientation === 'vertical' && !this.options.reversed); + var ifHorizontalAndReversed = (this.options.orientation === 'horizontal' && this.options.reversed); + + if (ifVerticalAndNotReversed || ifHorizontalAndReversed) { + dir = -dir; + } + } + + var val = this._state.value[handleIdx] + dir * this.options.step; + if (this.options.range) { + val = [ (!handleIdx) ? val : this._state.value[0], + ( handleIdx) ? val : this._state.value[1]]; + } + + this._trigger('slideStart', val); + this._setDataVal(val); + this.setValue(val, true, true); + + this._setDataVal(val); + this._trigger('slideStop', val); + this._layout(); + + this._pauseEvent(ev); + + return false; + }, + _pauseEvent: function(ev) { + if(ev.stopPropagation) { + ev.stopPropagation(); + } + if(ev.preventDefault) { + ev.preventDefault(); + } + ev.cancelBubble=true; + ev.returnValue=false; + }, + _mousemove: function(ev) { + if(!this._state.enabled) { + return false; + } + + var percentage = this._getPercentage(ev); + this._adjustPercentageForRangeSliders(percentage); + this._state.percentage[this._state.dragged] = percentage; + this._layout(); + + var val = this._calculateValue(true); + this.setValue(val, true, true); + + return false; + }, + _adjustPercentageForRangeSliders: function(percentage) { + if (this.options.range) { + var precision = this._getNumDigitsAfterDecimalPlace(percentage); + precision = precision ? precision - 1 : 0; + var percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision); + if (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) { + this._state.percentage[0] = this._state.percentage[1]; + this._state.dragged = 1; + } else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) { + this._state.percentage[1] = this._state.percentage[0]; + this._state.dragged = 0; + } + } + }, + _mouseup: function() { + if(!this._state.enabled) { + return false; + } + if (this.touchCapable) { + // Touch: Unbind touch event handlers: + document.removeEventListener("touchmove", this.mousemove, false); + document.removeEventListener("touchend", this.mouseup, false); + } + // Unbind mouse event handlers: + document.removeEventListener("mousemove", this.mousemove, false); + document.removeEventListener("mouseup", this.mouseup, false); + + this._state.inDrag = false; + if (this._state.over === false) { + this._hideTooltip(); + } + var val = this._calculateValue(true); + + this._layout(); + this._setDataVal(val); + this._trigger('slideStop', val); + + return false; + }, + _calculateValue: function(snapToClosestTick) { + var val; + if (this.options.range) { + val = [this.options.min,this.options.max]; + if (this._state.percentage[0] !== 0){ + val[0] = this._toValue(this._state.percentage[0]); + val[0] = this._applyPrecision(val[0]); + } + if (this._state.percentage[1] !== 100){ + val[1] = this._toValue(this._state.percentage[1]); + val[1] = this._applyPrecision(val[1]); + } + } else { + val = this._toValue(this._state.percentage[0]); + val = parseFloat(val); + val = this._applyPrecision(val); + } + + if (snapToClosestTick) { + var min = [val, Infinity]; + for (var i = 0; i < this.options.ticks.length; i++) { + var diff = Math.abs(this.options.ticks[i] - val); + if (diff <= min[1]) { + min = [this.options.ticks[i], diff]; + } + } + if (min[1] <= this.options.ticks_snap_bounds) { + return min[0]; + } + } + + return val; + }, + _applyPrecision: function(val) { + var precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step); + return this._applyToFixedAndParseFloat(val, precision); + }, + _getNumDigitsAfterDecimalPlace: function(num) { + var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/); + if (!match) { return 0; } + return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0)); + }, + _applyToFixedAndParseFloat: function(num, toFixedInput) { + var truncatedNum = num.toFixed(toFixedInput); + return parseFloat(truncatedNum); + }, + /* + Credits to Mike Samuel for the following method! + Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number + */ + _getPercentage: function(ev) { + if (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove')) { + ev = ev.touches[0]; + } + + var eventPosition = ev[this.mousePos]; + var sliderOffset = this._state.offset[this.stylePos]; + var distanceToSlide = eventPosition - sliderOffset; + // Calculate what percent of the length the slider handle has slid + var percentage = (distanceToSlide / this._state.size) * 100; + percentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2]; + if (this.options.reversed) { + percentage = 100 - percentage; + } + + // Make sure the percent is within the bounds of the slider. + // 0% corresponds to the 'min' value of the slide + // 100% corresponds to the 'max' value of the slide + return Math.max(0, Math.min(100, percentage)); + }, + _validateInputValue: function(val) { + if (typeof val === 'number') { + return val; + } else if (Array.isArray(val)) { + this._validateArray(val); + return val; + } else { + throw new Error( ErrorMsgs.formatInvalidInputErrorMsg(val) ); + } + }, + _validateArray: function(val) { + for(var i = 0; i < val.length; i++) { + var input = val[i]; + if (typeof input !== 'number') { throw new Error( ErrorMsgs.formatInvalidInputErrorMsg(input) ); } + } + }, + _setDataVal: function(val) { + this.element.setAttribute('data-value', val); + this.element.setAttribute('value', val); + this.element.value = val; + }, + _trigger: function(evt, val) { + val = (val || val === 0) ? val : undefined; + + var callbackFnArray = this.eventToCallbackMap[evt]; + if(callbackFnArray && callbackFnArray.length) { + for(var i = 0; i < callbackFnArray.length; i++) { + var callbackFn = callbackFnArray[i]; + callbackFn(val); + } + } + + /* If JQuery exists, trigger JQuery events */ + if($) { + this._triggerJQueryEvent(evt, val); + } + }, + _triggerJQueryEvent: function(evt, val) { + var eventData = { + type: evt, + value: val + }; + this.$element.trigger(eventData); + this.$sliderElem.trigger(eventData); + }, + _unbindJQueryEventHandlers: function() { + this.$element.off(); + this.$sliderElem.off(); + }, + _setText: function(element, text) { + if(typeof element.innerText !== "undefined") { + element.innerText = text; + } else if(typeof element.textContent !== "undefined") { + element.textContent = text; + } + }, + _removeClass: function(element, classString) { + var classes = classString.split(" "); + var newClasses = element.className; + + for(var i = 0; i < classes.length; i++) { + var classTag = classes[i]; + var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)"); + newClasses = newClasses.replace(regex, " "); + } + + element.className = newClasses.trim(); + }, + _addClass: function(element, classString) { + var classes = classString.split(" "); + var newClasses = element.className; + + for(var i = 0; i < classes.length; i++) { + var classTag = classes[i]; + var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)"); + var ifClassExists = regex.test(newClasses); + + if(!ifClassExists) { + newClasses += " " + classTag; + } + } + + element.className = newClasses.trim(); + }, + _offsetLeft: function(obj){ + return obj.getBoundingClientRect().left; + }, + _offsetTop: function(obj){ + var offsetTop = obj.offsetTop; + while((obj = obj.offsetParent) && !isNaN(obj.offsetTop)){ + offsetTop += obj.offsetTop; + } + return offsetTop; + }, + _offset: function (obj) { + return { + left: this._offsetLeft(obj), + top: this._offsetTop(obj) + }; + }, + _css: function(elementRef, styleName, value) { + if ($) { + $.style(elementRef, styleName, value); + } else { + var style = styleName.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function (all, letter) { + return letter.toUpperCase(); + }); + elementRef.style[style] = value; + } + }, + _toValue: function(percentage) { + return this.options.scale.toValue.apply(this, [percentage]); + }, + _toPercentage: function(value) { + return this.options.scale.toPercentage.apply(this, [value]); + }, + _setTooltipPosition: function(){ + var tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max]; + if (this.options.orientation === 'vertical'){ + var tooltipPos = this.options.tooltip_position || 'right'; + var oppositeSide = (tooltipPos === 'left') ? 'right' : 'left'; + tooltips.forEach(function(tooltip){ + this._addClass(tooltip, tooltipPos); + tooltip.style[oppositeSide] = '100%'; + }.bind(this)); + } else if(this.options.tooltip_position === 'bottom') { + tooltips.forEach(function(tooltip){ + this._addClass(tooltip, 'bottom'); + tooltip.style.top = 22 + 'px'; + }.bind(this)); + } else { + tooltips.forEach(function(tooltip){ + this._addClass(tooltip, 'top'); + tooltip.style.top = -this.tooltip.outerHeight - 14 + 'px'; + }.bind(this)); + } + } + }; + + /********************************* + + Attach to global namespace + + *********************************/ + if($) { + var namespace = $.fn.slider ? 'bootstrapSlider' : 'slider'; + $.bridget(namespace, Slider); + } + + })( $ ); + + return Slider; +})); diff --git a/public/bower_components/AdminLTE/plugins/bootstrap-slider/slider.css b/public/bower_components/AdminLTE/plugins/bootstrap-slider/slider.css new file mode 100644 index 0000000..3a64928 --- /dev/null +++ b/public/bower_components/AdminLTE/plugins/bootstrap-slider/slider.css @@ -0,0 +1,282 @@ +/*! + * Slider for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.slider { + display: block; + vertical-align: middle; + position: relative; + +} +.slider.slider-horizontal { + width: 100%; + height: 20px; + margin-bottom: 20px; +} +.slider.slider-horizontal:last-of-type { + margin-bottom: 0; +} +.slider.slider-horizontal .slider-track { + height: 10px; + width: 100%; + margin-top: -5px; + top: 50%; + left: 0; +} +.slider.slider-horizontal .slider-selection, +.slider.slider-horizontal .slider-track-low, +.slider.slider-horizontal .slider-track-high { + height: 100%; + top: 0; + bottom: 0; +} +.slider.slider-horizontal .slider-tick, +.slider.slider-horizontal .slider-handle { + margin-left: -10px; + margin-top: -5px; +} +.slider.slider-horizontal .slider-tick.triangle, +.slider.slider-horizontal .slider-handle.triangle { + border-width: 0 10px 10px 10px; + width: 0; + height: 0; + border-bottom-color: #0480be; + margin-top: 0; +} +.slider.slider-horizontal .slider-tick-label-container { + white-space: nowrap; + margin-top: 20px; +} +.slider.slider-horizontal .slider-tick-label-container .slider-tick-label { + padding-top: 4px; + display: inline-block; + text-align: center; +} +.slider.slider-vertical { + height: 230px; + width: 20px; + margin-right: 20px; + display: inline-block; +} +.slider.slider-vertical:last-of-type { + margin-right: 0; +} +.slider.slider-vertical .slider-track { + width: 10px; + height: 100%; + margin-left: -5px; + left: 50%; + top: 0; +} +.slider.slider-vertical .slider-selection { + width: 100%; + left: 0; + top: 0; + bottom: 0; +} +.slider.slider-vertical .slider-track-low, +.slider.slider-vertical .slider-track-high { + width: 100%; + left: 0; + right: 0; +} +.slider.slider-vertical .slider-tick, +.slider.slider-vertical .slider-handle { + margin-left: -5px; + margin-top: -10px; +} +.slider.slider-vertical .slider-tick.triangle, +.slider.slider-vertical .slider-handle.triangle { + border-width: 10px 0 10px 10px; + width: 1px; + height: 1px; + border-left-color: #0480be; + margin-left: 0; +} +.slider.slider-vertical .slider-tick-label-container { + white-space: nowrap; +} +.slider.slider-vertical .slider-tick-label-container .slider-tick-label { + padding-left: 4px; +} +.slider.slider-disabled .slider-handle { + background-image: -webkit-linear-gradient(top, #dfdfdf 0%, #bebebe 100%); + background-image: -o-linear-gradient(top, #dfdfdf 0%, #bebebe 100%); + background-image: linear-gradient(to bottom, #dfdfdf 0%, #bebebe 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdfdfdf', endColorstr='#ffbebebe', GradientType=0); +} +.slider.slider-disabled .slider-track { + background-image: -webkit-linear-gradient(top, #e5e5e5 0%, #e9e9e9 100%); + background-image: -o-linear-gradient(top, #e5e5e5 0%, #e9e9e9 100%); + background-image: linear-gradient(to bottom, #e5e5e5 0%, #e9e9e9 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe5e5e5', endColorstr='#ffe9e9e9', GradientType=0); + cursor: not-allowed; +} +.slider input { + display: none; +} +.slider .tooltip.top { + margin-top: -36px; +} +.slider .tooltip-inner { + white-space: nowrap; +} +.slider .hide { + display: none; +} +.slider-track { + position: absolute; + cursor: pointer; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f0f0f0, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f0f0f0), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #f9f9f9); + background-image: -o-linear-gradient(top, #f0f0f0, #f9f9f9); + background-image: linear-gradient(to bottom, #f0f0f0, #f9f9f9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0f0f0', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.slider-selection { + position: absolute; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f9f9f9, #f5f5f5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f9), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #f9f9f9, #f5f5f5); + background-image: -o-linear-gradient(top, #f9f9f9, #f5f5f5); + background-image: linear-gradient(to bottom, #f9f9f9, #f5f5f5); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#fff5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.slider-selection.tick-slider-selection { + background-image: -webkit-linear-gradient(top, #89cdef 0%, #81bfde 100%); + background-image: -o-linear-gradient(top, #89cdef 0%, #81bfde 100%); + background-image: linear-gradient(to bottom, #89cdef 0%, #81bfde 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff89cdef', endColorstr='#ff81bfde', GradientType=0); +} +.slider-track-low, +.slider-track-high { + position: absolute; + background: transparent; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; +} +.slider-handle { + position: absolute; + width: 20px; + height: 20px; + background-color: #444; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + opacity: 1; + border: 0px solid transparent; +} +.slider-handle.round { + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; +} +.slider-handle.triangle { + background: transparent none; +} +.slider-handle.custom { + background: transparent none; +} +.slider-handle.custom::before { + line-height: 20px; + font-size: 20px; + content: '\2605'; + color: #726204; +} +.slider-tick { + position: absolute; + width: 20px; + height: 20px; + background-image: -webkit-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #f9f9f9 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#fff5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + filter: none; + opacity: 0.8; + border: 0px solid transparent; +} +.slider-tick.round { + border-radius: 50%; +} +.slider-tick.triangle { + background: transparent none; +} +.slider-tick.custom { + background: transparent none; +} +.slider-tick.custom::before { + line-height: 20px; + font-size: 20px; + content: '\2605'; + color: #726204; +} +.slider-tick.in-selection { + background-image: -webkit-linear-gradient(top, #89cdef 0%, #81bfde 100%); + background-image: -o-linear-gradient(top, #89cdef 0%, #81bfde 100%); + background-image: linear-gradient(to bottom, #89cdef 0%, #81bfde 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff89cdef', endColorstr='#ff81bfde', GradientType=0); + opacity: 1; +} +.slider-disabled .slider-selection { + opacity: 0.5; +} + +#red .slider-selection { + background: #f56954; +} + +#blue .slider-selection { + background: #3c8dbc; +} + +#green .slider-selection { + background: #00a65a; +} + +#yellow .slider-selection { + background: #f39c12; +} + +#aqua .slider-selection { + background: #00c0ef; +} + +#purple .slider-selection { + background: #932ab6; +} \ No newline at end of file diff --git a/public/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.js b/public/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.js new file mode 100644 index 0000000..acccf91 --- /dev/null +++ b/public/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.js @@ -0,0 +1,14975 @@ +// TODO: in future try to replace most inline compability checks with polyfills for code readability + +// element.textContent polyfill. +// Unsupporting browsers: IE8 + +if (Object.defineProperty && Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(Element.prototype, "textContent") && !Object.getOwnPropertyDescriptor(Element.prototype, "textContent").get) { + (function() { + var innerText = Object.getOwnPropertyDescriptor(Element.prototype, "innerText"); + Object.defineProperty(Element.prototype, "textContent", + { + get: function() { + return innerText.get.call(this); + }, + set: function(s) { + return innerText.set.call(this, s); + } + } + ); + })(); +} + +// isArray polyfill for ie8 +if(!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; +};/** + * @license wysihtml5x v0.4.15 + * https://github.com/Edicy/wysihtml5 + * + * Author: Christopher Blum (https://github.com/tiff) + * Secondary author of extended features: Oliver Pulges (https://github.com/pulges) + * + * Copyright (C) 2012 XING AG + * Licensed under the MIT license (MIT) + * + */ +var wysihtml5 = { + version: "0.4.15", + + // namespaces + commands: {}, + dom: {}, + quirks: {}, + toolbar: {}, + lang: {}, + selection: {}, + views: {}, + + INVISIBLE_SPACE: "\uFEFF", + + EMPTY_FUNCTION: function() {}, + + ELEMENT_NODE: 1, + TEXT_NODE: 3, + + BACKSPACE_KEY: 8, + ENTER_KEY: 13, + ESCAPE_KEY: 27, + SPACE_KEY: 32, + DELETE_KEY: 46 +}; +;/** + * Rangy, a cross-browser JavaScript range and selection library + * http://code.google.com/p/rangy/ + * + * Copyright 2014, Tim Down + * Licensed under the MIT license. + * Version: 1.3alpha.20140804 + * Build date: 4 August 2014 + */ + +(function(factory, global) { + if (typeof define == "function" && define.amd) { + // AMD. Register as an anonymous module. + define(factory); +/* + TODO: look into this properly. + + } else if (typeof exports == "object") { + // Node/CommonJS style for Browserify + module.exports = factory; +*/ + } else { + // No AMD or CommonJS support so we place Rangy in a global variable + global.rangy = factory(); + } +})(function() { + + var OBJECT = "object", FUNCTION = "function", UNDEFINED = "undefined"; + + // Minimal set of properties required for DOM Level 2 Range compliance. Comparison constants such as START_TO_START + // are omitted because ranges in KHTML do not have them but otherwise work perfectly well. See issue 113. + var domRangeProperties = ["startContainer", "startOffset", "endContainer", "endOffset", "collapsed", + "commonAncestorContainer"]; + + // Minimal set of methods required for DOM Level 2 Range compliance + var domRangeMethods = ["setStart", "setStartBefore", "setStartAfter", "setEnd", "setEndBefore", + "setEndAfter", "collapse", "selectNode", "selectNodeContents", "compareBoundaryPoints", "deleteContents", + "extractContents", "cloneContents", "insertNode", "surroundContents", "cloneRange", "toString", "detach"]; + + var textRangeProperties = ["boundingHeight", "boundingLeft", "boundingTop", "boundingWidth", "htmlText", "text"]; + + // Subset of TextRange's full set of methods that we're interested in + var textRangeMethods = ["collapse", "compareEndPoints", "duplicate", "moveToElementText", "parentElement", "select", + "setEndPoint", "getBoundingClientRect"]; + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Trio of functions taken from Peter Michaux's article: + // http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting + function isHostMethod(o, p) { + var t = typeof o[p]; + return t == FUNCTION || (!!(t == OBJECT && o[p])) || t == "unknown"; + } + + function isHostObject(o, p) { + return !!(typeof o[p] == OBJECT && o[p]); + } + + function isHostProperty(o, p) { + return typeof o[p] != UNDEFINED; + } + + // Creates a convenience function to save verbose repeated calls to tests functions + function createMultiplePropertyTest(testFunc) { + return function(o, props) { + var i = props.length; + while (i--) { + if (!testFunc(o, props[i])) { + return false; + } + } + return true; + }; + } + + // Next trio of functions are a convenience to save verbose repeated calls to previous two functions + var areHostMethods = createMultiplePropertyTest(isHostMethod); + var areHostObjects = createMultiplePropertyTest(isHostObject); + var areHostProperties = createMultiplePropertyTest(isHostProperty); + + function isTextRange(range) { + return range && areHostMethods(range, textRangeMethods) && areHostProperties(range, textRangeProperties); + } + + function getBody(doc) { + return isHostObject(doc, "body") ? doc.body : doc.getElementsByTagName("body")[0]; + } + + var modules = {}; + + var api = { + version: "1.3alpha.20140804", + initialized: false, + supported: true, + + util: { + isHostMethod: isHostMethod, + isHostObject: isHostObject, + isHostProperty: isHostProperty, + areHostMethods: areHostMethods, + areHostObjects: areHostObjects, + areHostProperties: areHostProperties, + isTextRange: isTextRange, + getBody: getBody + }, + + features: {}, + + modules: modules, + config: { + alertOnFail: true, + alertOnWarn: false, + preferTextRange: false, + autoInitialize: (typeof rangyAutoInitialize == UNDEFINED) ? true : rangyAutoInitialize + } + }; + + function consoleLog(msg) { + if (isHostObject(window, "console") && isHostMethod(window.console, "log")) { + window.console.log(msg); + } + } + + function alertOrLog(msg, shouldAlert) { + if (shouldAlert) { + window.alert(msg); + } else { + consoleLog(msg); + } + } + + function fail(reason) { + api.initialized = true; + api.supported = false; + alertOrLog("Rangy is not supported on this page in your browser. Reason: " + reason, api.config.alertOnFail); + } + + api.fail = fail; + + function warn(msg) { + alertOrLog("Rangy warning: " + msg, api.config.alertOnWarn); + } + + api.warn = warn; + + // Add utility extend() method + if ({}.hasOwnProperty) { + api.util.extend = function(obj, props, deep) { + var o, p; + for (var i in props) { + if (props.hasOwnProperty(i)) { + o = obj[i]; + p = props[i]; + if (deep && o !== null && typeof o == "object" && p !== null && typeof p == "object") { + api.util.extend(o, p, true); + } + obj[i] = p; + } + } + // Special case for toString, which does not show up in for...in loops in IE <= 8 + if (props.hasOwnProperty("toString")) { + obj.toString = props.toString; + } + return obj; + }; + } else { + fail("hasOwnProperty not supported"); + } + + // Test whether Array.prototype.slice can be relied on for NodeLists and use an alternative toArray() if not + (function() { + var el = document.createElement("div"); + el.appendChild(document.createElement("span")); + var slice = [].slice; + var toArray; + try { + if (slice.call(el.childNodes, 0)[0].nodeType == 1) { + toArray = function(arrayLike) { + return slice.call(arrayLike, 0); + }; + } + } catch (e) {} + + if (!toArray) { + toArray = function(arrayLike) { + var arr = []; + for (var i = 0, len = arrayLike.length; i < len; ++i) { + arr[i] = arrayLike[i]; + } + return arr; + }; + } + + api.util.toArray = toArray; + })(); + + + // Very simple event handler wrapper function that doesn't attempt to solve issues such as "this" handling or + // normalization of event properties + var addListener; + if (isHostMethod(document, "addEventListener")) { + addListener = function(obj, eventType, listener) { + obj.addEventListener(eventType, listener, false); + }; + } else if (isHostMethod(document, "attachEvent")) { + addListener = function(obj, eventType, listener) { + obj.attachEvent("on" + eventType, listener); + }; + } else { + fail("Document does not have required addEventListener or attachEvent method"); + } + + api.util.addListener = addListener; + + var initListeners = []; + + function getErrorDesc(ex) { + return ex.message || ex.description || String(ex); + } + + // Initialization + function init() { + if (api.initialized) { + return; + } + var testRange; + var implementsDomRange = false, implementsTextRange = false; + + // First, perform basic feature tests + + if (isHostMethod(document, "createRange")) { + testRange = document.createRange(); + if (areHostMethods(testRange, domRangeMethods) && areHostProperties(testRange, domRangeProperties)) { + implementsDomRange = true; + } + } + + var body = getBody(document); + if (!body || body.nodeName.toLowerCase() != "body") { + fail("No body element found"); + return; + } + + if (body && isHostMethod(body, "createTextRange")) { + testRange = body.createTextRange(); + if (isTextRange(testRange)) { + implementsTextRange = true; + } + } + + if (!implementsDomRange && !implementsTextRange) { + fail("Neither Range nor TextRange are available"); + return; + } + + api.initialized = true; + api.features = { + implementsDomRange: implementsDomRange, + implementsTextRange: implementsTextRange + }; + + // Initialize modules + var module, errorMessage; + for (var moduleName in modules) { + if ( (module = modules[moduleName]) instanceof Module ) { + module.init(module, api); + } + } + + // Call init listeners + for (var i = 0, len = initListeners.length; i < len; ++i) { + try { + initListeners[i](api); + } catch (ex) { + errorMessage = "Rangy init listener threw an exception. Continuing. Detail: " + getErrorDesc(ex); + consoleLog(errorMessage); + } + } + } + + // Allow external scripts to initialize this library in case it's loaded after the document has loaded + api.init = init; + + // Execute listener immediately if already initialized + api.addInitListener = function(listener) { + if (api.initialized) { + listener(api); + } else { + initListeners.push(listener); + } + }; + + var shimListeners = []; + + api.addShimListener = function(listener) { + shimListeners.push(listener); + }; + + function shim(win) { + win = win || window; + init(); + + // Notify listeners + for (var i = 0, len = shimListeners.length; i < len; ++i) { + shimListeners[i](win); + } + } + + api.shim = api.createMissingNativeApi = shim; + + function Module(name, dependencies, initializer) { + this.name = name; + this.dependencies = dependencies; + this.initialized = false; + this.supported = false; + this.initializer = initializer; + } + + Module.prototype = { + init: function() { + var requiredModuleNames = this.dependencies || []; + for (var i = 0, len = requiredModuleNames.length, requiredModule, moduleName; i < len; ++i) { + moduleName = requiredModuleNames[i]; + + requiredModule = modules[moduleName]; + if (!requiredModule || !(requiredModule instanceof Module)) { + throw new Error("required module '" + moduleName + "' not found"); + } + + requiredModule.init(); + + if (!requiredModule.supported) { + throw new Error("required module '" + moduleName + "' not supported"); + } + } + + // Now run initializer + this.initializer(this); + }, + + fail: function(reason) { + this.initialized = true; + this.supported = false; + throw new Error("Module '" + this.name + "' failed to load: " + reason); + }, + + warn: function(msg) { + api.warn("Module " + this.name + ": " + msg); + }, + + deprecationNotice: function(deprecated, replacement) { + api.warn("DEPRECATED: " + deprecated + " in module " + this.name + "is deprecated. Please use " + + replacement + " instead"); + }, + + createError: function(msg) { + return new Error("Error in Rangy " + this.name + " module: " + msg); + } + }; + + function createModule(isCore, name, dependencies, initFunc) { + var newModule = new Module(name, dependencies, function(module) { + if (!module.initialized) { + module.initialized = true; + try { + initFunc(api, module); + module.supported = true; + } catch (ex) { + var errorMessage = "Module '" + name + "' failed to load: " + getErrorDesc(ex); + consoleLog(errorMessage); + } + } + }); + modules[name] = newModule; + } + + api.createModule = function(name) { + // Allow 2 or 3 arguments (second argument is an optional array of dependencies) + var initFunc, dependencies; + if (arguments.length == 2) { + initFunc = arguments[1]; + dependencies = []; + } else { + initFunc = arguments[2]; + dependencies = arguments[1]; + } + + var module = createModule(false, name, dependencies, initFunc); + + // Initialize the module immediately if the core is already initialized + if (api.initialized) { + module.init(); + } + }; + + api.createCoreModule = function(name, dependencies, initFunc) { + createModule(true, name, dependencies, initFunc); + }; + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Ensure rangy.rangePrototype and rangy.selectionPrototype are available immediately + + function RangePrototype() {} + api.RangePrototype = RangePrototype; + api.rangePrototype = new RangePrototype(); + + function SelectionPrototype() {} + api.selectionPrototype = new SelectionPrototype(); + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Wait for document to load before running tests + + var docReady = false; + + var loadHandler = function(e) { + if (!docReady) { + docReady = true; + if (!api.initialized && api.config.autoInitialize) { + init(); + } + } + }; + + // Test whether we have window and document objects that we will need + if (typeof window == UNDEFINED) { + fail("No window found"); + return; + } + if (typeof document == UNDEFINED) { + fail("No document found"); + return; + } + + if (isHostMethod(document, "addEventListener")) { + document.addEventListener("DOMContentLoaded", loadHandler, false); + } + + // Add a fallback in case the DOMContentLoaded event isn't supported + addListener(window, "load", loadHandler); + + /*----------------------------------------------------------------------------------------------------------------*/ + + // DOM utility methods used by Rangy + api.createCoreModule("DomUtil", [], function(api, module) { + var UNDEF = "undefined"; + var util = api.util; + + // Perform feature tests + if (!util.areHostMethods(document, ["createDocumentFragment", "createElement", "createTextNode"])) { + module.fail("document missing a Node creation method"); + } + + if (!util.isHostMethod(document, "getElementsByTagName")) { + module.fail("document missing getElementsByTagName method"); + } + + var el = document.createElement("div"); + if (!util.areHostMethods(el, ["insertBefore", "appendChild", "cloneNode"] || + !util.areHostObjects(el, ["previousSibling", "nextSibling", "childNodes", "parentNode"]))) { + module.fail("Incomplete Element implementation"); + } + + // innerHTML is required for Range's createContextualFragment method + if (!util.isHostProperty(el, "innerHTML")) { + module.fail("Element is missing innerHTML property"); + } + + var textNode = document.createTextNode("test"); + if (!util.areHostMethods(textNode, ["splitText", "deleteData", "insertData", "appendData", "cloneNode"] || + !util.areHostObjects(el, ["previousSibling", "nextSibling", "childNodes", "parentNode"]) || + !util.areHostProperties(textNode, ["data"]))) { + module.fail("Incomplete Text Node implementation"); + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Removed use of indexOf because of a bizarre bug in Opera that is thrown in one of the Acid3 tests. I haven't been + // able to replicate it outside of the test. The bug is that indexOf returns -1 when called on an Array that + // contains just the document as a single element and the value searched for is the document. + var arrayContains = /*Array.prototype.indexOf ? + function(arr, val) { + return arr.indexOf(val) > -1; + }:*/ + + function(arr, val) { + var i = arr.length; + while (i--) { + if (arr[i] === val) { + return true; + } + } + return false; + }; + + // Opera 11 puts HTML elements in the null namespace, it seems, and IE 7 has undefined namespaceURI + function isHtmlNamespace(node) { + var ns; + return typeof node.namespaceURI == UNDEF || ((ns = node.namespaceURI) === null || ns == "http://www.w3.org/1999/xhtml"); + } + + function parentElement(node) { + var parent = node.parentNode; + return (parent.nodeType == 1) ? parent : null; + } + + function getNodeIndex(node) { + var i = 0; + while( (node = node.previousSibling) ) { + ++i; + } + return i; + } + + function getNodeLength(node) { + switch (node.nodeType) { + case 7: + case 10: + return 0; + case 3: + case 8: + return node.length; + default: + return node.childNodes.length; + } + } + + function getCommonAncestor(node1, node2) { + var ancestors = [], n; + for (n = node1; n; n = n.parentNode) { + ancestors.push(n); + } + + for (n = node2; n; n = n.parentNode) { + if (arrayContains(ancestors, n)) { + return n; + } + } + + return null; + } + + function isAncestorOf(ancestor, descendant, selfIsAncestor) { + var n = selfIsAncestor ? descendant : descendant.parentNode; + while (n) { + if (n === ancestor) { + return true; + } else { + n = n.parentNode; + } + } + return false; + } + + function isOrIsAncestorOf(ancestor, descendant) { + return isAncestorOf(ancestor, descendant, true); + } + + function getClosestAncestorIn(node, ancestor, selfIsAncestor) { + var p, n = selfIsAncestor ? node : node.parentNode; + while (n) { + p = n.parentNode; + if (p === ancestor) { + return n; + } + n = p; + } + return null; + } + + function isCharacterDataNode(node) { + var t = node.nodeType; + return t == 3 || t == 4 || t == 8 ; // Text, CDataSection or Comment + } + + function isTextOrCommentNode(node) { + if (!node) { + return false; + } + var t = node.nodeType; + return t == 3 || t == 8 ; // Text or Comment + } + + function insertAfter(node, precedingNode) { + var nextNode = precedingNode.nextSibling, parent = precedingNode.parentNode; + if (nextNode) { + parent.insertBefore(node, nextNode); + } else { + parent.appendChild(node); + } + return node; + } + + // Note that we cannot use splitText() because it is bugridden in IE 9. + function splitDataNode(node, index, positionsToPreserve) { + var newNode = node.cloneNode(false); + newNode.deleteData(0, index); + node.deleteData(index, node.length - index); + insertAfter(newNode, node); + + // Preserve positions + if (positionsToPreserve) { + for (var i = 0, position; position = positionsToPreserve[i++]; ) { + // Handle case where position was inside the portion of node after the split point + if (position.node == node && position.offset > index) { + position.node = newNode; + position.offset -= index; + } + // Handle the case where the position is a node offset within node's parent + else if (position.node == node.parentNode && position.offset > getNodeIndex(node)) { + ++position.offset; + } + } + } + return newNode; + } + + function getDocument(node) { + if (node.nodeType == 9) { + return node; + } else if (typeof node.ownerDocument != UNDEF) { + return node.ownerDocument; + } else if (typeof node.document != UNDEF) { + return node.document; + } else if (node.parentNode) { + return getDocument(node.parentNode); + } else { + throw module.createError("getDocument: no document found for node"); + } + } + + function getWindow(node) { + var doc = getDocument(node); + if (typeof doc.defaultView != UNDEF) { + return doc.defaultView; + } else if (typeof doc.parentWindow != UNDEF) { + return doc.parentWindow; + } else { + throw module.createError("Cannot get a window object for node"); + } + } + + function getIframeDocument(iframeEl) { + if (typeof iframeEl.contentDocument != UNDEF) { + return iframeEl.contentDocument; + } else if (typeof iframeEl.contentWindow != UNDEF) { + return iframeEl.contentWindow.document; + } else { + throw module.createError("getIframeDocument: No Document object found for iframe element"); + } + } + + function getIframeWindow(iframeEl) { + if (typeof iframeEl.contentWindow != UNDEF) { + return iframeEl.contentWindow; + } else if (typeof iframeEl.contentDocument != UNDEF) { + return iframeEl.contentDocument.defaultView; + } else { + throw module.createError("getIframeWindow: No Window object found for iframe element"); + } + } + + // This looks bad. Is it worth it? + function isWindow(obj) { + return obj && util.isHostMethod(obj, "setTimeout") && util.isHostObject(obj, "document"); + } + + function getContentDocument(obj, module, methodName) { + var doc; + + if (!obj) { + doc = document; + } + + // Test if a DOM node has been passed and obtain a document object for it if so + else if (util.isHostProperty(obj, "nodeType")) { + doc = (obj.nodeType == 1 && obj.tagName.toLowerCase() == "iframe") ? + getIframeDocument(obj) : getDocument(obj); + } + + // Test if the doc parameter appears to be a Window object + else if (isWindow(obj)) { + doc = obj.document; + } + + if (!doc) { + throw module.createError(methodName + "(): Parameter must be a Window object or DOM node"); + } + + return doc; + } + + function getRootContainer(node) { + var parent; + while ( (parent = node.parentNode) ) { + node = parent; + } + return node; + } + + function comparePoints(nodeA, offsetA, nodeB, offsetB) { + // See http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Comparing + var nodeC, root, childA, childB, n; + if (nodeA == nodeB) { + // Case 1: nodes are the same + return offsetA === offsetB ? 0 : (offsetA < offsetB) ? -1 : 1; + } else if ( (nodeC = getClosestAncestorIn(nodeB, nodeA, true)) ) { + // Case 2: node C (container B or an ancestor) is a child node of A + return offsetA <= getNodeIndex(nodeC) ? -1 : 1; + } else if ( (nodeC = getClosestAncestorIn(nodeA, nodeB, true)) ) { + // Case 3: node C (container A or an ancestor) is a child node of B + return getNodeIndex(nodeC) < offsetB ? -1 : 1; + } else { + root = getCommonAncestor(nodeA, nodeB); + if (!root) { + throw new Error("comparePoints error: nodes have no common ancestor"); + } + + // Case 4: containers are siblings or descendants of siblings + childA = (nodeA === root) ? root : getClosestAncestorIn(nodeA, root, true); + childB = (nodeB === root) ? root : getClosestAncestorIn(nodeB, root, true); + + if (childA === childB) { + // This shouldn't be possible + throw module.createError("comparePoints got to case 4 and childA and childB are the same!"); + } else { + n = root.firstChild; + while (n) { + if (n === childA) { + return -1; + } else if (n === childB) { + return 1; + } + n = n.nextSibling; + } + } + } + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Test for IE's crash (IE 6/7) or exception (IE >= 8) when a reference to garbage-collected text node is queried + var crashyTextNodes = false; + + function isBrokenNode(node) { + var n; + try { + n = node.parentNode; + return false; + } catch (e) { + return true; + } + } + + (function() { + var el = document.createElement("b"); + el.innerHTML = "1"; + var textNode = el.firstChild; + el.innerHTML = "
    "; + crashyTextNodes = isBrokenNode(textNode); + + api.features.crashyTextNodes = crashyTextNodes; + })(); + + /*----------------------------------------------------------------------------------------------------------------*/ + + function inspectNode(node) { + if (!node) { + return "[No node]"; + } + if (crashyTextNodes && isBrokenNode(node)) { + return "[Broken node]"; + } + if (isCharacterDataNode(node)) { + return '"' + node.data + '"'; + } + if (node.nodeType == 1) { + var idAttr = node.id ? ' id="' + node.id + '"' : ""; + return "<" + node.nodeName + idAttr + ">[index:" + getNodeIndex(node) + ",length:" + node.childNodes.length + "][" + (node.innerHTML || "[innerHTML not supported]").slice(0, 25) + "]"; + } + return node.nodeName; + } + + function fragmentFromNodeChildren(node) { + var fragment = getDocument(node).createDocumentFragment(), child; + while ( (child = node.firstChild) ) { + fragment.appendChild(child); + } + return fragment; + } + + var getComputedStyleProperty; + if (typeof window.getComputedStyle != UNDEF) { + getComputedStyleProperty = function(el, propName) { + return getWindow(el).getComputedStyle(el, null)[propName]; + }; + } else if (typeof document.documentElement.currentStyle != UNDEF) { + getComputedStyleProperty = function(el, propName) { + return el.currentStyle[propName]; + }; + } else { + module.fail("No means of obtaining computed style properties found"); + } + + function NodeIterator(root) { + this.root = root; + this._next = root; + } + + NodeIterator.prototype = { + _current: null, + + hasNext: function() { + return !!this._next; + }, + + next: function() { + var n = this._current = this._next; + var child, next; + if (this._current) { + child = n.firstChild; + if (child) { + this._next = child; + } else { + next = null; + while ((n !== this.root) && !(next = n.nextSibling)) { + n = n.parentNode; + } + this._next = next; + } + } + return this._current; + }, + + detach: function() { + this._current = this._next = this.root = null; + } + }; + + function createIterator(root) { + return new NodeIterator(root); + } + + function DomPosition(node, offset) { + this.node = node; + this.offset = offset; + } + + DomPosition.prototype = { + equals: function(pos) { + return !!pos && this.node === pos.node && this.offset == pos.offset; + }, + + inspect: function() { + return "[DomPosition(" + inspectNode(this.node) + ":" + this.offset + ")]"; + }, + + toString: function() { + return this.inspect(); + } + }; + + function DOMException(codeName) { + this.code = this[codeName]; + this.codeName = codeName; + this.message = "DOMException: " + this.codeName; + } + + DOMException.prototype = { + INDEX_SIZE_ERR: 1, + HIERARCHY_REQUEST_ERR: 3, + WRONG_DOCUMENT_ERR: 4, + NO_MODIFICATION_ALLOWED_ERR: 7, + NOT_FOUND_ERR: 8, + NOT_SUPPORTED_ERR: 9, + INVALID_STATE_ERR: 11, + INVALID_NODE_TYPE_ERR: 24 + }; + + DOMException.prototype.toString = function() { + return this.message; + }; + + api.dom = { + arrayContains: arrayContains, + isHtmlNamespace: isHtmlNamespace, + parentElement: parentElement, + getNodeIndex: getNodeIndex, + getNodeLength: getNodeLength, + getCommonAncestor: getCommonAncestor, + isAncestorOf: isAncestorOf, + isOrIsAncestorOf: isOrIsAncestorOf, + getClosestAncestorIn: getClosestAncestorIn, + isCharacterDataNode: isCharacterDataNode, + isTextOrCommentNode: isTextOrCommentNode, + insertAfter: insertAfter, + splitDataNode: splitDataNode, + getDocument: getDocument, + getWindow: getWindow, + getIframeWindow: getIframeWindow, + getIframeDocument: getIframeDocument, + getBody: util.getBody, + isWindow: isWindow, + getContentDocument: getContentDocument, + getRootContainer: getRootContainer, + comparePoints: comparePoints, + isBrokenNode: isBrokenNode, + inspectNode: inspectNode, + getComputedStyleProperty: getComputedStyleProperty, + fragmentFromNodeChildren: fragmentFromNodeChildren, + createIterator: createIterator, + DomPosition: DomPosition + }; + + api.DOMException = DOMException; + }); + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Pure JavaScript implementation of DOM Range + api.createCoreModule("DomRange", ["DomUtil"], function(api, module) { + var dom = api.dom; + var util = api.util; + var DomPosition = dom.DomPosition; + var DOMException = api.DOMException; + + var isCharacterDataNode = dom.isCharacterDataNode; + var getNodeIndex = dom.getNodeIndex; + var isOrIsAncestorOf = dom.isOrIsAncestorOf; + var getDocument = dom.getDocument; + var comparePoints = dom.comparePoints; + var splitDataNode = dom.splitDataNode; + var getClosestAncestorIn = dom.getClosestAncestorIn; + var getNodeLength = dom.getNodeLength; + var arrayContains = dom.arrayContains; + var getRootContainer = dom.getRootContainer; + var crashyTextNodes = api.features.crashyTextNodes; + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Utility functions + + function isNonTextPartiallySelected(node, range) { + return (node.nodeType != 3) && + (isOrIsAncestorOf(node, range.startContainer) || isOrIsAncestorOf(node, range.endContainer)); + } + + function getRangeDocument(range) { + return range.document || getDocument(range.startContainer); + } + + function getBoundaryBeforeNode(node) { + return new DomPosition(node.parentNode, getNodeIndex(node)); + } + + function getBoundaryAfterNode(node) { + return new DomPosition(node.parentNode, getNodeIndex(node) + 1); + } + + function insertNodeAtPosition(node, n, o) { + var firstNodeInserted = node.nodeType == 11 ? node.firstChild : node; + if (isCharacterDataNode(n)) { + if (o == n.length) { + dom.insertAfter(node, n); + } else { + n.parentNode.insertBefore(node, o == 0 ? n : splitDataNode(n, o)); + } + } else if (o >= n.childNodes.length) { + n.appendChild(node); + } else { + n.insertBefore(node, n.childNodes[o]); + } + return firstNodeInserted; + } + + function rangesIntersect(rangeA, rangeB, touchingIsIntersecting) { + assertRangeValid(rangeA); + assertRangeValid(rangeB); + + if (getRangeDocument(rangeB) != getRangeDocument(rangeA)) { + throw new DOMException("WRONG_DOCUMENT_ERR"); + } + + var startComparison = comparePoints(rangeA.startContainer, rangeA.startOffset, rangeB.endContainer, rangeB.endOffset), + endComparison = comparePoints(rangeA.endContainer, rangeA.endOffset, rangeB.startContainer, rangeB.startOffset); + + return touchingIsIntersecting ? startComparison <= 0 && endComparison >= 0 : startComparison < 0 && endComparison > 0; + } + + function cloneSubtree(iterator) { + var partiallySelected; + for (var node, frag = getRangeDocument(iterator.range).createDocumentFragment(), subIterator; node = iterator.next(); ) { + partiallySelected = iterator.isPartiallySelectedSubtree(); + node = node.cloneNode(!partiallySelected); + if (partiallySelected) { + subIterator = iterator.getSubtreeIterator(); + node.appendChild(cloneSubtree(subIterator)); + subIterator.detach(); + } + + if (node.nodeType == 10) { // DocumentType + throw new DOMException("HIERARCHY_REQUEST_ERR"); + } + frag.appendChild(node); + } + return frag; + } + + function iterateSubtree(rangeIterator, func, iteratorState) { + var it, n; + iteratorState = iteratorState || { stop: false }; + for (var node, subRangeIterator; node = rangeIterator.next(); ) { + if (rangeIterator.isPartiallySelectedSubtree()) { + if (func(node) === false) { + iteratorState.stop = true; + return; + } else { + // The node is partially selected by the Range, so we can use a new RangeIterator on the portion of + // the node selected by the Range. + subRangeIterator = rangeIterator.getSubtreeIterator(); + iterateSubtree(subRangeIterator, func, iteratorState); + subRangeIterator.detach(); + if (iteratorState.stop) { + return; + } + } + } else { + // The whole node is selected, so we can use efficient DOM iteration to iterate over the node and its + // descendants + it = dom.createIterator(node); + while ( (n = it.next()) ) { + if (func(n) === false) { + iteratorState.stop = true; + return; + } + } + } + } + } + + function deleteSubtree(iterator) { + var subIterator; + while (iterator.next()) { + if (iterator.isPartiallySelectedSubtree()) { + subIterator = iterator.getSubtreeIterator(); + deleteSubtree(subIterator); + subIterator.detach(); + } else { + iterator.remove(); + } + } + } + + function extractSubtree(iterator) { + for (var node, frag = getRangeDocument(iterator.range).createDocumentFragment(), subIterator; node = iterator.next(); ) { + + if (iterator.isPartiallySelectedSubtree()) { + node = node.cloneNode(false); + subIterator = iterator.getSubtreeIterator(); + node.appendChild(extractSubtree(subIterator)); + subIterator.detach(); + } else { + iterator.remove(); + } + if (node.nodeType == 10) { // DocumentType + throw new DOMException("HIERARCHY_REQUEST_ERR"); + } + frag.appendChild(node); + } + return frag; + } + + function getNodesInRange(range, nodeTypes, filter) { + var filterNodeTypes = !!(nodeTypes && nodeTypes.length), regex; + var filterExists = !!filter; + if (filterNodeTypes) { + regex = new RegExp("^(" + nodeTypes.join("|") + ")$"); + } + + var nodes = []; + iterateSubtree(new RangeIterator(range, false), function(node) { + if (filterNodeTypes && !regex.test(node.nodeType)) { + return; + } + if (filterExists && !filter(node)) { + return; + } + // Don't include a boundary container if it is a character data node and the range does not contain any + // of its character data. See issue 190. + var sc = range.startContainer; + if (node == sc && isCharacterDataNode(sc) && range.startOffset == sc.length) { + return; + } + + var ec = range.endContainer; + if (node == ec && isCharacterDataNode(ec) && range.endOffset == 0) { + return; + } + + nodes.push(node); + }); + return nodes; + } + + function inspect(range) { + var name = (typeof range.getName == "undefined") ? "Range" : range.getName(); + return "[" + name + "(" + dom.inspectNode(range.startContainer) + ":" + range.startOffset + ", " + + dom.inspectNode(range.endContainer) + ":" + range.endOffset + ")]"; + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + // RangeIterator code partially borrows from IERange by Tim Ryan (http://github.com/timcameronryan/IERange) + + function RangeIterator(range, clonePartiallySelectedTextNodes) { + this.range = range; + this.clonePartiallySelectedTextNodes = clonePartiallySelectedTextNodes; + + + if (!range.collapsed) { + this.sc = range.startContainer; + this.so = range.startOffset; + this.ec = range.endContainer; + this.eo = range.endOffset; + var root = range.commonAncestorContainer; + + if (this.sc === this.ec && isCharacterDataNode(this.sc)) { + this.isSingleCharacterDataNode = true; + this._first = this._last = this._next = this.sc; + } else { + this._first = this._next = (this.sc === root && !isCharacterDataNode(this.sc)) ? + this.sc.childNodes[this.so] : getClosestAncestorIn(this.sc, root, true); + this._last = (this.ec === root && !isCharacterDataNode(this.ec)) ? + this.ec.childNodes[this.eo - 1] : getClosestAncestorIn(this.ec, root, true); + } + } + } + + RangeIterator.prototype = { + _current: null, + _next: null, + _first: null, + _last: null, + isSingleCharacterDataNode: false, + + reset: function() { + this._current = null; + this._next = this._first; + }, + + hasNext: function() { + return !!this._next; + }, + + next: function() { + // Move to next node + var current = this._current = this._next; + if (current) { + this._next = (current !== this._last) ? current.nextSibling : null; + + // Check for partially selected text nodes + if (isCharacterDataNode(current) && this.clonePartiallySelectedTextNodes) { + if (current === this.ec) { + (current = current.cloneNode(true)).deleteData(this.eo, current.length - this.eo); + } + if (this._current === this.sc) { + (current = current.cloneNode(true)).deleteData(0, this.so); + } + } + } + + return current; + }, + + remove: function() { + var current = this._current, start, end; + + if (isCharacterDataNode(current) && (current === this.sc || current === this.ec)) { + start = (current === this.sc) ? this.so : 0; + end = (current === this.ec) ? this.eo : current.length; + if (start != end) { + current.deleteData(start, end - start); + } + } else { + if (current.parentNode) { + current.parentNode.removeChild(current); + } else { + } + } + }, + + // Checks if the current node is partially selected + isPartiallySelectedSubtree: function() { + var current = this._current; + return isNonTextPartiallySelected(current, this.range); + }, + + getSubtreeIterator: function() { + var subRange; + if (this.isSingleCharacterDataNode) { + subRange = this.range.cloneRange(); + subRange.collapse(false); + } else { + subRange = new Range(getRangeDocument(this.range)); + var current = this._current; + var startContainer = current, startOffset = 0, endContainer = current, endOffset = getNodeLength(current); + + if (isOrIsAncestorOf(current, this.sc)) { + startContainer = this.sc; + startOffset = this.so; + } + if (isOrIsAncestorOf(current, this.ec)) { + endContainer = this.ec; + endOffset = this.eo; + } + + updateBoundaries(subRange, startContainer, startOffset, endContainer, endOffset); + } + return new RangeIterator(subRange, this.clonePartiallySelectedTextNodes); + }, + + detach: function() { + this.range = this._current = this._next = this._first = this._last = this.sc = this.so = this.ec = this.eo = null; + } + }; + + /*----------------------------------------------------------------------------------------------------------------*/ + + var beforeAfterNodeTypes = [1, 3, 4, 5, 7, 8, 10]; + var rootContainerNodeTypes = [2, 9, 11]; + var readonlyNodeTypes = [5, 6, 10, 12]; + var insertableNodeTypes = [1, 3, 4, 5, 7, 8, 10, 11]; + var surroundNodeTypes = [1, 3, 4, 5, 7, 8]; + + function createAncestorFinder(nodeTypes) { + return function(node, selfIsAncestor) { + var t, n = selfIsAncestor ? node : node.parentNode; + while (n) { + t = n.nodeType; + if (arrayContains(nodeTypes, t)) { + return n; + } + n = n.parentNode; + } + return null; + }; + } + + var getDocumentOrFragmentContainer = createAncestorFinder( [9, 11] ); + var getReadonlyAncestor = createAncestorFinder(readonlyNodeTypes); + var getDocTypeNotationEntityAncestor = createAncestorFinder( [6, 10, 12] ); + + function assertNoDocTypeNotationEntityAncestor(node, allowSelf) { + if (getDocTypeNotationEntityAncestor(node, allowSelf)) { + throw new DOMException("INVALID_NODE_TYPE_ERR"); + } + } + + function assertValidNodeType(node, invalidTypes) { + if (!arrayContains(invalidTypes, node.nodeType)) { + throw new DOMException("INVALID_NODE_TYPE_ERR"); + } + } + + function assertValidOffset(node, offset) { + if (offset < 0 || offset > (isCharacterDataNode(node) ? node.length : node.childNodes.length)) { + throw new DOMException("INDEX_SIZE_ERR"); + } + } + + function assertSameDocumentOrFragment(node1, node2) { + if (getDocumentOrFragmentContainer(node1, true) !== getDocumentOrFragmentContainer(node2, true)) { + throw new DOMException("WRONG_DOCUMENT_ERR"); + } + } + + function assertNodeNotReadOnly(node) { + if (getReadonlyAncestor(node, true)) { + throw new DOMException("NO_MODIFICATION_ALLOWED_ERR"); + } + } + + function assertNode(node, codeName) { + if (!node) { + throw new DOMException(codeName); + } + } + + function isOrphan(node) { + return (crashyTextNodes && dom.isBrokenNode(node)) || + !arrayContains(rootContainerNodeTypes, node.nodeType) && !getDocumentOrFragmentContainer(node, true); + } + + function isValidOffset(node, offset) { + return offset <= (isCharacterDataNode(node) ? node.length : node.childNodes.length); + } + + function isRangeValid(range) { + return (!!range.startContainer && !!range.endContainer && + !isOrphan(range.startContainer) && + !isOrphan(range.endContainer) && + isValidOffset(range.startContainer, range.startOffset) && + isValidOffset(range.endContainer, range.endOffset)); + } + + function assertRangeValid(range) { + if (!isRangeValid(range)) { + throw new Error("Range error: Range is no longer valid after DOM mutation (" + range.inspect() + ")"); + } + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Test the browser's innerHTML support to decide how to implement createContextualFragment + var styleEl = document.createElement("style"); + var htmlParsingConforms = false; + try { + styleEl.innerHTML = "x"; + htmlParsingConforms = (styleEl.firstChild.nodeType == 3); // Opera incorrectly creates an element node + } catch (e) { + // IE 6 and 7 throw + } + + api.features.htmlParsingConforms = htmlParsingConforms; + + var createContextualFragment = htmlParsingConforms ? + + // Implementation as per HTML parsing spec, trusting in the browser's implementation of innerHTML. See + // discussion and base code for this implementation at issue 67. + // Spec: http://html5.org/specs/dom-parsing.html#extensions-to-the-range-interface + // Thanks to Aleks Williams. + function(fragmentStr) { + // "Let node the context object's start's node." + var node = this.startContainer; + var doc = getDocument(node); + + // "If the context object's start's node is null, raise an INVALID_STATE_ERR + // exception and abort these steps." + if (!node) { + throw new DOMException("INVALID_STATE_ERR"); + } + + // "Let element be as follows, depending on node's interface:" + // Document, Document Fragment: null + var el = null; + + // "Element: node" + if (node.nodeType == 1) { + el = node; + + // "Text, Comment: node's parentElement" + } else if (isCharacterDataNode(node)) { + el = dom.parentElement(node); + } + + // "If either element is null or element's ownerDocument is an HTML document + // and element's local name is "html" and element's namespace is the HTML + // namespace" + if (el === null || ( + el.nodeName == "HTML" && + dom.isHtmlNamespace(getDocument(el).documentElement) && + dom.isHtmlNamespace(el) + )) { + + // "let element be a new Element with "body" as its local name and the HTML + // namespace as its namespace."" + el = doc.createElement("body"); + } else { + el = el.cloneNode(false); + } + + // "If the node's document is an HTML document: Invoke the HTML fragment parsing algorithm." + // "If the node's document is an XML document: Invoke the XML fragment parsing algorithm." + // "In either case, the algorithm must be invoked with fragment as the input + // and element as the context element." + el.innerHTML = fragmentStr; + + // "If this raises an exception, then abort these steps. Otherwise, let new + // children be the nodes returned." + + // "Let fragment be a new DocumentFragment." + // "Append all new children to fragment." + // "Return fragment." + return dom.fragmentFromNodeChildren(el); + } : + + // In this case, innerHTML cannot be trusted, so fall back to a simpler, non-conformant implementation that + // previous versions of Rangy used (with the exception of using a body element rather than a div) + function(fragmentStr) { + var doc = getRangeDocument(this); + var el = doc.createElement("body"); + el.innerHTML = fragmentStr; + + return dom.fragmentFromNodeChildren(el); + }; + + function splitRangeBoundaries(range, positionsToPreserve) { + assertRangeValid(range); + + var sc = range.startContainer, so = range.startOffset, ec = range.endContainer, eo = range.endOffset; + var startEndSame = (sc === ec); + + if (isCharacterDataNode(ec) && eo > 0 && eo < ec.length) { + splitDataNode(ec, eo, positionsToPreserve); + } + + if (isCharacterDataNode(sc) && so > 0 && so < sc.length) { + sc = splitDataNode(sc, so, positionsToPreserve); + if (startEndSame) { + eo -= so; + ec = sc; + } else if (ec == sc.parentNode && eo >= getNodeIndex(sc)) { + eo++; + } + so = 0; + } + range.setStartAndEnd(sc, so, ec, eo); + } + + function rangeToHtml(range) { + assertRangeValid(range); + var container = range.commonAncestorContainer.parentNode.cloneNode(false); + container.appendChild( range.cloneContents() ); + return container.innerHTML; + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + var rangeProperties = ["startContainer", "startOffset", "endContainer", "endOffset", "collapsed", + "commonAncestorContainer"]; + + var s2s = 0, s2e = 1, e2e = 2, e2s = 3; + var n_b = 0, n_a = 1, n_b_a = 2, n_i = 3; + + util.extend(api.rangePrototype, { + compareBoundaryPoints: function(how, range) { + assertRangeValid(this); + assertSameDocumentOrFragment(this.startContainer, range.startContainer); + + var nodeA, offsetA, nodeB, offsetB; + var prefixA = (how == e2s || how == s2s) ? "start" : "end"; + var prefixB = (how == s2e || how == s2s) ? "start" : "end"; + nodeA = this[prefixA + "Container"]; + offsetA = this[prefixA + "Offset"]; + nodeB = range[prefixB + "Container"]; + offsetB = range[prefixB + "Offset"]; + return comparePoints(nodeA, offsetA, nodeB, offsetB); + }, + + insertNode: function(node) { + assertRangeValid(this); + assertValidNodeType(node, insertableNodeTypes); + assertNodeNotReadOnly(this.startContainer); + + if (isOrIsAncestorOf(node, this.startContainer)) { + throw new DOMException("HIERARCHY_REQUEST_ERR"); + } + + // No check for whether the container of the start of the Range is of a type that does not allow + // children of the type of node: the browser's DOM implementation should do this for us when we attempt + // to add the node + + var firstNodeInserted = insertNodeAtPosition(node, this.startContainer, this.startOffset); + this.setStartBefore(firstNodeInserted); + }, + + cloneContents: function() { + assertRangeValid(this); + + var clone, frag; + if (this.collapsed) { + return getRangeDocument(this).createDocumentFragment(); + } else { + if (this.startContainer === this.endContainer && isCharacterDataNode(this.startContainer)) { + clone = this.startContainer.cloneNode(true); + clone.data = clone.data.slice(this.startOffset, this.endOffset); + frag = getRangeDocument(this).createDocumentFragment(); + frag.appendChild(clone); + return frag; + } else { + var iterator = new RangeIterator(this, true); + clone = cloneSubtree(iterator); + iterator.detach(); + } + return clone; + } + }, + + canSurroundContents: function() { + assertRangeValid(this); + assertNodeNotReadOnly(this.startContainer); + assertNodeNotReadOnly(this.endContainer); + + // Check if the contents can be surrounded. Specifically, this means whether the range partially selects + // no non-text nodes. + var iterator = new RangeIterator(this, true); + var boundariesInvalid = (iterator._first && (isNonTextPartiallySelected(iterator._first, this)) || + (iterator._last && isNonTextPartiallySelected(iterator._last, this))); + iterator.detach(); + return !boundariesInvalid; + }, + + surroundContents: function(node) { + assertValidNodeType(node, surroundNodeTypes); + + if (!this.canSurroundContents()) { + throw new DOMException("INVALID_STATE_ERR"); + } + + // Extract the contents + var content = this.extractContents(); + + // Clear the children of the node + if (node.hasChildNodes()) { + while (node.lastChild) { + node.removeChild(node.lastChild); + } + } + + // Insert the new node and add the extracted contents + insertNodeAtPosition(node, this.startContainer, this.startOffset); + node.appendChild(content); + + this.selectNode(node); + }, + + cloneRange: function() { + assertRangeValid(this); + var range = new Range(getRangeDocument(this)); + var i = rangeProperties.length, prop; + while (i--) { + prop = rangeProperties[i]; + range[prop] = this[prop]; + } + return range; + }, + + toString: function() { + assertRangeValid(this); + var sc = this.startContainer; + if (sc === this.endContainer && isCharacterDataNode(sc)) { + return (sc.nodeType == 3 || sc.nodeType == 4) ? sc.data.slice(this.startOffset, this.endOffset) : ""; + } else { + var textParts = [], iterator = new RangeIterator(this, true); + iterateSubtree(iterator, function(node) { + // Accept only text or CDATA nodes, not comments + if (node.nodeType == 3 || node.nodeType == 4) { + textParts.push(node.data); + } + }); + iterator.detach(); + return textParts.join(""); + } + }, + + // The methods below are all non-standard. The following batch were introduced by Mozilla but have since + // been removed from Mozilla. + + compareNode: function(node) { + assertRangeValid(this); + + var parent = node.parentNode; + var nodeIndex = getNodeIndex(node); + + if (!parent) { + throw new DOMException("NOT_FOUND_ERR"); + } + + var startComparison = this.comparePoint(parent, nodeIndex), + endComparison = this.comparePoint(parent, nodeIndex + 1); + + if (startComparison < 0) { // Node starts before + return (endComparison > 0) ? n_b_a : n_b; + } else { + return (endComparison > 0) ? n_a : n_i; + } + }, + + comparePoint: function(node, offset) { + assertRangeValid(this); + assertNode(node, "HIERARCHY_REQUEST_ERR"); + assertSameDocumentOrFragment(node, this.startContainer); + + if (comparePoints(node, offset, this.startContainer, this.startOffset) < 0) { + return -1; + } else if (comparePoints(node, offset, this.endContainer, this.endOffset) > 0) { + return 1; + } + return 0; + }, + + createContextualFragment: createContextualFragment, + + toHtml: function() { + return rangeToHtml(this); + }, + + // touchingIsIntersecting determines whether this method considers a node that borders a range intersects + // with it (as in WebKit) or not (as in Gecko pre-1.9, and the default) + intersectsNode: function(node, touchingIsIntersecting) { + assertRangeValid(this); + assertNode(node, "NOT_FOUND_ERR"); + if (getDocument(node) !== getRangeDocument(this)) { + return false; + } + + var parent = node.parentNode, offset = getNodeIndex(node); + assertNode(parent, "NOT_FOUND_ERR"); + + var startComparison = comparePoints(parent, offset, this.endContainer, this.endOffset), + endComparison = comparePoints(parent, offset + 1, this.startContainer, this.startOffset); + + return touchingIsIntersecting ? startComparison <= 0 && endComparison >= 0 : startComparison < 0 && endComparison > 0; + }, + + isPointInRange: function(node, offset) { + assertRangeValid(this); + assertNode(node, "HIERARCHY_REQUEST_ERR"); + assertSameDocumentOrFragment(node, this.startContainer); + + return (comparePoints(node, offset, this.startContainer, this.startOffset) >= 0) && + (comparePoints(node, offset, this.endContainer, this.endOffset) <= 0); + }, + + // The methods below are non-standard and invented by me. + + // Sharing a boundary start-to-end or end-to-start does not count as intersection. + intersectsRange: function(range) { + return rangesIntersect(this, range, false); + }, + + // Sharing a boundary start-to-end or end-to-start does count as intersection. + intersectsOrTouchesRange: function(range) { + return rangesIntersect(this, range, true); + }, + + intersection: function(range) { + if (this.intersectsRange(range)) { + var startComparison = comparePoints(this.startContainer, this.startOffset, range.startContainer, range.startOffset), + endComparison = comparePoints(this.endContainer, this.endOffset, range.endContainer, range.endOffset); + + var intersectionRange = this.cloneRange(); + if (startComparison == -1) { + intersectionRange.setStart(range.startContainer, range.startOffset); + } + if (endComparison == 1) { + intersectionRange.setEnd(range.endContainer, range.endOffset); + } + return intersectionRange; + } + return null; + }, + + union: function(range) { + if (this.intersectsOrTouchesRange(range)) { + var unionRange = this.cloneRange(); + if (comparePoints(range.startContainer, range.startOffset, this.startContainer, this.startOffset) == -1) { + unionRange.setStart(range.startContainer, range.startOffset); + } + if (comparePoints(range.endContainer, range.endOffset, this.endContainer, this.endOffset) == 1) { + unionRange.setEnd(range.endContainer, range.endOffset); + } + return unionRange; + } else { + throw new DOMException("Ranges do not intersect"); + } + }, + + containsNode: function(node, allowPartial) { + if (allowPartial) { + return this.intersectsNode(node, false); + } else { + return this.compareNode(node) == n_i; + } + }, + + containsNodeContents: function(node) { + return this.comparePoint(node, 0) >= 0 && this.comparePoint(node, getNodeLength(node)) <= 0; + }, + + containsRange: function(range) { + var intersection = this.intersection(range); + return intersection !== null && range.equals(intersection); + }, + + containsNodeText: function(node) { + var nodeRange = this.cloneRange(); + nodeRange.selectNode(node); + var textNodes = nodeRange.getNodes([3]); + if (textNodes.length > 0) { + nodeRange.setStart(textNodes[0], 0); + var lastTextNode = textNodes.pop(); + nodeRange.setEnd(lastTextNode, lastTextNode.length); + return this.containsRange(nodeRange); + } else { + return this.containsNodeContents(node); + } + }, + + getNodes: function(nodeTypes, filter) { + assertRangeValid(this); + return getNodesInRange(this, nodeTypes, filter); + }, + + getDocument: function() { + return getRangeDocument(this); + }, + + collapseBefore: function(node) { + this.setEndBefore(node); + this.collapse(false); + }, + + collapseAfter: function(node) { + this.setStartAfter(node); + this.collapse(true); + }, + + getBookmark: function(containerNode) { + var doc = getRangeDocument(this); + var preSelectionRange = api.createRange(doc); + containerNode = containerNode || dom.getBody(doc); + preSelectionRange.selectNodeContents(containerNode); + var range = this.intersection(preSelectionRange); + var start = 0, end = 0; + if (range) { + preSelectionRange.setEnd(range.startContainer, range.startOffset); + start = preSelectionRange.toString().length; + end = start + range.toString().length; + } + + return { + start: start, + end: end, + containerNode: containerNode + }; + }, + + moveToBookmark: function(bookmark) { + var containerNode = bookmark.containerNode; + var charIndex = 0; + this.setStart(containerNode, 0); + this.collapse(true); + var nodeStack = [containerNode], node, foundStart = false, stop = false; + var nextCharIndex, i, childNodes; + + while (!stop && (node = nodeStack.pop())) { + if (node.nodeType == 3) { + nextCharIndex = charIndex + node.length; + if (!foundStart && bookmark.start >= charIndex && bookmark.start <= nextCharIndex) { + this.setStart(node, bookmark.start - charIndex); + foundStart = true; + } + if (foundStart && bookmark.end >= charIndex && bookmark.end <= nextCharIndex) { + this.setEnd(node, bookmark.end - charIndex); + stop = true; + } + charIndex = nextCharIndex; + } else { + childNodes = node.childNodes; + i = childNodes.length; + while (i--) { + nodeStack.push(childNodes[i]); + } + } + } + }, + + getName: function() { + return "DomRange"; + }, + + equals: function(range) { + return Range.rangesEqual(this, range); + }, + + isValid: function() { + return isRangeValid(this); + }, + + inspect: function() { + return inspect(this); + }, + + detach: function() { + // In DOM4, detach() is now a no-op. + } + }); + + function copyComparisonConstantsToObject(obj) { + obj.START_TO_START = s2s; + obj.START_TO_END = s2e; + obj.END_TO_END = e2e; + obj.END_TO_START = e2s; + + obj.NODE_BEFORE = n_b; + obj.NODE_AFTER = n_a; + obj.NODE_BEFORE_AND_AFTER = n_b_a; + obj.NODE_INSIDE = n_i; + } + + function copyComparisonConstants(constructor) { + copyComparisonConstantsToObject(constructor); + copyComparisonConstantsToObject(constructor.prototype); + } + + function createRangeContentRemover(remover, boundaryUpdater) { + return function() { + assertRangeValid(this); + + var sc = this.startContainer, so = this.startOffset, root = this.commonAncestorContainer; + + var iterator = new RangeIterator(this, true); + + // Work out where to position the range after content removal + var node, boundary; + if (sc !== root) { + node = getClosestAncestorIn(sc, root, true); + boundary = getBoundaryAfterNode(node); + sc = boundary.node; + so = boundary.offset; + } + + // Check none of the range is read-only + iterateSubtree(iterator, assertNodeNotReadOnly); + + iterator.reset(); + + // Remove the content + var returnValue = remover(iterator); + iterator.detach(); + + // Move to the new position + boundaryUpdater(this, sc, so, sc, so); + + return returnValue; + }; + } + + function createPrototypeRange(constructor, boundaryUpdater) { + function createBeforeAfterNodeSetter(isBefore, isStart) { + return function(node) { + assertValidNodeType(node, beforeAfterNodeTypes); + assertValidNodeType(getRootContainer(node), rootContainerNodeTypes); + + var boundary = (isBefore ? getBoundaryBeforeNode : getBoundaryAfterNode)(node); + (isStart ? setRangeStart : setRangeEnd)(this, boundary.node, boundary.offset); + }; + } + + function setRangeStart(range, node, offset) { + var ec = range.endContainer, eo = range.endOffset; + if (node !== range.startContainer || offset !== range.startOffset) { + // Check the root containers of the range and the new boundary, and also check whether the new boundary + // is after the current end. In either case, collapse the range to the new position + if (getRootContainer(node) != getRootContainer(ec) || comparePoints(node, offset, ec, eo) == 1) { + ec = node; + eo = offset; + } + boundaryUpdater(range, node, offset, ec, eo); + } + } + + function setRangeEnd(range, node, offset) { + var sc = range.startContainer, so = range.startOffset; + if (node !== range.endContainer || offset !== range.endOffset) { + // Check the root containers of the range and the new boundary, and also check whether the new boundary + // is after the current end. In either case, collapse the range to the new position + if (getRootContainer(node) != getRootContainer(sc) || comparePoints(node, offset, sc, so) == -1) { + sc = node; + so = offset; + } + boundaryUpdater(range, sc, so, node, offset); + } + } + + // Set up inheritance + var F = function() {}; + F.prototype = api.rangePrototype; + constructor.prototype = new F(); + + util.extend(constructor.prototype, { + setStart: function(node, offset) { + assertNoDocTypeNotationEntityAncestor(node, true); + assertValidOffset(node, offset); + + setRangeStart(this, node, offset); + }, + + setEnd: function(node, offset) { + assertNoDocTypeNotationEntityAncestor(node, true); + assertValidOffset(node, offset); + + setRangeEnd(this, node, offset); + }, + + /** + * Convenience method to set a range's start and end boundaries. Overloaded as follows: + * - Two parameters (node, offset) creates a collapsed range at that position + * - Three parameters (node, startOffset, endOffset) creates a range contained with node starting at + * startOffset and ending at endOffset + * - Four parameters (startNode, startOffset, endNode, endOffset) creates a range starting at startOffset in + * startNode and ending at endOffset in endNode + */ + setStartAndEnd: function() { + var args = arguments; + var sc = args[0], so = args[1], ec = sc, eo = so; + + switch (args.length) { + case 3: + eo = args[2]; + break; + case 4: + ec = args[2]; + eo = args[3]; + break; + } + + boundaryUpdater(this, sc, so, ec, eo); + }, + + setBoundary: function(node, offset, isStart) { + this["set" + (isStart ? "Start" : "End")](node, offset); + }, + + setStartBefore: createBeforeAfterNodeSetter(true, true), + setStartAfter: createBeforeAfterNodeSetter(false, true), + setEndBefore: createBeforeAfterNodeSetter(true, false), + setEndAfter: createBeforeAfterNodeSetter(false, false), + + collapse: function(isStart) { + assertRangeValid(this); + if (isStart) { + boundaryUpdater(this, this.startContainer, this.startOffset, this.startContainer, this.startOffset); + } else { + boundaryUpdater(this, this.endContainer, this.endOffset, this.endContainer, this.endOffset); + } + }, + + selectNodeContents: function(node) { + assertNoDocTypeNotationEntityAncestor(node, true); + + boundaryUpdater(this, node, 0, node, getNodeLength(node)); + }, + + selectNode: function(node) { + assertNoDocTypeNotationEntityAncestor(node, false); + assertValidNodeType(node, beforeAfterNodeTypes); + + var start = getBoundaryBeforeNode(node), end = getBoundaryAfterNode(node); + boundaryUpdater(this, start.node, start.offset, end.node, end.offset); + }, + + extractContents: createRangeContentRemover(extractSubtree, boundaryUpdater), + + deleteContents: createRangeContentRemover(deleteSubtree, boundaryUpdater), + + canSurroundContents: function() { + assertRangeValid(this); + assertNodeNotReadOnly(this.startContainer); + assertNodeNotReadOnly(this.endContainer); + + // Check if the contents can be surrounded. Specifically, this means whether the range partially selects + // no non-text nodes. + var iterator = new RangeIterator(this, true); + var boundariesInvalid = (iterator._first && isNonTextPartiallySelected(iterator._first, this) || + (iterator._last && isNonTextPartiallySelected(iterator._last, this))); + iterator.detach(); + return !boundariesInvalid; + }, + + splitBoundaries: function() { + splitRangeBoundaries(this); + }, + + splitBoundariesPreservingPositions: function(positionsToPreserve) { + splitRangeBoundaries(this, positionsToPreserve); + }, + + normalizeBoundaries: function() { + assertRangeValid(this); + + var sc = this.startContainer, so = this.startOffset, ec = this.endContainer, eo = this.endOffset; + + var mergeForward = function(node) { + var sibling = node.nextSibling; + if (sibling && sibling.nodeType == node.nodeType) { + ec = node; + eo = node.length; + node.appendData(sibling.data); + sibling.parentNode.removeChild(sibling); + } + }; + + var mergeBackward = function(node) { + var sibling = node.previousSibling; + if (sibling && sibling.nodeType == node.nodeType) { + sc = node; + var nodeLength = node.length; + so = sibling.length; + node.insertData(0, sibling.data); + sibling.parentNode.removeChild(sibling); + if (sc == ec) { + eo += so; + ec = sc; + } else if (ec == node.parentNode) { + var nodeIndex = getNodeIndex(node); + if (eo == nodeIndex) { + ec = node; + eo = nodeLength; + } else if (eo > nodeIndex) { + eo--; + } + } + } + }; + + var normalizeStart = true; + + if (isCharacterDataNode(ec)) { + if (ec.length == eo) { + mergeForward(ec); + } + } else { + if (eo > 0) { + var endNode = ec.childNodes[eo - 1]; + if (endNode && isCharacterDataNode(endNode)) { + mergeForward(endNode); + } + } + normalizeStart = !this.collapsed; + } + + if (normalizeStart) { + if (isCharacterDataNode(sc)) { + if (so == 0) { + mergeBackward(sc); + } + } else { + if (so < sc.childNodes.length) { + var startNode = sc.childNodes[so]; + if (startNode && isCharacterDataNode(startNode)) { + mergeBackward(startNode); + } + } + } + } else { + sc = ec; + so = eo; + } + + boundaryUpdater(this, sc, so, ec, eo); + }, + + collapseToPoint: function(node, offset) { + assertNoDocTypeNotationEntityAncestor(node, true); + assertValidOffset(node, offset); + this.setStartAndEnd(node, offset); + } + }); + + copyComparisonConstants(constructor); + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Updates commonAncestorContainer and collapsed after boundary change + function updateCollapsedAndCommonAncestor(range) { + range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset); + range.commonAncestorContainer = range.collapsed ? + range.startContainer : dom.getCommonAncestor(range.startContainer, range.endContainer); + } + + function updateBoundaries(range, startContainer, startOffset, endContainer, endOffset) { + range.startContainer = startContainer; + range.startOffset = startOffset; + range.endContainer = endContainer; + range.endOffset = endOffset; + range.document = dom.getDocument(startContainer); + + updateCollapsedAndCommonAncestor(range); + } + + function Range(doc) { + this.startContainer = doc; + this.startOffset = 0; + this.endContainer = doc; + this.endOffset = 0; + this.document = doc; + updateCollapsedAndCommonAncestor(this); + } + + createPrototypeRange(Range, updateBoundaries); + + util.extend(Range, { + rangeProperties: rangeProperties, + RangeIterator: RangeIterator, + copyComparisonConstants: copyComparisonConstants, + createPrototypeRange: createPrototypeRange, + inspect: inspect, + toHtml: rangeToHtml, + getRangeDocument: getRangeDocument, + rangesEqual: function(r1, r2) { + return r1.startContainer === r2.startContainer && + r1.startOffset === r2.startOffset && + r1.endContainer === r2.endContainer && + r1.endOffset === r2.endOffset; + } + }); + + api.DomRange = Range; + }); + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Wrappers for the browser's native DOM Range and/or TextRange implementation + api.createCoreModule("WrappedRange", ["DomRange"], function(api, module) { + var WrappedRange, WrappedTextRange; + var dom = api.dom; + var util = api.util; + var DomPosition = dom.DomPosition; + var DomRange = api.DomRange; + var getBody = dom.getBody; + var getContentDocument = dom.getContentDocument; + var isCharacterDataNode = dom.isCharacterDataNode; + + + /*----------------------------------------------------------------------------------------------------------------*/ + + if (api.features.implementsDomRange) { + // This is a wrapper around the browser's native DOM Range. It has two aims: + // - Provide workarounds for specific browser bugs + // - provide convenient extensions, which are inherited from Rangy's DomRange + + (function() { + var rangeProto; + var rangeProperties = DomRange.rangeProperties; + + function updateRangeProperties(range) { + var i = rangeProperties.length, prop; + while (i--) { + prop = rangeProperties[i]; + range[prop] = range.nativeRange[prop]; + } + // Fix for broken collapsed property in IE 9. + range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset); + } + + function updateNativeRange(range, startContainer, startOffset, endContainer, endOffset) { + var startMoved = (range.startContainer !== startContainer || range.startOffset != startOffset); + var endMoved = (range.endContainer !== endContainer || range.endOffset != endOffset); + var nativeRangeDifferent = !range.equals(range.nativeRange); + + // Always set both boundaries for the benefit of IE9 (see issue 35) + if (startMoved || endMoved || nativeRangeDifferent) { + range.setEnd(endContainer, endOffset); + range.setStart(startContainer, startOffset); + } + } + + var createBeforeAfterNodeSetter; + + WrappedRange = function(range) { + if (!range) { + throw module.createError("WrappedRange: Range must be specified"); + } + this.nativeRange = range; + updateRangeProperties(this); + }; + + DomRange.createPrototypeRange(WrappedRange, updateNativeRange); + + rangeProto = WrappedRange.prototype; + + rangeProto.selectNode = function(node) { + this.nativeRange.selectNode(node); + updateRangeProperties(this); + }; + + rangeProto.cloneContents = function() { + return this.nativeRange.cloneContents(); + }; + + // Due to a long-standing Firefox bug that I have not been able to find a reliable way to detect, + // insertNode() is never delegated to the native range. + + rangeProto.surroundContents = function(node) { + this.nativeRange.surroundContents(node); + updateRangeProperties(this); + }; + + rangeProto.collapse = function(isStart) { + this.nativeRange.collapse(isStart); + updateRangeProperties(this); + }; + + rangeProto.cloneRange = function() { + return new WrappedRange(this.nativeRange.cloneRange()); + }; + + rangeProto.refresh = function() { + updateRangeProperties(this); + }; + + rangeProto.toString = function() { + return this.nativeRange.toString(); + }; + + // Create test range and node for feature detection + + var testTextNode = document.createTextNode("test"); + getBody(document).appendChild(testTextNode); + var range = document.createRange(); + + /*--------------------------------------------------------------------------------------------------------*/ + + // Test for Firefox 2 bug that prevents moving the start of a Range to a point after its current end and + // correct for it + + range.setStart(testTextNode, 0); + range.setEnd(testTextNode, 0); + + try { + range.setStart(testTextNode, 1); + + rangeProto.setStart = function(node, offset) { + this.nativeRange.setStart(node, offset); + updateRangeProperties(this); + }; + + rangeProto.setEnd = function(node, offset) { + this.nativeRange.setEnd(node, offset); + updateRangeProperties(this); + }; + + createBeforeAfterNodeSetter = function(name) { + return function(node) { + this.nativeRange[name](node); + updateRangeProperties(this); + }; + }; + + } catch(ex) { + + rangeProto.setStart = function(node, offset) { + try { + this.nativeRange.setStart(node, offset); + } catch (ex) { + this.nativeRange.setEnd(node, offset); + this.nativeRange.setStart(node, offset); + } + updateRangeProperties(this); + }; + + rangeProto.setEnd = function(node, offset) { + try { + this.nativeRange.setEnd(node, offset); + } catch (ex) { + this.nativeRange.setStart(node, offset); + this.nativeRange.setEnd(node, offset); + } + updateRangeProperties(this); + }; + + createBeforeAfterNodeSetter = function(name, oppositeName) { + return function(node) { + try { + this.nativeRange[name](node); + } catch (ex) { + this.nativeRange[oppositeName](node); + this.nativeRange[name](node); + } + updateRangeProperties(this); + }; + }; + } + + rangeProto.setStartBefore = createBeforeAfterNodeSetter("setStartBefore", "setEndBefore"); + rangeProto.setStartAfter = createBeforeAfterNodeSetter("setStartAfter", "setEndAfter"); + rangeProto.setEndBefore = createBeforeAfterNodeSetter("setEndBefore", "setStartBefore"); + rangeProto.setEndAfter = createBeforeAfterNodeSetter("setEndAfter", "setStartAfter"); + + /*--------------------------------------------------------------------------------------------------------*/ + + // Always use DOM4-compliant selectNodeContents implementation: it's simpler and less code than testing + // whether the native implementation can be trusted + rangeProto.selectNodeContents = function(node) { + this.setStartAndEnd(node, 0, dom.getNodeLength(node)); + }; + + /*--------------------------------------------------------------------------------------------------------*/ + + // Test for and correct WebKit bug that has the behaviour of compareBoundaryPoints round the wrong way for + // constants START_TO_END and END_TO_START: https://bugs.webkit.org/show_bug.cgi?id=20738 + + range.selectNodeContents(testTextNode); + range.setEnd(testTextNode, 3); + + var range2 = document.createRange(); + range2.selectNodeContents(testTextNode); + range2.setEnd(testTextNode, 4); + range2.setStart(testTextNode, 2); + + if (range.compareBoundaryPoints(range.START_TO_END, range2) == -1 && + range.compareBoundaryPoints(range.END_TO_START, range2) == 1) { + // This is the wrong way round, so correct for it + + rangeProto.compareBoundaryPoints = function(type, range) { + range = range.nativeRange || range; + if (type == range.START_TO_END) { + type = range.END_TO_START; + } else if (type == range.END_TO_START) { + type = range.START_TO_END; + } + return this.nativeRange.compareBoundaryPoints(type, range); + }; + } else { + rangeProto.compareBoundaryPoints = function(type, range) { + return this.nativeRange.compareBoundaryPoints(type, range.nativeRange || range); + }; + } + + /*--------------------------------------------------------------------------------------------------------*/ + + // Test for IE 9 deleteContents() and extractContents() bug and correct it. See issue 107. + + var el = document.createElement("div"); + el.innerHTML = "123"; + var textNode = el.firstChild; + var body = getBody(document); + body.appendChild(el); + + range.setStart(textNode, 1); + range.setEnd(textNode, 2); + range.deleteContents(); + + if (textNode.data == "13") { + // Behaviour is correct per DOM4 Range so wrap the browser's implementation of deleteContents() and + // extractContents() + rangeProto.deleteContents = function() { + this.nativeRange.deleteContents(); + updateRangeProperties(this); + }; + + rangeProto.extractContents = function() { + var frag = this.nativeRange.extractContents(); + updateRangeProperties(this); + return frag; + }; + } else { + } + + body.removeChild(el); + body = null; + + /*--------------------------------------------------------------------------------------------------------*/ + + // Test for existence of createContextualFragment and delegate to it if it exists + if (util.isHostMethod(range, "createContextualFragment")) { + rangeProto.createContextualFragment = function(fragmentStr) { + return this.nativeRange.createContextualFragment(fragmentStr); + }; + } + + /*--------------------------------------------------------------------------------------------------------*/ + + // Clean up + getBody(document).removeChild(testTextNode); + + rangeProto.getName = function() { + return "WrappedRange"; + }; + + api.WrappedRange = WrappedRange; + + api.createNativeRange = function(doc) { + doc = getContentDocument(doc, module, "createNativeRange"); + return doc.createRange(); + }; + })(); + } + + if (api.features.implementsTextRange) { + /* + This is a workaround for a bug where IE returns the wrong container element from the TextRange's parentElement() + method. For example, in the following (where pipes denote the selection boundaries): + + + + var range = document.selection.createRange(); + alert(range.parentElement().id); // Should alert "ul" but alerts "b" + + This method returns the common ancestor node of the following: + - the parentElement() of the textRange + - the parentElement() of the textRange after calling collapse(true) + - the parentElement() of the textRange after calling collapse(false) + */ + var getTextRangeContainerElement = function(textRange) { + var parentEl = textRange.parentElement(); + var range = textRange.duplicate(); + range.collapse(true); + var startEl = range.parentElement(); + range = textRange.duplicate(); + range.collapse(false); + var endEl = range.parentElement(); + var startEndContainer = (startEl == endEl) ? startEl : dom.getCommonAncestor(startEl, endEl); + + return startEndContainer == parentEl ? startEndContainer : dom.getCommonAncestor(parentEl, startEndContainer); + }; + + var textRangeIsCollapsed = function(textRange) { + return textRange.compareEndPoints("StartToEnd", textRange) == 0; + }; + + // Gets the boundary of a TextRange expressed as a node and an offset within that node. This function started + // out as an improved version of code found in Tim Cameron Ryan's IERange (http://code.google.com/p/ierange/) + // but has grown, fixing problems with line breaks in preformatted text, adding workaround for IE TextRange + // bugs, handling for inputs and images, plus optimizations. + var getTextRangeBoundaryPosition = function(textRange, wholeRangeContainerElement, isStart, isCollapsed, startInfo) { + var workingRange = textRange.duplicate(); + workingRange.collapse(isStart); + var containerElement = workingRange.parentElement(); + + // Sometimes collapsing a TextRange that's at the start of a text node can move it into the previous node, so + // check for that + if (!dom.isOrIsAncestorOf(wholeRangeContainerElement, containerElement)) { + containerElement = wholeRangeContainerElement; + } + + + // Deal with nodes that cannot "contain rich HTML markup". In practice, this means form inputs, images and + // similar. See http://msdn.microsoft.com/en-us/library/aa703950%28VS.85%29.aspx + if (!containerElement.canHaveHTML) { + var pos = new DomPosition(containerElement.parentNode, dom.getNodeIndex(containerElement)); + return { + boundaryPosition: pos, + nodeInfo: { + nodeIndex: pos.offset, + containerElement: pos.node + } + }; + } + + var workingNode = dom.getDocument(containerElement).createElement("span"); + + // Workaround for HTML5 Shiv's insane violation of document.createElement(). See Rangy issue 104 and HTML5 + // Shiv issue 64: https://github.com/aFarkas/html5shiv/issues/64 + if (workingNode.parentNode) { + workingNode.parentNode.removeChild(workingNode); + } + + var comparison, workingComparisonType = isStart ? "StartToStart" : "StartToEnd"; + var previousNode, nextNode, boundaryPosition, boundaryNode; + var start = (startInfo && startInfo.containerElement == containerElement) ? startInfo.nodeIndex : 0; + var childNodeCount = containerElement.childNodes.length; + var end = childNodeCount; + + // Check end first. Code within the loop assumes that the endth child node of the container is definitely + // after the range boundary. + var nodeIndex = end; + + while (true) { + if (nodeIndex == childNodeCount) { + containerElement.appendChild(workingNode); + } else { + containerElement.insertBefore(workingNode, containerElement.childNodes[nodeIndex]); + } + workingRange.moveToElementText(workingNode); + comparison = workingRange.compareEndPoints(workingComparisonType, textRange); + if (comparison == 0 || start == end) { + break; + } else if (comparison == -1) { + if (end == start + 1) { + // We know the endth child node is after the range boundary, so we must be done. + break; + } else { + start = nodeIndex; + } + } else { + end = (end == start + 1) ? start : nodeIndex; + } + nodeIndex = Math.floor((start + end) / 2); + containerElement.removeChild(workingNode); + } + + + // We've now reached or gone past the boundary of the text range we're interested in + // so have identified the node we want + boundaryNode = workingNode.nextSibling; + + if (comparison == -1 && boundaryNode && isCharacterDataNode(boundaryNode)) { + // This is a character data node (text, comment, cdata). The working range is collapsed at the start of + // the node containing the text range's boundary, so we move the end of the working range to the + // boundary point and measure the length of its text to get the boundary's offset within the node. + workingRange.setEndPoint(isStart ? "EndToStart" : "EndToEnd", textRange); + + var offset; + + if (/[\r\n]/.test(boundaryNode.data)) { + /* + For the particular case of a boundary within a text node containing rendered line breaks (within a +
     element, for example), we need a slightly complicated approach to get the boundary's offset in
    +                        IE. The facts:
    +                        
    +                        - Each line break is represented as \r in the text node's data/nodeValue properties
    +                        - Each line break is represented as \r\n in the TextRange's 'text' property
    +                        - The 'text' property of the TextRange does not contain trailing line breaks
    +                        
    +                        To get round the problem presented by the final fact above, we can use the fact that TextRange's
    +                        moveStart() and moveEnd() methods return the actual number of characters moved, which is not
    +                        necessarily the same as the number of characters it was instructed to move. The simplest approach is
    +                        to use this to store the characters moved when moving both the start and end of the range to the
    +                        start of the document body and subtracting the start offset from the end offset (the
    +                        "move-negative-gazillion" method). However, this is extremely slow when the document is large and
    +                        the range is near the end of it. Clearly doing the mirror image (i.e. moving the range boundaries to
    +                        the end of the document) has the same problem.
    +                        
    +                        Another approach that works is to use moveStart() to move the start boundary of the range up to the
    +                        end boundary one character at a time and incrementing a counter with the value returned by the
    +                        moveStart() call. However, the check for whether the start boundary has reached the end boundary is
    +                        expensive, so this method is slow (although unlike "move-negative-gazillion" is largely unaffected
    +                        by the location of the range within the document).
    +                        
    +                        The approach used below is a hybrid of the two methods above. It uses the fact that a string
    +                        containing the TextRange's 'text' property with each \r\n converted to a single \r character cannot
    +                        be longer than the text of the TextRange, so the start of the range is moved that length initially
    +                        and then a character at a time to make up for any trailing line breaks not contained in the 'text'
    +                        property. This has good performance in most situations compared to the previous two methods.
    +                        */
    +                        var tempRange = workingRange.duplicate();
    +                        var rangeLength = tempRange.text.replace(/\r\n/g, "\r").length;
    +
    +                        offset = tempRange.moveStart("character", rangeLength);
    +                        while ( (comparison = tempRange.compareEndPoints("StartToEnd", tempRange)) == -1) {
    +                            offset++;
    +                            tempRange.moveStart("character", 1);
    +                        }
    +                    } else {
    +                        offset = workingRange.text.length;
    +                    }
    +                    boundaryPosition = new DomPosition(boundaryNode, offset);
    +                } else {
    +
    +                    // If the boundary immediately follows a character data node and this is the end boundary, we should favour
    +                    // a position within that, and likewise for a start boundary preceding a character data node
    +                    previousNode = (isCollapsed || !isStart) && workingNode.previousSibling;
    +                    nextNode = (isCollapsed || isStart) && workingNode.nextSibling;
    +                    if (nextNode && isCharacterDataNode(nextNode)) {
    +                        boundaryPosition = new DomPosition(nextNode, 0);
    +                    } else if (previousNode && isCharacterDataNode(previousNode)) {
    +                        boundaryPosition = new DomPosition(previousNode, previousNode.data.length);
    +                    } else {
    +                        boundaryPosition = new DomPosition(containerElement, dom.getNodeIndex(workingNode));
    +                    }
    +                }
    +
    +                // Clean up
    +                workingNode.parentNode.removeChild(workingNode);
    +
    +                return {
    +                    boundaryPosition: boundaryPosition,
    +                    nodeInfo: {
    +                        nodeIndex: nodeIndex,
    +                        containerElement: containerElement
    +                    }
    +                };
    +            };
    +
    +            // Returns a TextRange representing the boundary of a TextRange expressed as a node and an offset within that
    +            // node. This function started out as an optimized version of code found in Tim Cameron Ryan's IERange
    +            // (http://code.google.com/p/ierange/)
    +            var createBoundaryTextRange = function(boundaryPosition, isStart) {
    +                var boundaryNode, boundaryParent, boundaryOffset = boundaryPosition.offset;
    +                var doc = dom.getDocument(boundaryPosition.node);
    +                var workingNode, childNodes, workingRange = getBody(doc).createTextRange();
    +                var nodeIsDataNode = isCharacterDataNode(boundaryPosition.node);
    +
    +                if (nodeIsDataNode) {
    +                    boundaryNode = boundaryPosition.node;
    +                    boundaryParent = boundaryNode.parentNode;
    +                } else {
    +                    childNodes = boundaryPosition.node.childNodes;
    +                    boundaryNode = (boundaryOffset < childNodes.length) ? childNodes[boundaryOffset] : null;
    +                    boundaryParent = boundaryPosition.node;
    +                }
    +
    +                // Position the range immediately before the node containing the boundary
    +                workingNode = doc.createElement("span");
    +
    +                // Making the working element non-empty element persuades IE to consider the TextRange boundary to be within
    +                // the element rather than immediately before or after it
    +                workingNode.innerHTML = "&#feff;";
    +
    +                // insertBefore is supposed to work like appendChild if the second parameter is null. However, a bug report
    +                // for IERange suggests that it can crash the browser: http://code.google.com/p/ierange/issues/detail?id=12
    +                if (boundaryNode) {
    +                    boundaryParent.insertBefore(workingNode, boundaryNode);
    +                } else {
    +                    boundaryParent.appendChild(workingNode);
    +                }
    +
    +                workingRange.moveToElementText(workingNode);
    +                workingRange.collapse(!isStart);
    +
    +                // Clean up
    +                boundaryParent.removeChild(workingNode);
    +
    +                // Move the working range to the text offset, if required
    +                if (nodeIsDataNode) {
    +                    workingRange[isStart ? "moveStart" : "moveEnd"]("character", boundaryOffset);
    +                }
    +
    +                return workingRange;
    +            };
    +
    +            /*------------------------------------------------------------------------------------------------------------*/
    +
    +            // This is a wrapper around a TextRange, providing full DOM Range functionality using rangy's DomRange as a
    +            // prototype
    +
    +            WrappedTextRange = function(textRange) {
    +                this.textRange = textRange;
    +                this.refresh();
    +            };
    +
    +            WrappedTextRange.prototype = new DomRange(document);
    +
    +            WrappedTextRange.prototype.refresh = function() {
    +                var start, end, startBoundary;
    +
    +                // TextRange's parentElement() method cannot be trusted. getTextRangeContainerElement() works around that.
    +                var rangeContainerElement = getTextRangeContainerElement(this.textRange);
    +
    +                if (textRangeIsCollapsed(this.textRange)) {
    +                    end = start = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, true,
    +                        true).boundaryPosition;
    +                } else {
    +                    startBoundary = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, true, false);
    +                    start = startBoundary.boundaryPosition;
    +
    +                    // An optimization used here is that if the start and end boundaries have the same parent element, the
    +                    // search scope for the end boundary can be limited to exclude the portion of the element that precedes
    +                    // the start boundary
    +                    end = getTextRangeBoundaryPosition(this.textRange, rangeContainerElement, false, false,
    +                        startBoundary.nodeInfo).boundaryPosition;
    +                }
    +
    +                this.setStart(start.node, start.offset);
    +                this.setEnd(end.node, end.offset);
    +            };
    +
    +            WrappedTextRange.prototype.getName = function() {
    +                return "WrappedTextRange";
    +            };
    +
    +            DomRange.copyComparisonConstants(WrappedTextRange);
    +
    +            var rangeToTextRange = function(range) {
    +                if (range.collapsed) {
    +                    return createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);
    +                } else {
    +                    var startRange = createBoundaryTextRange(new DomPosition(range.startContainer, range.startOffset), true);
    +                    var endRange = createBoundaryTextRange(new DomPosition(range.endContainer, range.endOffset), false);
    +                    var textRange = getBody( DomRange.getRangeDocument(range) ).createTextRange();
    +                    textRange.setEndPoint("StartToStart", startRange);
    +                    textRange.setEndPoint("EndToEnd", endRange);
    +                    return textRange;
    +                }
    +            };
    +
    +            WrappedTextRange.rangeToTextRange = rangeToTextRange;
    +
    +            WrappedTextRange.prototype.toTextRange = function() {
    +                return rangeToTextRange(this);
    +            };
    +
    +            api.WrappedTextRange = WrappedTextRange;
    +
    +            // IE 9 and above have both implementations and Rangy makes both available. The next few lines sets which
    +            // implementation to use by default.
    +            if (!api.features.implementsDomRange || api.config.preferTextRange) {
    +                // Add WrappedTextRange as the Range property of the global object to allow expression like Range.END_TO_END to work
    +                var globalObj = (function() { return this; })();
    +                if (typeof globalObj.Range == "undefined") {
    +                    globalObj.Range = WrappedTextRange;
    +                }
    +
    +                api.createNativeRange = function(doc) {
    +                    doc = getContentDocument(doc, module, "createNativeRange");
    +                    return getBody(doc).createTextRange();
    +                };
    +
    +                api.WrappedRange = WrappedTextRange;
    +            }
    +        }
    +
    +        api.createRange = function(doc) {
    +            doc = getContentDocument(doc, module, "createRange");
    +            return new api.WrappedRange(api.createNativeRange(doc));
    +        };
    +
    +        api.createRangyRange = function(doc) {
    +            doc = getContentDocument(doc, module, "createRangyRange");
    +            return new DomRange(doc);
    +        };
    +
    +        api.createIframeRange = function(iframeEl) {
    +            module.deprecationNotice("createIframeRange()", "createRange(iframeEl)");
    +            return api.createRange(iframeEl);
    +        };
    +
    +        api.createIframeRangyRange = function(iframeEl) {
    +            module.deprecationNotice("createIframeRangyRange()", "createRangyRange(iframeEl)");
    +            return api.createRangyRange(iframeEl);
    +        };
    +
    +        api.addShimListener(function(win) {
    +            var doc = win.document;
    +            if (typeof doc.createRange == "undefined") {
    +                doc.createRange = function() {
    +                    return api.createRange(doc);
    +                };
    +            }
    +            doc = win = null;
    +        });
    +    });
    +
    +    /*----------------------------------------------------------------------------------------------------------------*/
    +
    +    // This module creates a selection object wrapper that conforms as closely as possible to the Selection specification
    +    // in the HTML Editing spec (http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#selections)
    +    api.createCoreModule("WrappedSelection", ["DomRange", "WrappedRange"], function(api, module) {
    +        api.config.checkSelectionRanges = true;
    +
    +        var BOOLEAN = "boolean";
    +        var NUMBER = "number";
    +        var dom = api.dom;
    +        var util = api.util;
    +        var isHostMethod = util.isHostMethod;
    +        var DomRange = api.DomRange;
    +        var WrappedRange = api.WrappedRange;
    +        var DOMException = api.DOMException;
    +        var DomPosition = dom.DomPosition;
    +        var getNativeSelection;
    +        var selectionIsCollapsed;
    +        var features = api.features;
    +        var CONTROL = "Control";
    +        var getDocument = dom.getDocument;
    +        var getBody = dom.getBody;
    +        var rangesEqual = DomRange.rangesEqual;
    +
    +
    +        // Utility function to support direction parameters in the API that may be a string ("backward" or "forward") or a
    +        // Boolean (true for backwards).
    +        function isDirectionBackward(dir) {
    +            return (typeof dir == "string") ? /^backward(s)?$/i.test(dir) : !!dir;
    +        }
    +
    +        function getWindow(win, methodName) {
    +            if (!win) {
    +                return window;
    +            } else if (dom.isWindow(win)) {
    +                return win;
    +            } else if (win instanceof WrappedSelection) {
    +                return win.win;
    +            } else {
    +                var doc = dom.getContentDocument(win, module, methodName);
    +                return dom.getWindow(doc);
    +            }
    +        }
    +
    +        function getWinSelection(winParam) {
    +            return getWindow(winParam, "getWinSelection").getSelection();
    +        }
    +
    +        function getDocSelection(winParam) {
    +            return getWindow(winParam, "getDocSelection").document.selection;
    +        }
    +        
    +        function winSelectionIsBackward(sel) {
    +            var backward = false;
    +            if (sel.anchorNode) {
    +                backward = (dom.comparePoints(sel.anchorNode, sel.anchorOffset, sel.focusNode, sel.focusOffset) == 1);
    +            }
    +            return backward;
    +        }
    +
    +        // Test for the Range/TextRange and Selection features required
    +        // Test for ability to retrieve selection
    +        var implementsWinGetSelection = isHostMethod(window, "getSelection"),
    +            implementsDocSelection = util.isHostObject(document, "selection");
    +
    +        features.implementsWinGetSelection = implementsWinGetSelection;
    +        features.implementsDocSelection = implementsDocSelection;
    +
    +        var useDocumentSelection = implementsDocSelection && (!implementsWinGetSelection || api.config.preferTextRange);
    +
    +        if (useDocumentSelection) {
    +            getNativeSelection = getDocSelection;
    +            api.isSelectionValid = function(winParam) {
    +                var doc = getWindow(winParam, "isSelectionValid").document, nativeSel = doc.selection;
    +
    +                // Check whether the selection TextRange is actually contained within the correct document
    +                return (nativeSel.type != "None" || getDocument(nativeSel.createRange().parentElement()) == doc);
    +            };
    +        } else if (implementsWinGetSelection) {
    +            getNativeSelection = getWinSelection;
    +            api.isSelectionValid = function() {
    +                return true;
    +            };
    +        } else {
    +            module.fail("Neither document.selection or window.getSelection() detected.");
    +        }
    +
    +        api.getNativeSelection = getNativeSelection;
    +
    +        var testSelection = getNativeSelection();
    +        var testRange = api.createNativeRange(document);
    +        var body = getBody(document);
    +
    +        // Obtaining a range from a selection
    +        var selectionHasAnchorAndFocus = util.areHostProperties(testSelection,
    +            ["anchorNode", "focusNode", "anchorOffset", "focusOffset"]);
    +
    +        features.selectionHasAnchorAndFocus = selectionHasAnchorAndFocus;
    +
    +        // Test for existence of native selection extend() method
    +        var selectionHasExtend = isHostMethod(testSelection, "extend");
    +        features.selectionHasExtend = selectionHasExtend;
    +        
    +        // Test if rangeCount exists
    +        var selectionHasRangeCount = (typeof testSelection.rangeCount == NUMBER);
    +        features.selectionHasRangeCount = selectionHasRangeCount;
    +
    +        var selectionSupportsMultipleRanges = false;
    +        var collapsedNonEditableSelectionsSupported = true;
    +
    +        var addRangeBackwardToNative = selectionHasExtend ?
    +            function(nativeSelection, range) {
    +                var doc = DomRange.getRangeDocument(range);
    +                var endRange = api.createRange(doc);
    +                endRange.collapseToPoint(range.endContainer, range.endOffset);
    +                nativeSelection.addRange(getNativeRange(endRange));
    +                nativeSelection.extend(range.startContainer, range.startOffset);
    +            } : null;
    +
    +        if (util.areHostMethods(testSelection, ["addRange", "getRangeAt", "removeAllRanges"]) &&
    +                typeof testSelection.rangeCount == NUMBER && features.implementsDomRange) {
    +
    +            (function() {
    +                // Previously an iframe was used but this caused problems in some circumstances in IE, so tests are
    +                // performed on the current document's selection. See issue 109.
    +
    +                // Note also that if a selection previously existed, it is wiped by these tests. This should usually be fine
    +                // because initialization usually happens when the document loads, but could be a problem for a script that
    +                // loads and initializes Rangy later. If anyone complains, code could be added to save and restore the
    +                // selection.
    +                var sel = window.getSelection();
    +                if (sel) {
    +                    // Store the current selection
    +                    var originalSelectionRangeCount = sel.rangeCount;
    +                    var selectionHasMultipleRanges = (originalSelectionRangeCount > 1);
    +                    var originalSelectionRanges = [];
    +                    var originalSelectionBackward = winSelectionIsBackward(sel); 
    +                    for (var i = 0; i < originalSelectionRangeCount; ++i) {
    +                        originalSelectionRanges[i] = sel.getRangeAt(i);
    +                    }
    +                    
    +                    // Create some test elements
    +                    var body = getBody(document);
    +                    var testEl = body.appendChild( document.createElement("div") );
    +                    testEl.contentEditable = "false";
    +                    var textNode = testEl.appendChild( document.createTextNode("\u00a0\u00a0\u00a0") );
    +
    +                    // Test whether the native selection will allow a collapsed selection within a non-editable element
    +                    var r1 = document.createRange();
    +
    +                    r1.setStart(textNode, 1);
    +                    r1.collapse(true);
    +                    sel.addRange(r1);
    +                    collapsedNonEditableSelectionsSupported = (sel.rangeCount == 1);
    +                    sel.removeAllRanges();
    +
    +                    // Test whether the native selection is capable of supporting multiple ranges.
    +                    if (!selectionHasMultipleRanges) {
    +                        // Doing the original feature test here in Chrome 36 (and presumably later versions) prints a
    +                        // console error of "Discontiguous selection is not supported." that cannot be suppressed. There's
    +                        // nothing we can do about this while retaining the feature test so we have to resort to a browser
    +                        // sniff. I'm not happy about it. See
    +                        // https://code.google.com/p/chromium/issues/detail?id=399791
    +                        var chromeMatch = window.navigator.appVersion.match(/Chrome\/(.*?) /);
    +                        if (chromeMatch && parseInt(chromeMatch[1]) >= 36) {
    +                            selectionSupportsMultipleRanges = false;
    +                        } else {
    +                            var r2 = r1.cloneRange();
    +                            r1.setStart(textNode, 0);
    +                            r2.setEnd(textNode, 3);
    +                            r2.setStart(textNode, 2);
    +                            sel.addRange(r1);
    +                            sel.addRange(r2);
    +                            selectionSupportsMultipleRanges = (sel.rangeCount == 2);
    +                        }
    +                    }
    +
    +                    // Clean up
    +                    body.removeChild(testEl);
    +                    sel.removeAllRanges();
    +
    +                    for (i = 0; i < originalSelectionRangeCount; ++i) {
    +                        if (i == 0 && originalSelectionBackward) {
    +                            if (addRangeBackwardToNative) {
    +                                addRangeBackwardToNative(sel, originalSelectionRanges[i]);
    +                            } else {
    +                                api.warn("Rangy initialization: original selection was backwards but selection has been restored forwards because the browser does not support Selection.extend");
    +                                sel.addRange(originalSelectionRanges[i]);
    +                            }
    +                        } else {
    +                            sel.addRange(originalSelectionRanges[i]);
    +                        }
    +                    }
    +                }
    +            })();
    +        }
    +
    +        features.selectionSupportsMultipleRanges = selectionSupportsMultipleRanges;
    +        features.collapsedNonEditableSelectionsSupported = collapsedNonEditableSelectionsSupported;
    +
    +        // ControlRanges
    +        var implementsControlRange = false, testControlRange;
    +
    +        if (body && isHostMethod(body, "createControlRange")) {
    +            testControlRange = body.createControlRange();
    +            if (util.areHostProperties(testControlRange, ["item", "add"])) {
    +                implementsControlRange = true;
    +            }
    +        }
    +        features.implementsControlRange = implementsControlRange;
    +
    +        // Selection collapsedness
    +        if (selectionHasAnchorAndFocus) {
    +            selectionIsCollapsed = function(sel) {
    +                return sel.anchorNode === sel.focusNode && sel.anchorOffset === sel.focusOffset;
    +            };
    +        } else {
    +            selectionIsCollapsed = function(sel) {
    +                return sel.rangeCount ? sel.getRangeAt(sel.rangeCount - 1).collapsed : false;
    +            };
    +        }
    +
    +        function updateAnchorAndFocusFromRange(sel, range, backward) {
    +            var anchorPrefix = backward ? "end" : "start", focusPrefix = backward ? "start" : "end";
    +            sel.anchorNode = range[anchorPrefix + "Container"];
    +            sel.anchorOffset = range[anchorPrefix + "Offset"];
    +            sel.focusNode = range[focusPrefix + "Container"];
    +            sel.focusOffset = range[focusPrefix + "Offset"];
    +        }
    +
    +        function updateAnchorAndFocusFromNativeSelection(sel) {
    +            var nativeSel = sel.nativeSelection;
    +            sel.anchorNode = nativeSel.anchorNode;
    +            sel.anchorOffset = nativeSel.anchorOffset;
    +            sel.focusNode = nativeSel.focusNode;
    +            sel.focusOffset = nativeSel.focusOffset;
    +        }
    +
    +        function updateEmptySelection(sel) {
    +            sel.anchorNode = sel.focusNode = null;
    +            sel.anchorOffset = sel.focusOffset = 0;
    +            sel.rangeCount = 0;
    +            sel.isCollapsed = true;
    +            sel._ranges.length = 0;
    +        }
    +
    +        function getNativeRange(range) {
    +            var nativeRange;
    +            if (range instanceof DomRange) {
    +                nativeRange = api.createNativeRange(range.getDocument());
    +                nativeRange.setEnd(range.endContainer, range.endOffset);
    +                nativeRange.setStart(range.startContainer, range.startOffset);
    +            } else if (range instanceof WrappedRange) {
    +                nativeRange = range.nativeRange;
    +            } else if (features.implementsDomRange && (range instanceof dom.getWindow(range.startContainer).Range)) {
    +                nativeRange = range;
    +            }
    +            return nativeRange;
    +        }
    +
    +        function rangeContainsSingleElement(rangeNodes) {
    +            if (!rangeNodes.length || rangeNodes[0].nodeType != 1) {
    +                return false;
    +            }
    +            for (var i = 1, len = rangeNodes.length; i < len; ++i) {
    +                if (!dom.isAncestorOf(rangeNodes[0], rangeNodes[i])) {
    +                    return false;
    +                }
    +            }
    +            return true;
    +        }
    +
    +        function getSingleElementFromRange(range) {
    +            var nodes = range.getNodes();
    +            if (!rangeContainsSingleElement(nodes)) {
    +                throw module.createError("getSingleElementFromRange: range " + range.inspect() + " did not consist of a single element");
    +            }
    +            return nodes[0];
    +        }
    +
    +        // Simple, quick test which only needs to distinguish between a TextRange and a ControlRange
    +        function isTextRange(range) {
    +            return !!range && typeof range.text != "undefined";
    +        }
    +
    +        function updateFromTextRange(sel, range) {
    +            // Create a Range from the selected TextRange
    +            var wrappedRange = new WrappedRange(range);
    +            sel._ranges = [wrappedRange];
    +
    +            updateAnchorAndFocusFromRange(sel, wrappedRange, false);
    +            sel.rangeCount = 1;
    +            sel.isCollapsed = wrappedRange.collapsed;
    +        }
    +
    +        function updateControlSelection(sel) {
    +            // Update the wrapped selection based on what's now in the native selection
    +            sel._ranges.length = 0;
    +            if (sel.docSelection.type == "None") {
    +                updateEmptySelection(sel);
    +            } else {
    +                var controlRange = sel.docSelection.createRange();
    +                if (isTextRange(controlRange)) {
    +                    // This case (where the selection type is "Control" and calling createRange() on the selection returns
    +                    // a TextRange) can happen in IE 9. It happens, for example, when all elements in the selected
    +                    // ControlRange have been removed from the ControlRange and removed from the document.
    +                    updateFromTextRange(sel, controlRange);
    +                } else {
    +                    sel.rangeCount = controlRange.length;
    +                    var range, doc = getDocument(controlRange.item(0));
    +                    for (var i = 0; i < sel.rangeCount; ++i) {
    +                        range = api.createRange(doc);
    +                        range.selectNode(controlRange.item(i));
    +                        sel._ranges.push(range);
    +                    }
    +                    sel.isCollapsed = sel.rangeCount == 1 && sel._ranges[0].collapsed;
    +                    updateAnchorAndFocusFromRange(sel, sel._ranges[sel.rangeCount - 1], false);
    +                }
    +            }
    +        }
    +
    +        function addRangeToControlSelection(sel, range) {
    +            var controlRange = sel.docSelection.createRange();
    +            var rangeElement = getSingleElementFromRange(range);
    +
    +            // Create a new ControlRange containing all the elements in the selected ControlRange plus the element
    +            // contained by the supplied range
    +            var doc = getDocument(controlRange.item(0));
    +            var newControlRange = getBody(doc).createControlRange();
    +            for (var i = 0, len = controlRange.length; i < len; ++i) {
    +                newControlRange.add(controlRange.item(i));
    +            }
    +            try {
    +                newControlRange.add(rangeElement);
    +            } catch (ex) {
    +                throw module.createError("addRange(): Element within the specified Range could not be added to control selection (does it have layout?)");
    +            }
    +            newControlRange.select();
    +
    +            // Update the wrapped selection based on what's now in the native selection
    +            updateControlSelection(sel);
    +        }
    +
    +        var getSelectionRangeAt;
    +
    +        if (isHostMethod(testSelection, "getRangeAt")) {
    +            // try/catch is present because getRangeAt() must have thrown an error in some browser and some situation.
    +            // Unfortunately, I didn't write a comment about the specifics and am now scared to take it out. Let that be a
    +            // lesson to us all, especially me.
    +            getSelectionRangeAt = function(sel, index) {
    +                try {
    +                    return sel.getRangeAt(index);
    +                } catch (ex) {
    +                    return null;
    +                }
    +            };
    +        } else if (selectionHasAnchorAndFocus) {
    +            getSelectionRangeAt = function(sel) {
    +                var doc = getDocument(sel.anchorNode);
    +                var range = api.createRange(doc);
    +                range.setStartAndEnd(sel.anchorNode, sel.anchorOffset, sel.focusNode, sel.focusOffset);
    +
    +                // Handle the case when the selection was selected backwards (from the end to the start in the
    +                // document)
    +                if (range.collapsed !== this.isCollapsed) {
    +                    range.setStartAndEnd(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset);
    +                }
    +
    +                return range;
    +            };
    +        }
    +
    +        function WrappedSelection(selection, docSelection, win) {
    +            this.nativeSelection = selection;
    +            this.docSelection = docSelection;
    +            this._ranges = [];
    +            this.win = win;
    +            this.refresh();
    +        }
    +
    +        WrappedSelection.prototype = api.selectionPrototype;
    +
    +        function deleteProperties(sel) {
    +            sel.win = sel.anchorNode = sel.focusNode = sel._ranges = null;
    +            sel.rangeCount = sel.anchorOffset = sel.focusOffset = 0;
    +            sel.detached = true;
    +        }
    +
    +        var cachedRangySelections = [];
    +
    +        function actOnCachedSelection(win, action) {
    +            var i = cachedRangySelections.length, cached, sel;
    +            while (i--) {
    +                cached = cachedRangySelections[i];
    +                sel = cached.selection;
    +                if (action == "deleteAll") {
    +                    deleteProperties(sel);
    +                } else if (cached.win == win) {
    +                    if (action == "delete") {
    +                        cachedRangySelections.splice(i, 1);
    +                        return true;
    +                    } else {
    +                        return sel;
    +                    }
    +                }
    +            }
    +            if (action == "deleteAll") {
    +                cachedRangySelections.length = 0;
    +            }
    +            return null;
    +        }
    +
    +        var getSelection = function(win) {
    +            // Check if the parameter is a Rangy Selection object
    +            if (win && win instanceof WrappedSelection) {
    +                win.refresh();
    +                return win;
    +            }
    +
    +            win = getWindow(win, "getNativeSelection");
    +
    +            var sel = actOnCachedSelection(win);
    +            var nativeSel = getNativeSelection(win), docSel = implementsDocSelection ? getDocSelection(win) : null;
    +            if (sel) {
    +                sel.nativeSelection = nativeSel;
    +                sel.docSelection = docSel;
    +                sel.refresh();
    +            } else {
    +                sel = new WrappedSelection(nativeSel, docSel, win);
    +                cachedRangySelections.push( { win: win, selection: sel } );
    +            }
    +            return sel;
    +        };
    +
    +        api.getSelection = getSelection;
    +
    +        api.getIframeSelection = function(iframeEl) {
    +            module.deprecationNotice("getIframeSelection()", "getSelection(iframeEl)");
    +            return api.getSelection(dom.getIframeWindow(iframeEl));
    +        };
    +
    +        var selProto = WrappedSelection.prototype;
    +
    +        function createControlSelection(sel, ranges) {
    +            // Ensure that the selection becomes of type "Control"
    +            var doc = getDocument(ranges[0].startContainer);
    +            var controlRange = getBody(doc).createControlRange();
    +            for (var i = 0, el, len = ranges.length; i < len; ++i) {
    +                el = getSingleElementFromRange(ranges[i]);
    +                try {
    +                    controlRange.add(el);
    +                } catch (ex) {
    +                    throw module.createError("setRanges(): Element within one of the specified Ranges could not be added to control selection (does it have layout?)");
    +                }
    +            }
    +            controlRange.select();
    +
    +            // Update the wrapped selection based on what's now in the native selection
    +            updateControlSelection(sel);
    +        }
    +
    +        // Selecting a range
    +        if (!useDocumentSelection && selectionHasAnchorAndFocus && util.areHostMethods(testSelection, ["removeAllRanges", "addRange"])) {
    +            selProto.removeAllRanges = function() {
    +                this.nativeSelection.removeAllRanges();
    +                updateEmptySelection(this);
    +            };
    +
    +            var addRangeBackward = function(sel, range) {
    +                addRangeBackwardToNative(sel.nativeSelection, range);
    +                sel.refresh();
    +            };
    +
    +            if (selectionHasRangeCount) {
    +                selProto.addRange = function(range, direction) {
    +                    if (implementsControlRange && implementsDocSelection && this.docSelection.type == CONTROL) {
    +                        addRangeToControlSelection(this, range);
    +                    } else {
    +                        if (isDirectionBackward(direction) && selectionHasExtend) {
    +                            addRangeBackward(this, range);
    +                        } else {
    +                            var previousRangeCount;
    +                            if (selectionSupportsMultipleRanges) {
    +                                previousRangeCount = this.rangeCount;
    +                            } else {
    +                                this.removeAllRanges();
    +                                previousRangeCount = 0;
    +                            }
    +                            // Clone the native range so that changing the selected range does not affect the selection.
    +                            // This is contrary to the spec but is the only way to achieve consistency between browsers. See
    +                            // issue 80.
    +                            this.nativeSelection.addRange(getNativeRange(range).cloneRange());
    +
    +                            // Check whether adding the range was successful
    +                            this.rangeCount = this.nativeSelection.rangeCount;
    +
    +                            if (this.rangeCount == previousRangeCount + 1) {
    +                                // The range was added successfully
    +
    +                                // Check whether the range that we added to the selection is reflected in the last range extracted from
    +                                // the selection
    +                                if (api.config.checkSelectionRanges) {
    +                                    var nativeRange = getSelectionRangeAt(this.nativeSelection, this.rangeCount - 1);
    +                                    if (nativeRange && !rangesEqual(nativeRange, range)) {
    +                                        // Happens in WebKit with, for example, a selection placed at the start of a text node
    +                                        range = new WrappedRange(nativeRange);
    +                                    }
    +                                }
    +                                this._ranges[this.rangeCount - 1] = range;
    +                                updateAnchorAndFocusFromRange(this, range, selectionIsBackward(this.nativeSelection));
    +                                this.isCollapsed = selectionIsCollapsed(this);
    +                            } else {
    +                                // The range was not added successfully. The simplest thing is to refresh
    +                                this.refresh();
    +                            }
    +                        }
    +                    }
    +                };
    +            } else {
    +                selProto.addRange = function(range, direction) {
    +                    if (isDirectionBackward(direction) && selectionHasExtend) {
    +                        addRangeBackward(this, range);
    +                    } else {
    +                        this.nativeSelection.addRange(getNativeRange(range));
    +                        this.refresh();
    +                    }
    +                };
    +            }
    +
    +            selProto.setRanges = function(ranges) {
    +                if (implementsControlRange && implementsDocSelection && ranges.length > 1) {
    +                    createControlSelection(this, ranges);
    +                } else {
    +                    this.removeAllRanges();
    +                    for (var i = 0, len = ranges.length; i < len; ++i) {
    +                        this.addRange(ranges[i]);
    +                    }
    +                }
    +            };
    +        } else if (isHostMethod(testSelection, "empty") && isHostMethod(testRange, "select") &&
    +                   implementsControlRange && useDocumentSelection) {
    +
    +            selProto.removeAllRanges = function() {
    +                // Added try/catch as fix for issue #21
    +                try {
    +                    this.docSelection.empty();
    +
    +                    // Check for empty() not working (issue #24)
    +                    if (this.docSelection.type != "None") {
    +                        // Work around failure to empty a control selection by instead selecting a TextRange and then
    +                        // calling empty()
    +                        var doc;
    +                        if (this.anchorNode) {
    +                            doc = getDocument(this.anchorNode);
    +                        } else if (this.docSelection.type == CONTROL) {
    +                            var controlRange = this.docSelection.createRange();
    +                            if (controlRange.length) {
    +                                doc = getDocument( controlRange.item(0) );
    +                            }
    +                        }
    +                        if (doc) {
    +                            var textRange = getBody(doc).createTextRange();
    +                            textRange.select();
    +                            this.docSelection.empty();
    +                        }
    +                    }
    +                } catch(ex) {}
    +                updateEmptySelection(this);
    +            };
    +
    +            selProto.addRange = function(range) {
    +                if (this.docSelection.type == CONTROL) {
    +                    addRangeToControlSelection(this, range);
    +                } else {
    +                    api.WrappedTextRange.rangeToTextRange(range).select();
    +                    this._ranges[0] = range;
    +                    this.rangeCount = 1;
    +                    this.isCollapsed = this._ranges[0].collapsed;
    +                    updateAnchorAndFocusFromRange(this, range, false);
    +                }
    +            };
    +
    +            selProto.setRanges = function(ranges) {
    +                this.removeAllRanges();
    +                var rangeCount = ranges.length;
    +                if (rangeCount > 1) {
    +                    createControlSelection(this, ranges);
    +                } else if (rangeCount) {
    +                    this.addRange(ranges[0]);
    +                }
    +            };
    +        } else {
    +            module.fail("No means of selecting a Range or TextRange was found");
    +            return false;
    +        }
    +
    +        selProto.getRangeAt = function(index) {
    +            if (index < 0 || index >= this.rangeCount) {
    +                throw new DOMException("INDEX_SIZE_ERR");
    +            } else {
    +                // Clone the range to preserve selection-range independence. See issue 80.
    +                return this._ranges[index].cloneRange();
    +            }
    +        };
    +
    +        var refreshSelection;
    +
    +        if (useDocumentSelection) {
    +            refreshSelection = function(sel) {
    +                var range;
    +                if (api.isSelectionValid(sel.win)) {
    +                    range = sel.docSelection.createRange();
    +                } else {
    +                    range = getBody(sel.win.document).createTextRange();
    +                    range.collapse(true);
    +                }
    +
    +                if (sel.docSelection.type == CONTROL) {
    +                    updateControlSelection(sel);
    +                } else if (isTextRange(range)) {
    +                    updateFromTextRange(sel, range);
    +                } else {
    +                    updateEmptySelection(sel);
    +                }
    +            };
    +        } else if (isHostMethod(testSelection, "getRangeAt") && typeof testSelection.rangeCount == NUMBER) {
    +            refreshSelection = function(sel) {
    +                if (implementsControlRange && implementsDocSelection && sel.docSelection.type == CONTROL) {
    +                    updateControlSelection(sel);
    +                } else {
    +                    sel._ranges.length = sel.rangeCount = sel.nativeSelection.rangeCount;
    +                    if (sel.rangeCount) {
    +                        for (var i = 0, len = sel.rangeCount; i < len; ++i) {
    +                            sel._ranges[i] = new api.WrappedRange(sel.nativeSelection.getRangeAt(i));
    +                        }
    +                        updateAnchorAndFocusFromRange(sel, sel._ranges[sel.rangeCount - 1], selectionIsBackward(sel.nativeSelection));
    +                        sel.isCollapsed = selectionIsCollapsed(sel);
    +                    } else {
    +                        updateEmptySelection(sel);
    +                    }
    +                }
    +            };
    +        } else if (selectionHasAnchorAndFocus && typeof testSelection.isCollapsed == BOOLEAN && typeof testRange.collapsed == BOOLEAN && features.implementsDomRange) {
    +            refreshSelection = function(sel) {
    +                var range, nativeSel = sel.nativeSelection;
    +                if (nativeSel.anchorNode) {
    +                    range = getSelectionRangeAt(nativeSel, 0);
    +                    sel._ranges = [range];
    +                    sel.rangeCount = 1;
    +                    updateAnchorAndFocusFromNativeSelection(sel);
    +                    sel.isCollapsed = selectionIsCollapsed(sel);
    +                } else {
    +                    updateEmptySelection(sel);
    +                }
    +            };
    +        } else {
    +            module.fail("No means of obtaining a Range or TextRange from the user's selection was found");
    +            return false;
    +        }
    +
    +        selProto.refresh = function(checkForChanges) {
    +            var oldRanges = checkForChanges ? this._ranges.slice(0) : null;
    +            var oldAnchorNode = this.anchorNode, oldAnchorOffset = this.anchorOffset;
    +
    +            refreshSelection(this);
    +            if (checkForChanges) {
    +                // Check the range count first
    +                var i = oldRanges.length;
    +                if (i != this._ranges.length) {
    +                    return true;
    +                }
    +
    +                // Now check the direction. Checking the anchor position is the same is enough since we're checking all the
    +                // ranges after this
    +                if (this.anchorNode != oldAnchorNode || this.anchorOffset != oldAnchorOffset) {
    +                    return true;
    +                }
    +
    +                // Finally, compare each range in turn
    +                while (i--) {
    +                    if (!rangesEqual(oldRanges[i], this._ranges[i])) {
    +                        return true;
    +                    }
    +                }
    +                return false;
    +            }
    +        };
    +
    +        // Removal of a single range
    +        var removeRangeManually = function(sel, range) {
    +            var ranges = sel.getAllRanges();
    +            sel.removeAllRanges();
    +            for (var i = 0, len = ranges.length; i < len; ++i) {
    +                if (!rangesEqual(range, ranges[i])) {
    +                    sel.addRange(ranges[i]);
    +                }
    +            }
    +            if (!sel.rangeCount) {
    +                updateEmptySelection(sel);
    +            }
    +        };
    +
    +        if (implementsControlRange && implementsDocSelection) {
    +            selProto.removeRange = function(range) {
    +                if (this.docSelection.type == CONTROL) {
    +                    var controlRange = this.docSelection.createRange();
    +                    var rangeElement = getSingleElementFromRange(range);
    +
    +                    // Create a new ControlRange containing all the elements in the selected ControlRange minus the
    +                    // element contained by the supplied range
    +                    var doc = getDocument(controlRange.item(0));
    +                    var newControlRange = getBody(doc).createControlRange();
    +                    var el, removed = false;
    +                    for (var i = 0, len = controlRange.length; i < len; ++i) {
    +                        el = controlRange.item(i);
    +                        if (el !== rangeElement || removed) {
    +                            newControlRange.add(controlRange.item(i));
    +                        } else {
    +                            removed = true;
    +                        }
    +                    }
    +                    newControlRange.select();
    +
    +                    // Update the wrapped selection based on what's now in the native selection
    +                    updateControlSelection(this);
    +                } else {
    +                    removeRangeManually(this, range);
    +                }
    +            };
    +        } else {
    +            selProto.removeRange = function(range) {
    +                removeRangeManually(this, range);
    +            };
    +        }
    +
    +        // Detecting if a selection is backward
    +        var selectionIsBackward;
    +        if (!useDocumentSelection && selectionHasAnchorAndFocus && features.implementsDomRange) {
    +            selectionIsBackward = winSelectionIsBackward;
    +
    +            selProto.isBackward = function() {
    +                return selectionIsBackward(this);
    +            };
    +        } else {
    +            selectionIsBackward = selProto.isBackward = function() {
    +                return false;
    +            };
    +        }
    +
    +        // Create an alias for backwards compatibility. From 1.3, everything is "backward" rather than "backwards"
    +        selProto.isBackwards = selProto.isBackward;
    +
    +        // Selection stringifier
    +        // This is conformant to the old HTML5 selections draft spec but differs from WebKit and Mozilla's implementation.
    +        // The current spec does not yet define this method.
    +        selProto.toString = function() {
    +            var rangeTexts = [];
    +            for (var i = 0, len = this.rangeCount; i < len; ++i) {
    +                rangeTexts[i] = "" + this._ranges[i];
    +            }
    +            return rangeTexts.join("");
    +        };
    +
    +        function assertNodeInSameDocument(sel, node) {
    +            if (sel.win.document != getDocument(node)) {
    +                throw new DOMException("WRONG_DOCUMENT_ERR");
    +            }
    +        }
    +
    +        // No current browser conforms fully to the spec for this method, so Rangy's own method is always used
    +        selProto.collapse = function(node, offset) {
    +            assertNodeInSameDocument(this, node);
    +            var range = api.createRange(node);
    +            range.collapseToPoint(node, offset);
    +            this.setSingleRange(range);
    +            this.isCollapsed = true;
    +        };
    +
    +        selProto.collapseToStart = function() {
    +            if (this.rangeCount) {
    +                var range = this._ranges[0];
    +                this.collapse(range.startContainer, range.startOffset);
    +            } else {
    +                throw new DOMException("INVALID_STATE_ERR");
    +            }
    +        };
    +
    +        selProto.collapseToEnd = function() {
    +            if (this.rangeCount) {
    +                var range = this._ranges[this.rangeCount - 1];
    +                this.collapse(range.endContainer, range.endOffset);
    +            } else {
    +                throw new DOMException("INVALID_STATE_ERR");
    +            }
    +        };
    +
    +        // The spec is very specific on how selectAllChildren should be implemented so the native implementation is
    +        // never used by Rangy.
    +        selProto.selectAllChildren = function(node) {
    +            assertNodeInSameDocument(this, node);
    +            var range = api.createRange(node);
    +            range.selectNodeContents(node);
    +            this.setSingleRange(range);
    +        };
    +
    +        selProto.deleteFromDocument = function() {
    +            // Sepcial behaviour required for IE's control selections
    +            if (implementsControlRange && implementsDocSelection && this.docSelection.type == CONTROL) {
    +                var controlRange = this.docSelection.createRange();
    +                var element;
    +                while (controlRange.length) {
    +                    element = controlRange.item(0);
    +                    controlRange.remove(element);
    +                    element.parentNode.removeChild(element);
    +                }
    +                this.refresh();
    +            } else if (this.rangeCount) {
    +                var ranges = this.getAllRanges();
    +                if (ranges.length) {
    +                    this.removeAllRanges();
    +                    for (var i = 0, len = ranges.length; i < len; ++i) {
    +                        ranges[i].deleteContents();
    +                    }
    +                    // The spec says nothing about what the selection should contain after calling deleteContents on each
    +                    // range. Firefox moves the selection to where the final selected range was, so we emulate that
    +                    this.addRange(ranges[len - 1]);
    +                }
    +            }
    +        };
    +
    +        // The following are non-standard extensions
    +        selProto.eachRange = function(func, returnValue) {
    +            for (var i = 0, len = this._ranges.length; i < len; ++i) {
    +                if ( func( this.getRangeAt(i) ) ) {
    +                    return returnValue;
    +                }
    +            }
    +        };
    +
    +        selProto.getAllRanges = function() {
    +            var ranges = [];
    +            this.eachRange(function(range) {
    +                ranges.push(range);
    +            });
    +            return ranges;
    +        };
    +
    +        selProto.setSingleRange = function(range, direction) {
    +            this.removeAllRanges();
    +            this.addRange(range, direction);
    +        };
    +
    +        selProto.callMethodOnEachRange = function(methodName, params) {
    +            var results = [];
    +            this.eachRange( function(range) {
    +                results.push( range[methodName].apply(range, params) );
    +            } );
    +            return results;
    +        };
    +        
    +        function createStartOrEndSetter(isStart) {
    +            return function(node, offset) {
    +                var range;
    +                if (this.rangeCount) {
    +                    range = this.getRangeAt(0);
    +                    range["set" + (isStart ? "Start" : "End")](node, offset);
    +                } else {
    +                    range = api.createRange(this.win.document);
    +                    range.setStartAndEnd(node, offset);
    +                }
    +                this.setSingleRange(range, this.isBackward());
    +            };
    +        }
    +
    +        selProto.setStart = createStartOrEndSetter(true);
    +        selProto.setEnd = createStartOrEndSetter(false);
    +        
    +        // Add select() method to Range prototype. Any existing selection will be removed.
    +        api.rangePrototype.select = function(direction) {
    +            getSelection( this.getDocument() ).setSingleRange(this, direction);
    +        };
    +
    +        selProto.changeEachRange = function(func) {
    +            var ranges = [];
    +            var backward = this.isBackward();
    +
    +            this.eachRange(function(range) {
    +                func(range);
    +                ranges.push(range);
    +            });
    +
    +            this.removeAllRanges();
    +            if (backward && ranges.length == 1) {
    +                this.addRange(ranges[0], "backward");
    +            } else {
    +                this.setRanges(ranges);
    +            }
    +        };
    +
    +        selProto.containsNode = function(node, allowPartial) {
    +            return this.eachRange( function(range) {
    +                return range.containsNode(node, allowPartial);
    +            }, true ) || false;
    +        };
    +
    +        selProto.getBookmark = function(containerNode) {
    +            return {
    +                backward: this.isBackward(),
    +                rangeBookmarks: this.callMethodOnEachRange("getBookmark", [containerNode])
    +            };
    +        };
    +
    +        selProto.moveToBookmark = function(bookmark) {
    +            var selRanges = [];
    +            for (var i = 0, rangeBookmark, range; rangeBookmark = bookmark.rangeBookmarks[i++]; ) {
    +                range = api.createRange(this.win);
    +                range.moveToBookmark(rangeBookmark);
    +                selRanges.push(range);
    +            }
    +            if (bookmark.backward) {
    +                this.setSingleRange(selRanges[0], "backward");
    +            } else {
    +                this.setRanges(selRanges);
    +            }
    +        };
    +
    +        selProto.toHtml = function() {
    +            var rangeHtmls = [];
    +            this.eachRange(function(range) {
    +                rangeHtmls.push( DomRange.toHtml(range) );
    +            });
    +            return rangeHtmls.join("");
    +        };
    +
    +        if (features.implementsTextRange) {
    +            selProto.getNativeTextRange = function() {
    +                var sel, textRange;
    +                if ( (sel = this.docSelection) ) {
    +                    var range = sel.createRange();
    +                    if (isTextRange(range)) {
    +                        return range;
    +                    } else {
    +                        throw module.createError("getNativeTextRange: selection is a control selection"); 
    +                    }
    +                } else if (this.rangeCount > 0) {
    +                    return api.WrappedTextRange.rangeToTextRange( this.getRangeAt(0) );
    +                } else {
    +                    throw module.createError("getNativeTextRange: selection contains no range");
    +                }
    +            };
    +        }
    +
    +        function inspect(sel) {
    +            var rangeInspects = [];
    +            var anchor = new DomPosition(sel.anchorNode, sel.anchorOffset);
    +            var focus = new DomPosition(sel.focusNode, sel.focusOffset);
    +            var name = (typeof sel.getName == "function") ? sel.getName() : "Selection";
    +
    +            if (typeof sel.rangeCount != "undefined") {
    +                for (var i = 0, len = sel.rangeCount; i < len; ++i) {
    +                    rangeInspects[i] = DomRange.inspect(sel.getRangeAt(i));
    +                }
    +            }
    +            return "[" + name + "(Ranges: " + rangeInspects.join(", ") +
    +                    ")(anchor: " + anchor.inspect() + ", focus: " + focus.inspect() + "]";
    +        }
    +
    +        selProto.getName = function() {
    +            return "WrappedSelection";
    +        };
    +
    +        selProto.inspect = function() {
    +            return inspect(this);
    +        };
    +
    +        selProto.detach = function() {
    +            actOnCachedSelection(this.win, "delete");
    +            deleteProperties(this);
    +        };
    +
    +        WrappedSelection.detachAll = function() {
    +            actOnCachedSelection(null, "deleteAll");
    +        };
    +
    +        WrappedSelection.inspect = inspect;
    +        WrappedSelection.isDirectionBackward = isDirectionBackward;
    +
    +        api.Selection = WrappedSelection;
    +
    +        api.selectionPrototype = selProto;
    +
    +        api.addShimListener(function(win) {
    +            if (typeof win.getSelection == "undefined") {
    +                win.getSelection = function() {
    +                    return getSelection(win);
    +                };
    +            }
    +            win = null;
    +        });
    +    });
    +    
    +
    +    /*----------------------------------------------------------------------------------------------------------------*/
    +
    +    return api;
    +}, this);;/**
    + * Selection save and restore module for Rangy.
    + * Saves and restores user selections using marker invisible elements in the DOM.
    + *
    + * Part of Rangy, a cross-browser JavaScript range and selection library
    + * http://code.google.com/p/rangy/
    + *
    + * Depends on Rangy core.
    + *
    + * Copyright 2014, Tim Down
    + * Licensed under the MIT license.
    + * Version: 1.3alpha.20140804
    + * Build date: 4 August 2014
    + */
    +(function(factory, global) {
    +    if (typeof define == "function" && define.amd) {
    +        // AMD. Register as an anonymous module with a dependency on Rangy.
    +        define(["rangy"], factory);
    +        /*
    +         } else if (typeof exports == "object") {
    +         // Node/CommonJS style for Browserify
    +         module.exports = factory;
    +         */
    +    } else {
    +        // No AMD or CommonJS support so we use the rangy global variable
    +        factory(global.rangy);
    +    }
    +})(function(rangy) {
    +    rangy.createModule("SaveRestore", ["WrappedRange"], function(api, module) {
    +        var dom = api.dom;
    +
    +        var markerTextChar = "\ufeff";
    +
    +        function gEBI(id, doc) {
    +            return (doc || document).getElementById(id);
    +        }
    +
    +        function insertRangeBoundaryMarker(range, atStart) {
    +            var markerId = "selectionBoundary_" + (+new Date()) + "_" + ("" + Math.random()).slice(2);
    +            var markerEl;
    +            var doc = dom.getDocument(range.startContainer);
    +
    +            // Clone the Range and collapse to the appropriate boundary point
    +            var boundaryRange = range.cloneRange();
    +            boundaryRange.collapse(atStart);
    +
    +            // Create the marker element containing a single invisible character using DOM methods and insert it
    +            markerEl = doc.createElement("span");
    +            markerEl.id = markerId;
    +            markerEl.style.lineHeight = "0";
    +            markerEl.style.display = "none";
    +            markerEl.className = "rangySelectionBoundary";
    +            markerEl.appendChild(doc.createTextNode(markerTextChar));
    +
    +            boundaryRange.insertNode(markerEl);
    +            return markerEl;
    +        }
    +
    +        function setRangeBoundary(doc, range, markerId, atStart) {
    +            var markerEl = gEBI(markerId, doc);
    +            if (markerEl) {
    +                range[atStart ? "setStartBefore" : "setEndBefore"](markerEl);
    +                markerEl.parentNode.removeChild(markerEl);
    +            } else {
    +                module.warn("Marker element has been removed. Cannot restore selection.");
    +            }
    +        }
    +
    +        function compareRanges(r1, r2) {
    +            return r2.compareBoundaryPoints(r1.START_TO_START, r1);
    +        }
    +
    +        function saveRange(range, backward) {
    +            var startEl, endEl, doc = api.DomRange.getRangeDocument(range), text = range.toString();
    +
    +            if (range.collapsed) {
    +                endEl = insertRangeBoundaryMarker(range, false);
    +                return {
    +                    document: doc,
    +                    markerId: endEl.id,
    +                    collapsed: true
    +                };
    +            } else {
    +                endEl = insertRangeBoundaryMarker(range, false);
    +                startEl = insertRangeBoundaryMarker(range, true);
    +
    +                return {
    +                    document: doc,
    +                    startMarkerId: startEl.id,
    +                    endMarkerId: endEl.id,
    +                    collapsed: false,
    +                    backward: backward,
    +                    toString: function() {
    +                        return "original text: '" + text + "', new text: '" + range.toString() + "'";
    +                    }
    +                };
    +            }
    +        }
    +
    +        function restoreRange(rangeInfo, normalize) {
    +            var doc = rangeInfo.document;
    +            if (typeof normalize == "undefined") {
    +                normalize = true;
    +            }
    +            var range = api.createRange(doc);
    +            if (rangeInfo.collapsed) {
    +                var markerEl = gEBI(rangeInfo.markerId, doc);
    +                if (markerEl) {
    +                    markerEl.style.display = "inline";
    +                    var previousNode = markerEl.previousSibling;
    +
    +                    // Workaround for issue 17
    +                    if (previousNode && previousNode.nodeType == 3) {
    +                        markerEl.parentNode.removeChild(markerEl);
    +                        range.collapseToPoint(previousNode, previousNode.length);
    +                    } else {
    +                        range.collapseBefore(markerEl);
    +                        markerEl.parentNode.removeChild(markerEl);
    +                    }
    +                } else {
    +                    module.warn("Marker element has been removed. Cannot restore selection.");
    +                }
    +            } else {
    +                setRangeBoundary(doc, range, rangeInfo.startMarkerId, true);
    +                setRangeBoundary(doc, range, rangeInfo.endMarkerId, false);
    +            }
    +
    +            if (normalize) {
    +                range.normalizeBoundaries();
    +            }
    +
    +            return range;
    +        }
    +
    +        function saveRanges(ranges, backward) {
    +            var rangeInfos = [], range, doc;
    +
    +            // Order the ranges by position within the DOM, latest first, cloning the array to leave the original untouched
    +            ranges = ranges.slice(0);
    +            ranges.sort(compareRanges);
    +
    +            for (var i = 0, len = ranges.length; i < len; ++i) {
    +                rangeInfos[i] = saveRange(ranges[i], backward);
    +            }
    +
    +            // Now that all the markers are in place and DOM manipulation over, adjust each range's boundaries to lie
    +            // between its markers
    +            for (i = len - 1; i >= 0; --i) {
    +                range = ranges[i];
    +                doc = api.DomRange.getRangeDocument(range);
    +                if (range.collapsed) {
    +                    range.collapseAfter(gEBI(rangeInfos[i].markerId, doc));
    +                } else {
    +                    range.setEndBefore(gEBI(rangeInfos[i].endMarkerId, doc));
    +                    range.setStartAfter(gEBI(rangeInfos[i].startMarkerId, doc));
    +                }
    +            }
    +
    +            return rangeInfos;
    +        }
    +
    +        function saveSelection(win) {
    +            if (!api.isSelectionValid(win)) {
    +                module.warn("Cannot save selection. This usually happens when the selection is collapsed and the selection document has lost focus.");
    +                return null;
    +            }
    +            var sel = api.getSelection(win);
    +            var ranges = sel.getAllRanges();
    +            var backward = (ranges.length == 1 && sel.isBackward());
    +
    +            var rangeInfos = saveRanges(ranges, backward);
    +
    +            // Ensure current selection is unaffected
    +            if (backward) {
    +                sel.setSingleRange(ranges[0], "backward");
    +            } else {
    +                sel.setRanges(ranges);
    +            }
    +
    +            return {
    +                win: win,
    +                rangeInfos: rangeInfos,
    +                restored: false
    +            };
    +        }
    +
    +        function restoreRanges(rangeInfos) {
    +            var ranges = [];
    +
    +            // Ranges are in reverse order of appearance in the DOM. We want to restore earliest first to avoid
    +            // normalization affecting previously restored ranges.
    +            var rangeCount = rangeInfos.length;
    +
    +            for (var i = rangeCount - 1; i >= 0; i--) {
    +                ranges[i] = restoreRange(rangeInfos[i], true);
    +            }
    +
    +            return ranges;
    +        }
    +
    +        function restoreSelection(savedSelection, preserveDirection) {
    +            if (!savedSelection.restored) {
    +                var rangeInfos = savedSelection.rangeInfos;
    +                var sel = api.getSelection(savedSelection.win);
    +                var ranges = restoreRanges(rangeInfos), rangeCount = rangeInfos.length;
    +
    +                if (rangeCount == 1 && preserveDirection && api.features.selectionHasExtend && rangeInfos[0].backward) {
    +                    sel.removeAllRanges();
    +                    sel.addRange(ranges[0], true);
    +                } else {
    +                    sel.setRanges(ranges);
    +                }
    +
    +                savedSelection.restored = true;
    +            }
    +        }
    +
    +        function removeMarkerElement(doc, markerId) {
    +            var markerEl = gEBI(markerId, doc);
    +            if (markerEl) {
    +                markerEl.parentNode.removeChild(markerEl);
    +            }
    +        }
    +
    +        function removeMarkers(savedSelection) {
    +            var rangeInfos = savedSelection.rangeInfos;
    +            for (var i = 0, len = rangeInfos.length, rangeInfo; i < len; ++i) {
    +                rangeInfo = rangeInfos[i];
    +                if (rangeInfo.collapsed) {
    +                    removeMarkerElement(savedSelection.doc, rangeInfo.markerId);
    +                } else {
    +                    removeMarkerElement(savedSelection.doc, rangeInfo.startMarkerId);
    +                    removeMarkerElement(savedSelection.doc, rangeInfo.endMarkerId);
    +                }
    +            }
    +        }
    +
    +        api.util.extend(api, {
    +            saveRange: saveRange,
    +            restoreRange: restoreRange,
    +            saveRanges: saveRanges,
    +            restoreRanges: restoreRanges,
    +            saveSelection: saveSelection,
    +            restoreSelection: restoreSelection,
    +            removeMarkerElement: removeMarkerElement,
    +            removeMarkers: removeMarkers
    +        });
    +    });
    +    
    +}, this);;/*
    +	Base.js, version 1.1a
    +	Copyright 2006-2010, Dean Edwards
    +	License: http://www.opensource.org/licenses/mit-license.php
    +*/
    +
    +var Base = function() {
    +	// dummy
    +};
    +
    +Base.extend = function(_instance, _static) { // subclass
    +	var extend = Base.prototype.extend;
    +	
    +	// build the prototype
    +	Base._prototyping = true;
    +	var proto = new this;
    +	extend.call(proto, _instance);
    +  proto.base = function() {
    +    // call this method from any other method to invoke that method's ancestor
    +  };
    +	delete Base._prototyping;
    +	
    +	// create the wrapper for the constructor function
    +	//var constructor = proto.constructor.valueOf(); //-dean
    +	var constructor = proto.constructor;
    +	var klass = proto.constructor = function() {
    +		if (!Base._prototyping) {
    +			if (this._constructing || this.constructor == klass) { // instantiation
    +				this._constructing = true;
    +				constructor.apply(this, arguments);
    +				delete this._constructing;
    +			} else if (arguments[0] != null) { // casting
    +				return (arguments[0].extend || extend).call(arguments[0], proto);
    +			}
    +		}
    +	};
    +	
    +	// build the class interface
    +	klass.ancestor = this;
    +	klass.extend = this.extend;
    +	klass.forEach = this.forEach;
    +	klass.implement = this.implement;
    +	klass.prototype = proto;
    +	klass.toString = this.toString;
    +	klass.valueOf = function(type) {
    +		//return (type == "object") ? klass : constructor; //-dean
    +		return (type == "object") ? klass : constructor.valueOf();
    +	};
    +	extend.call(klass, _static);
    +	// class initialisation
    +	if (typeof klass.init == "function") klass.init();
    +	return klass;
    +};
    +
    +Base.prototype = {	
    +	extend: function(source, value) {
    +		if (arguments.length > 1) { // extending with a name/value pair
    +			var ancestor = this[source];
    +			if (ancestor && (typeof value == "function") && // overriding a method?
    +				// the valueOf() comparison is to avoid circular references
    +				(!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&
    +				/\bbase\b/.test(value)) {
    +				// get the underlying method
    +				var method = value.valueOf();
    +				// override
    +				value = function() {
    +					var previous = this.base || Base.prototype.base;
    +					this.base = ancestor;
    +					var returnValue = method.apply(this, arguments);
    +					this.base = previous;
    +					return returnValue;
    +				};
    +				// point to the underlying method
    +				value.valueOf = function(type) {
    +					return (type == "object") ? value : method;
    +				};
    +				value.toString = Base.toString;
    +			}
    +			this[source] = value;
    +		} else if (source) { // extending with an object literal
    +			var extend = Base.prototype.extend;
    +			// if this object has a customised extend method then use it
    +			if (!Base._prototyping && typeof this != "function") {
    +				extend = this.extend || extend;
    +			}
    +			var proto = {toSource: null};
    +			// do the "toString" and other methods manually
    +			var hidden = ["constructor", "toString", "valueOf"];
    +			// if we are prototyping then include the constructor
    +			var i = Base._prototyping ? 0 : 1;
    +			while (key = hidden[i++]) {
    +				if (source[key] != proto[key]) {
    +					extend.call(this, key, source[key]);
    +
    +				}
    +			}
    +			// copy each of the source object's properties to this object
    +			for (var key in source) {
    +				if (!proto[key]) extend.call(this, key, source[key]);
    +			}
    +		}
    +		return this;
    +	}
    +};
    +
    +// initialise
    +Base = Base.extend({
    +	constructor: function() {
    +		this.extend(arguments[0]);
    +	}
    +}, {
    +	ancestor: Object,
    +	version: "1.1",
    +	
    +	forEach: function(object, block, context) {
    +		for (var key in object) {
    +			if (this.prototype[key] === undefined) {
    +				block.call(context, object[key], key, object);
    +			}
    +		}
    +	},
    +		
    +	implement: function() {
    +		for (var i = 0; i < arguments.length; i++) {
    +			if (typeof arguments[i] == "function") {
    +				// if it's a function, call it
    +				arguments[i](this.prototype);
    +			} else {
    +				// add the interface using the extend method
    +				this.prototype.extend(arguments[i]);
    +			}
    +		}
    +		return this;
    +	},
    +	
    +	toString: function() {
    +		return String(this.valueOf());
    +	}
    +});;/**
    + * Detect browser support for specific features
    + */
    +wysihtml5.browser = (function() {
    +  var userAgent   = navigator.userAgent,
    +      testElement = document.createElement("div"),
    +      // Browser sniffing is unfortunately needed since some behaviors are impossible to feature detect
    +      isGecko     = userAgent.indexOf("Gecko")        !== -1 && userAgent.indexOf("KHTML") === -1,
    +      isWebKit    = userAgent.indexOf("AppleWebKit/") !== -1,
    +      isChrome    = userAgent.indexOf("Chrome/")      !== -1,
    +      isOpera     = userAgent.indexOf("Opera/")       !== -1;
    +
    +  function iosVersion(userAgent) {
    +    return +((/ipad|iphone|ipod/.test(userAgent) && userAgent.match(/ os (\d+).+? like mac os x/)) || [undefined, 0])[1];
    +  }
    +
    +  function androidVersion(userAgent) {
    +    return +(userAgent.match(/android (\d+)/) || [undefined, 0])[1];
    +  }
    +
    +  function isIE(version, equation) {
    +    var rv = -1,
    +        re;
    +
    +    if (navigator.appName == 'Microsoft Internet Explorer') {
    +      re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    +    } else if (navigator.appName == 'Netscape') {
    +      re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    +    }
    +
    +    if (re && re.exec(navigator.userAgent) != null) {
    +      rv = parseFloat(RegExp.$1);
    +    }
    +
    +    if (rv === -1) { return false; }
    +    if (!version) { return true; }
    +    if (!equation) { return version === rv; }
    +    if (equation === "<") { return version < rv; }
    +    if (equation === ">") { return version > rv; }
    +    if (equation === "<=") { return version <= rv; }
    +    if (equation === ">=") { return version >= rv; }
    +  }
    +
    +  return {
    +    // Static variable needed, publicly accessible, to be able override it in unit tests
    +    USER_AGENT: userAgent,
    +
    +    /**
    +     * Exclude browsers that are not capable of displaying and handling
    +     * contentEditable as desired:
    +     *    - iPhone, iPad (tested iOS 4.2.2) and Android (tested 2.2) refuse to make contentEditables focusable
    +     *    - IE < 8 create invalid markup and crash randomly from time to time
    +     *
    +     * @return {Boolean}
    +     */
    +    supported: function() {
    +      var userAgent                   = this.USER_AGENT.toLowerCase(),
    +          // Essential for making html elements editable
    +          hasContentEditableSupport   = "contentEditable" in testElement,
    +          // Following methods are needed in order to interact with the contentEditable area
    +          hasEditingApiSupport        = document.execCommand && document.queryCommandSupported && document.queryCommandState,
    +          // document selector apis are only supported by IE 8+, Safari 4+, Chrome and Firefox 3.5+
    +          hasQuerySelectorSupport     = document.querySelector && document.querySelectorAll,
    +          // contentEditable is unusable in mobile browsers (tested iOS 4.2.2, Android 2.2, Opera Mobile, WebOS 3.05)
    +          isIncompatibleMobileBrowser = (this.isIos() && iosVersion(userAgent) < 5) || (this.isAndroid() && androidVersion(userAgent) < 4) || userAgent.indexOf("opera mobi") !== -1 || userAgent.indexOf("hpwos/") !== -1;
    +      return hasContentEditableSupport
    +        && hasEditingApiSupport
    +        && hasQuerySelectorSupport
    +        && !isIncompatibleMobileBrowser;
    +    },
    +
    +    isTouchDevice: function() {
    +      return this.supportsEvent("touchmove");
    +    },
    +
    +    isIos: function() {
    +      return (/ipad|iphone|ipod/i).test(this.USER_AGENT);
    +    },
    +
    +    isAndroid: function() {
    +      return this.USER_AGENT.indexOf("Android") !== -1;
    +    },
    +
    +    /**
    +     * Whether the browser supports sandboxed iframes
    +     * Currently only IE 6+ offers such feature