criterion 1.2.6.0 → 1.6.5.0
raw patch · 42 files changed
Files
- Criterion.hs +2/−0
- Criterion/Analysis.hs +21/−21
- Criterion/EmbeddedData.hs +5/−13
- Criterion/IO.hs +5/−20
- Criterion/Internal.hs +1/−1
- Criterion/Main.hs +24/−6
- Criterion/Main/Options.hs +66/−39
- Criterion/Measurement.hs +0/−415
- Criterion/Monad.hs +3/−21
- Criterion/Monad/Internal.hs +6/−6
- Criterion/Report.hs +70/−88
- Criterion/Types.hs +23/−506
- Criterion/Types/Internal.hs +0/−21
- README.markdown +639/−22
- app/Options.hs +4/−3
- cbits/cycles.c +0/−57
- cbits/time-osx.c +0/−35
- cbits/time-posix.c +0/−24
- cbits/time-windows.c +0/−80
- changelog.md +239/−0
- criterion.cabal +45/−59
- examples/ConduitVsPipes.hs +4/−4
- examples/ExtensibleCLI.hs +38/−0
- examples/Fibber.hs +5/−2
- examples/LICENSE +26/−0
- examples/Maps.hs +4/−12
- examples/Overhead.hs +7/−9
- examples/Quotes.hs +12/−0
- examples/criterion-examples.cabal +69/−17
- examples/tiny.html +0/−668
- templates/criterion.css +112/−71
- templates/criterion.js +870/−0
- templates/default.tpl +121/−343
- templates/js/jquery.criterion.js +0/−106
- templates/json.tpl +1/−1
- tests/Cleanup.hs +19/−8
- tests/Properties.hs +3/−11
- tests/Sanity.hs +0/−10
- tests/Tests.hs +3/−2
- www/fibber-screenshot.png binary
- www/fibber.html +1159/−0
- www/report.html +1145/−0
Criterion.hs view
@@ -30,6 +30,8 @@ , whnf , nfIO , whnfIO+ , nfAppIO+ , whnfAppIO -- * For interactive use , benchmark , benchmarkWith
Criterion/Analysis.hs view
@@ -30,9 +30,6 @@ , regress ) where --- Temporary: to support pre-AMP GHC 7.8.4:-import Data.Monoid - import Control.Arrow (second) import Control.Monad (unless, when) import Control.Monad.Reader (ask)@@ -40,10 +37,13 @@ import Control.Monad.Trans.Except import Criterion.IO.Printf (note, prolix) import Criterion.Measurement (secs, threshold)-import Criterion.Monad (Criterion, getGen, getOverhead)+import Criterion.Monad (Criterion, getGen) import Criterion.Types import Data.Int (Int64)+import Data.List.NonEmpty (NonEmpty(..)) import Data.Maybe (fromJust)+import Prelude ()+import Prelude.Compat import Statistics.Function (sort) import Statistics.Quantile (weightedAvg) import Statistics.Regression (bootstrapRegress, olsRegress)@@ -53,13 +53,13 @@ import Statistics.Types (Sample) import System.Random.MWC (GenIO) import qualified Data.List as List+import qualified Data.List.NonEmpty as NE import qualified Data.Map as Map import qualified Data.Vector as V import qualified Data.Vector.Generic as G import qualified Data.Vector.Unboxed as U import qualified Statistics.Resampling.Bootstrap as B import qualified Statistics.Types as B-import Prelude -- | Classify outliers in a data set, using the boxplot technique. classifyOutliers :: Sample -> Outliers@@ -91,9 +91,9 @@ outlierVariance µ σ a = OutlierVariance effect desc varOutMin where ( effect, desc ) | varOutMin < 0.01 = (Unaffected, "no")- | varOutMin < 0.1 = (Slight, "slight")- | varOutMin < 0.5 = (Moderate, "moderate")- | otherwise = (Severe, "severe")+ | varOutMin < 0.1 = (Slight, "a slight")+ | varOutMin < 0.5 = (Moderate, "a moderate")+ | otherwise = (Severe, "a severe") varOutMin = (minBy varOut 1 (minBy cMax 0 µgMin)) / σb2 varOut c = (ac / a) * (σb2 - ac * σg2) where ac = a - c σb = B.estPoint σ@@ -144,16 +144,13 @@ -> ExceptT String Criterion Report analyseSample i name meas = do Config{..} <- ask- overhead <- lift getOverhead let ests = [Mean,StdDev] -- The use of filter here throws away very-low-quality -- measurements when bootstrapping the mean and standard -- deviations. Without this, the numbers look nonsensical when -- very brief actions are measured. stime = measure (measTime . rescale) .- G.filter ((>= threshold) . measTime) . G.map fixTime .- G.tail $ meas- fixTime m = m { measTime = measTime m - overhead / 2 }+ G.filter ((>= threshold) . measTime) $ meas n = G.length meas s = G.length stime _ <- lift $ prolix "bootstrapping with %d of %d samples (%d%%)\n"@@ -162,11 +159,12 @@ rs <- mapM (\(ps,r) -> regress gen ps r meas) $ ((["iters"],"time"):regressions) resamps <- liftIO $ resample gen ests resamples stime- let [estMean,estStdDev] = B.bootstrapBCA confInterval stime resamps- ov = outlierVariance estMean estStdDev (fromIntegral n)+ (estMean,estStdDev) <- case B.bootstrapBCA confInterval stime resamps of+ [estMean',estStdDev'] -> return (estMean',estStdDev')+ ests' -> throwE $ "analyseSample: Expected two estimation functions, received: " ++ show ests'+ let ov = outlierVariance estMean estStdDev (fromIntegral n) an = SampleAnalysis { anRegress = rs- , anOverhead = overhead , anMean = estMean , anStdDev = estStdDev , anOutlierVar = ov@@ -199,7 +197,9 @@ let unmeasured = [n | (n, Nothing) <- map (second ($ G.head meas)) accs] unless (null unmeasured) $ throwE $ "no data available for " ++ renderNames unmeasured- let (r:ps) = map ((`measure` meas) . (fromJust .) . snd) accs+ (r,ps) <- case map ((`measure` meas) . (fromJust .) . snd) accs of+ (r':ps') -> return (r',ps')+ [] -> throwE "regress: Expected at least one accessor" Config{..} <- ask (coeffs,r2) <- liftIO $ bootstrapRegress gen resamples confInterval olsRegress ps r@@ -209,9 +209,9 @@ , regRSquare = r2 } -singleton :: [a] -> Bool-singleton [_] = True-singleton _ = False+singleton :: NonEmpty a -> Bool+singleton (_ :| []) = True+singleton _ = False -- | Given a list of accessor names (see 'measureKeys'), return either -- a mapping from accessor name to function or an error message if@@ -235,8 +235,8 @@ when (null predNames) $ Left "no predictors specified" let names = respName:predNames- dups = map head . filter (not . singleton) .- List.group . List.sort $ names+ dups = map NE.head . List.filter (not . singleton) .+ NE.group . List.sort $ names unless (null dups) $ Left $ "duplicated metric " ++ renderNames dups resolveAccessors names
Criterion/EmbeddedData.hs view
@@ -11,27 +11,19 @@ -- -- When the @embed-data-files@ @Cabal@ flag is enabled, this module exports -- the contents of various files (the @data-files@ from @criterion.cabal@, as--- well as minimized versions of jQuery and Flot) embedded as 'ByteString's.+-- well as a minimized version of Chart.js) embedded as a 'ByteString'. module Criterion.EmbeddedData ( dataFiles- , jQueryContents- , flotContents- , flotErrorbarsContents- , flotNavigateContents+ , chartContents ) where import Data.ByteString (ByteString) import Data.FileEmbed (embedDir, embedFile) import Language.Haskell.TH.Syntax (runIO)-import qualified Language.Javascript.Flot as Flot-import qualified Language.Javascript.JQuery as JQuery+import qualified Language.Javascript.Chart as Chart dataFiles :: [(FilePath, ByteString)] dataFiles = $(embedDir "templates") -jQueryContents, flotContents,- flotErrorbarsContents, flotNavigateContents :: ByteString-jQueryContents = $(embedFile =<< runIO JQuery.file)-flotContents = $(embedFile =<< runIO (Flot.file Flot.Flot))-flotErrorbarsContents = $(embedFile =<< runIO (Flot.file Flot.FlotErrorbars))-flotNavigateContents = $(embedFile =<< runIO (Flot.file Flot.FlotNavigate))+chartContents :: ByteString+chartContents = $(embedFile =<< runIO (Chart.file Chart.Chart))
Criterion/IO.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE Trustworthy #-}-{-# LANGUAGE CPP, OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings #-} -- | -- Module : Criterion.IO@@ -28,11 +28,7 @@ import qualified Data.Aeson as Aeson import Data.Binary (Binary(..), encode)-#if MIN_VERSION_binary(0, 6, 3) import Data.Binary.Get (runGetOrFail)-#else-import Data.Binary.Get (runGetState)-#endif import Data.Binary.Put (putByteString, putWord16be, runPut) import qualified Data.ByteString.Char8 as B import Criterion.Types (Report(..))@@ -52,7 +48,7 @@ -- | The magic string we expect to start off the header. headerRoot :: String-headerRoot = "criterio"+headerRoot = "criterion" -- | The current version of criterion, encoded into a string that is -- used in files.@@ -81,7 +77,6 @@ writeRecords :: Binary a => FilePath -> [a] -> IO () writeRecords path rs = withFile path WriteMode (flip hPutRecords rs) -#if MIN_VERSION_binary(0, 6, 3) readAll :: Binary a => Handle -> IO [a] readAll handle = do let go bs@@ -90,16 +85,6 @@ Left (_, _, err) -> fail err Right (bs', _, a) -> (a:) `fmap` go bs' go =<< L.hGetContents handle-#else-readAll :: Binary a => Handle -> IO [a]-readAll handle = do- let go i bs- | L.null bs = return []- | otherwise =- let (a, bs', i') = runGetState get bs i- in (a:) `fmap` go i' bs'- go 0 =<< L.hGetContents handle-#endif -- | On disk we store (name,version,reports), where -- 'version' is the version of Criterion used to generate the file.@@ -118,12 +103,12 @@ Right (tg,vers,_) | tg == headerRoot && vers == critVersion -> return res | otherwise ->- do hPutStrLn stderr $ "Warning, readJSONReports: mismatched header, expected " + do hPutStrLn stderr $ "Warning, readJSONReports: mismatched header, expected " ++ show (headerRoot,critVersion) ++ " received " ++ show (tg,vers)- return res + return res -- | Write a list of reports to a JSON file. Includes a header, which--- includes the current Criterion version number. This should be +-- includes the current Criterion version number. This should be -- the inverse of `readJSONReports`. writeJSONReports :: FilePath -> [Report] -> IO () writeJSONReports fn rs =
Criterion/Internal.hs view
@@ -36,7 +36,7 @@ import Criterion.Monad (Criterion) import Criterion.Report (report) import Criterion.Types hiding (measure)-import Criterion.Types.Internal (fakeEnvironment)+import Criterion.Measurement.Types.Internal (fakeEnvironment) import qualified Data.Map as Map import qualified Data.Vector as V import Statistics.Types (Estimate(..),ConfInt(..),confidenceInterval,cl95,confidenceLevel)
Criterion/Main.hs view
@@ -11,6 +11,10 @@ -- -- Wrappers for compiling and running benchmarks quickly and easily. -- See 'defaultMain' below for an example.+--+-- All of the 'IO'-returning functions in this module initialize the timer+-- before measuring time (refer to the documentation for 'initializeTime'+-- for more details). module Criterion.Main (@@ -44,6 +48,8 @@ , whnf , nfIO , whnfIO+ , nfAppIO+ , whnfAppIO -- * Turning a suite of benchmarks into a program , defaultMain , defaultMainWith@@ -69,7 +75,6 @@ import System.Environment (getProgName) import System.Exit (ExitCode(..), exitWith) import System.FilePath.Glob-import System.IO.CodePage (withCP65001) -- | An entry point that can be used as a @main@ function. --@@ -141,7 +146,7 @@ defaultMainWith :: Config -> [Benchmark] -> IO ()-defaultMainWith defCfg bs = withCP65001 $ do+defaultMainWith defCfg bs = do wat <- execParser (describe defCfg) runMode wat bs @@ -182,7 +187,7 @@ -- number of times. We are most interested in benchmarking two -- things: ----- * 'IO' actions. Any 'IO' action can be benchmarked directly.+-- * 'IO' actions. Most 'IO' actions can be benchmarked directly. -- -- * Pure functions. GHC optimises aggressively when compiling with -- @-O@, so it is easy to write innocent-looking benchmark code that@@ -192,12 +197,25 @@ -- $io ----- Any 'IO' action can be benchmarked easily if its type resembles--- this:+-- Most 'IO' actions can be benchmarked easily using one of the following+-- two functions: -- -- @--- 'IO' a+-- 'nfIO' :: 'NFData' a => 'IO' a -> 'Benchmarkable'+-- 'whnfIO' :: 'IO' a -> 'Benchmarkable' -- @+--+-- In certain corner cases, you may find it useful to use the following+-- variants, which take the input as a separate argument:+--+-- @+-- 'nfAppIO' :: 'NFData' b => (a -> 'IO' b) -> a -> 'Benchmarkable'+-- 'whnfAppIO' :: (a -> 'IO' b) -> a -> 'Benchmarkable'+-- @+--+-- This is useful when the bulk of the work performed by the function is+-- not bound by IO, but rather by pure computations that may optimize away if+-- the argument is known statically, as in 'nfIO'/'whnfIO'. -- $pure --
Criterion/Main/Options.hs view
@@ -1,8 +1,5 @@ {-# LANGUAGE DeriveDataTypeable, DeriveGeneric, RecordWildCards #-} --- Disable deprecation warnings for now until we remove forceGC for good-{-# OPTIONS_GHC -fno-warn-deprecations #-}- -- | -- Module : Criterion.Main.Options -- Copyright : (c) 2014 Bryan O'Sullivan@@ -22,18 +19,16 @@ , parseWith , config , describe+ , describeWith , versionInfo ) where --- Temporary: to support pre-AMP GHC 7.8.4:-import Data.Monoid- import Control.Monad (when) import Criterion.Analysis (validateAccessors) import Criterion.Types (Config(..), Verbosity(..), measureAccessors, measureKeys) import Data.Char (isSpace, toLower)-import Data.Data (Data, Typeable)+import Data.Data (Data) import Data.Int (Int64) import Data.List (isPrefixOf) import Data.Version (showVersion)@@ -43,10 +38,12 @@ import Options.Applicative.Help.Pretty ((.$.)) import Options.Applicative.Types import Paths_criterion (version)+import Prelude ()+import Prelude.Compat+import Prettyprinter (Doc, pretty)+import Prettyprinter.Render.Terminal (AnsiStyle) import Statistics.Types (mkCL,cl95)-import Text.PrettyPrint.ANSI.Leijen (Doc, text) import qualified Data.Map as M-import Prelude -- | How to match a benchmark name. data MatchType = Prefix@@ -63,7 +60,7 @@ -- paths. | IPattern -- ^ Same as 'Pattern', but case insensitive.- deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable, Data,+ deriving (Eq, Ord, Bounded, Enum, Read, Show, Data, Generic) -- | Execution mode for a benchmark program.@@ -76,13 +73,12 @@ -- analysing performance numbers. | Run Config MatchType [String] -- ^ Run and analyse the given benchmarks.- deriving (Eq, Read, Show, Typeable, Data, Generic)+ deriving (Eq, Read, Show, Data, Generic) -- | Default benchmarking configuration. defaultConfig :: Config defaultConfig = Config { confInterval = cl95- , forceGC = True , timeLimit = 5 , resamples = 1000 , regressions = []@@ -100,27 +96,47 @@ -- ^ Default configuration to use if options are not -- explicitly specified. -> Parser Mode-parseWith cfg = config cfg <**> runMode- -- Important: only run `config` once here, as we only want the- -- command-line options resulting from `config` to appear once- -- in the `--help` output. See #168.+parseWith cfg =+ runOrRunIters <|>+ (List <$ switch (long "list" <> short 'l' <> help "List benchmarks")) <|>+ (Version <$ switch (long "version" <> help "Show version info")) where- runMode :: Parser (Config -> Mode)- runMode =- matchNames (pure $ \mt bs cfg' -> Run cfg' mt bs) <|>- runIters <|>- (const List <$ switch (long "list" <> short 'l' <> help "List benchmarks")) <|>- (const Version <$ switch (long "version" <> help "Show version info"))-- runIters :: Parser (Config -> Mode)- runIters = matchNames $ (\iters mt bs cfg' -> RunIters cfg' iters mt bs)- <$> option auto+ runOrRunIters :: Parser Mode+ runOrRunIters =+ -- Because Run and RunIters are separate Modes, it's tempting to+ -- split them out into their own Parsers and choose between them+ -- using (<|>), i.e.,+ --+ -- (Run <$> config cfg <*> ...)+ -- <|> (RunIters <$> config cfg <*> (... "iters") <*> ...)+ --+ -- This is possible, but it has the unfortunate consequence of+ -- invoking the same Parsers (e.g., @config@) multiple times. As a+ -- result, the help text for each Parser would be duplicated when the+ -- user runs --help. See #168.+ --+ -- To avoid this problem, we combine Run and RunIters into a single+ -- Parser that only runs each of its sub-Parsers once. The trick is+ -- to make the Parser for "iters" (the key difference between Run and+ -- RunIters) an optional Parser. If the Parser yields Nothing, select+ -- Run, and if the Parser yields Just, select RunIters.+ --+ -- This is admittedly a bit of a design smell, as the idiomatic way+ -- to handle this would be to turn Run and RunIters into subcommands+ -- rather than options. That way, each subcommand would have its own+ -- --help prompt, thereby avoiding the need to deduplicate the help+ -- text. Unfortunately, this would require breaking the CLI interface+ -- of every criterion-based program, which seems like a leap too far.+ -- The solution used here, while a bit grimy, gets the job done while+ -- keeping Run and RunIters as options.+ (\cfg' mbIters ->+ case mbIters of+ Just iters -> RunIters cfg' iters+ Nothing -> Run cfg')+ <$> config cfg+ <*> optional (option auto (long "iters" <> short 'n' <> metavar "ITERS" <>- help "Run benchmarks, don't analyse")-- matchNames :: Parser (MatchType -> [String] -> Config -> Mode)- -> Parser (Config -> Mode)- matchNames wat = wat+ help "Run benchmarks, don't analyse")) <*> option match (long "match" <> short 'm' <> metavar "MATCH" <> value Prefix <> help "How to match benchmark names (\"prefix\", \"glob\", \"pattern\", or \"ipattern\")")@@ -132,15 +148,14 @@ <$> option (mkCL <$> range 0.001 0.999) (long "ci" <> short 'I' <> metavar "CI" <> value confInterval <> help "Confidence interval")- <*> (not <$> switch (long "no-gc" <> short 'G' <>- help "Do not collect garbage between iterations")) <*> option (range 0.1 86400) (long "time-limit" <> short 'L' <> metavar "SECS" <> value timeLimit <> help "Time limit to run a benchmark") <*> option (range 1 1000000) (long "resamples" <> metavar "COUNT" <> value resamples <> help "Number of bootstrap resamples to perform")- <*> many (option regressParams+ <*> manyDefault regressions+ (option regressParams (long "regress" <> metavar "RESP:PRED.." <> help "Regressions to perform")) <*> outputOption rawDataFile (long "raw" <>@@ -161,6 +176,12 @@ value template <> help "Template to use for report") +manyDefault :: [a] -> Parser a -> Parser [a]+manyDefault def m = set_default <$> many m+ where+ set_default [] = def+ set_default xs = xs+ outputOption :: Maybe String -> Mod OptionFields String -> Parser (Maybe String) outputOption file m = optional (strOption (m <> metavar "FILE" <> maybe mempty value file))@@ -202,9 +223,13 @@ let ret = (words . map repl . drop 1 $ ps, tidy r) either readerError (const (return ret)) $ uncurry validateAccessors ret --- | Flesh out a command line parser.+-- | Flesh out a command-line parser. describe :: Config -> ParserInfo Mode-describe cfg = info (helper <*> parseWith cfg) $+describe cfg = describeWith $ parseWith cfg++-- | Flesh out command-line information using a custom 'Parser'.+describeWith :: Parser a -> ParserInfo a+describeWith parser = info (helper <*> parser) $ header ("Microbenchmark suite - " <> versionInfo) <> fullDesc <> footerDoc (unChunk regressionHelp)@@ -215,8 +240,10 @@ versionInfo = "built with criterion " <> showVersion version -- We sort not by name, but by likely frequency of use.-regressionHelp :: Chunk Doc+regressionHelp :: Chunk (Doc AnsiStyle) regressionHelp =- fmap (text "Regression metrics (for use with --regress):" .$.) $- tabulate [(text n,text d) | (n,(_,d)) <- map f measureKeys]+ fmap (pretty "Regression metrics (for use with --regress):" .$.) $+ tabulate+ (prefTabulateFill defaultPrefs)+ [(pretty n, pretty d) | (n,(_,d)) <- map f measureKeys] where f k = (k, measureAccessors M.! k)
− Criterion/Measurement.hs
@@ -1,415 +0,0 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE Trustworthy #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE BangPatterns, CPP, ForeignFunctionInterface,- ScopedTypeVariables #-}--#if MIN_VERSION_base(4,10,0)--- Disable deprecation warnings for now until we remove the use of getGCStats--- and applyGCStats for good-{-# OPTIONS_GHC -Wno-deprecations #-}-#endif---- |--- Module : Criterion.Measurement--- Copyright : (c) 2009-2014 Bryan O'Sullivan------ License : BSD-style--- Maintainer : bos@serpentine.com--- Stability : experimental--- Portability : GHC------ Benchmark measurement code.--module Criterion.Measurement- (- initializeTime- , getTime- , getCPUTime- , getCycles- , getGCStatistics- , GCStatistics(..)- , secs- , measure- , runBenchmark- , runBenchmarkable- , runBenchmarkable_- , measured- , applyGCStatistics- , threshold- -- * Deprecated- , getGCStats- , applyGCStats- ) where--import Criterion.Types (Benchmarkable(..), Measured(..))-import Control.Applicative ((<*))-import Control.DeepSeq (NFData(rnf))-import Control.Exception (finally,evaluate)-import Data.Data (Data, Typeable)-import Data.Int (Int64)-import Data.List (unfoldr)-import Data.Word (Word64)-import GHC.Generics (Generic)-import GHC.Stats (GCStats(..))-#if MIN_VERSION_base(4,10,0)-import GHC.Stats (RTSStats(..), GCDetails(..))-#endif-import System.Mem (performGC)-import Text.Printf (printf)-import qualified Control.Exception as Exc-import qualified Data.Vector as V-import qualified GHC.Stats as Stats---- | Statistics about memory usage and the garbage collector. Apart from--- 'gcStatsCurrentBytesUsed' and 'gcStatsCurrentBytesSlop' all are cumulative values since--- the program started.------ 'GCStatistics' is cargo-culted from the 'GCStats' data type that "GHC.Stats"--- has. Since 'GCStats' was marked as deprecated and will be removed in GHC 8.4,--- we use 'GCStatistics' to provide a backwards-compatible view of GC statistics.-data GCStatistics = GCStatistics- { -- | Total number of bytes allocated- gcStatsBytesAllocated :: !Int64- -- | Number of garbage collections performed (any generation, major and- -- minor)- , gcStatsNumGcs :: !Int64- -- | Maximum number of live bytes seen so far- , gcStatsMaxBytesUsed :: !Int64- -- | Number of byte usage samples taken, or equivalently- -- the number of major GCs performed.- , gcStatsNumByteUsageSamples :: !Int64- -- | Sum of all byte usage samples, can be used with- -- 'gcStatsNumByteUsageSamples' to calculate averages with- -- arbitrary weighting (if you are sampling this record multiple- -- times).- , gcStatsCumulativeBytesUsed :: !Int64- -- | Number of bytes copied during GC- , gcStatsBytesCopied :: !Int64- -- | Number of live bytes at the end of the last major GC- , gcStatsCurrentBytesUsed :: !Int64- -- | Current number of bytes lost to slop- , gcStatsCurrentBytesSlop :: !Int64- -- | Maximum number of bytes lost to slop at any one time so far- , gcStatsMaxBytesSlop :: !Int64- -- | Maximum number of megabytes allocated- , gcStatsPeakMegabytesAllocated :: !Int64- -- | CPU time spent running mutator threads. This does not include- -- any profiling overhead or initialization.- , gcStatsMutatorCpuSeconds :: !Double-- -- | Wall clock time spent running mutator threads. This does not- -- include initialization.- , gcStatsMutatorWallSeconds :: !Double- -- | CPU time spent running GC- , gcStatsGcCpuSeconds :: !Double- -- | Wall clock time spent running GC- , gcStatsGcWallSeconds :: !Double- -- | Total CPU time elapsed since program start- , gcStatsCpuSeconds :: !Double- -- | Total wall clock time elapsed since start- , gcStatsWallSeconds :: !Double- } deriving (Eq, Read, Show, Typeable, Data, Generic)---- | Try to get GC statistics, bearing in mind that the GHC runtime--- will throw an exception if statistics collection was not enabled--- using \"@+RTS -T@\".-{-# DEPRECATED getGCStats- ["GCStats has been deprecated in GHC 8.2. As a consequence,",- "getGCStats has also been deprecated in favor of getGCStatistics.",- "getGCStats will be removed in the next major criterion release."] #-}-getGCStats :: IO (Maybe GCStats)-getGCStats =- (Just `fmap` Stats.getGCStats) `Exc.catch` \(_::Exc.SomeException) ->- return Nothing---- | Try to get GC statistics, bearing in mind that the GHC runtime--- will throw an exception if statistics collection was not enabled--- using \"@+RTS -T@\".-getGCStatistics :: IO (Maybe GCStatistics)-#if MIN_VERSION_base(4,10,0)--- Use RTSStats/GCDetails to gather GC stats-getGCStatistics = do- stats <- Stats.getRTSStats- let gcdetails :: Stats.GCDetails- gcdetails = gc stats-- nsToSecs :: Int64 -> Double- nsToSecs ns = fromIntegral ns * 1.0E-9-- return $ Just GCStatistics {- gcStatsBytesAllocated = fromIntegral $ gcdetails_allocated_bytes gcdetails- , gcStatsNumGcs = fromIntegral $ gcs stats- , gcStatsMaxBytesUsed = fromIntegral $ max_live_bytes stats- , gcStatsNumByteUsageSamples = fromIntegral $ major_gcs stats- , gcStatsCumulativeBytesUsed = fromIntegral $ cumulative_live_bytes stats- , gcStatsBytesCopied = fromIntegral $ gcdetails_copied_bytes gcdetails- , gcStatsCurrentBytesUsed = fromIntegral $ gcdetails_live_bytes gcdetails- , gcStatsCurrentBytesSlop = fromIntegral $ gcdetails_slop_bytes gcdetails- , gcStatsMaxBytesSlop = fromIntegral $ max_slop_bytes stats- , gcStatsPeakMegabytesAllocated = fromIntegral (max_mem_in_use_bytes stats) `quot` (1024*1024)- , gcStatsMutatorCpuSeconds = nsToSecs $ mutator_cpu_ns stats- , gcStatsMutatorWallSeconds = nsToSecs $ mutator_elapsed_ns stats- , gcStatsGcCpuSeconds = nsToSecs $ gcdetails_cpu_ns gcdetails- , gcStatsGcWallSeconds = nsToSecs $ gcdetails_elapsed_ns gcdetails- , gcStatsCpuSeconds = nsToSecs $ cpu_ns stats- , gcStatsWallSeconds = nsToSecs $ elapsed_ns stats- }- `Exc.catch`- \(_::Exc.SomeException) -> return Nothing-#else--- Use the old GCStats type to gather GC stats-getGCStatistics = do- stats <- Stats.getGCStats- return $ Just GCStatistics {- gcStatsBytesAllocated = bytesAllocated stats- , gcStatsNumGcs = numGcs stats- , gcStatsMaxBytesUsed = maxBytesUsed stats- , gcStatsNumByteUsageSamples = numByteUsageSamples stats- , gcStatsCumulativeBytesUsed = cumulativeBytesUsed stats- , gcStatsBytesCopied = bytesCopied stats- , gcStatsCurrentBytesUsed = currentBytesUsed stats- , gcStatsCurrentBytesSlop = currentBytesSlop stats- , gcStatsMaxBytesSlop = maxBytesSlop stats- , gcStatsPeakMegabytesAllocated = peakMegabytesAllocated stats- , gcStatsMutatorCpuSeconds = mutatorCpuSeconds stats- , gcStatsMutatorWallSeconds = mutatorWallSeconds stats- , gcStatsGcCpuSeconds = gcCpuSeconds stats- , gcStatsGcWallSeconds = gcWallSeconds stats- , gcStatsCpuSeconds = cpuSeconds stats- , gcStatsWallSeconds = wallSeconds stats- }- `Exc.catch`- \(_::Exc.SomeException) -> return Nothing-#endif---- | Measure the execution of a benchmark a given number of times.-measure :: Benchmarkable -- ^ Operation to benchmark.- -> Int64 -- ^ Number of iterations.- -> IO (Measured, Double)-measure bm iters = runBenchmarkable bm iters addResults $ \act -> do- startStats <- getGCStatistics- startTime <- getTime- startCpuTime <- getCPUTime- startCycles <- getCycles- act- endTime <- getTime- endCpuTime <- getCPUTime- endCycles <- getCycles- endStats <- getGCStatistics- let !m = applyGCStatistics endStats startStats $ measured {- measTime = max 0 (endTime - startTime)- , measCpuTime = max 0 (endCpuTime - startCpuTime)- , measCycles = max 0 (fromIntegral (endCycles - startCycles))- , measIters = iters- }- return (m, endTime)- where- addResults :: (Measured, Double) -> (Measured, Double) -> (Measured, Double)- addResults (!m1, !d1) (!m2, !d2) = (m3, d1 + d2)- where- add f = f m1 + f m2-- m3 = Measured- { measTime = add measTime- , measCpuTime = add measCpuTime- , measCycles = add measCycles- , measIters = add measIters-- , measAllocated = add measAllocated- , measNumGcs = add measNumGcs- , measBytesCopied = add measBytesCopied- , measMutatorWallSeconds = add measMutatorWallSeconds- , measMutatorCpuSeconds = add measMutatorCpuSeconds- , measGcWallSeconds = add measGcWallSeconds- , measGcCpuSeconds = add measGcCpuSeconds- }-{-# INLINE measure #-}---- | The amount of time a benchmark must run for in order for us to--- have some trust in the raw measurement.------ We set this threshold so that we can generate enough data to later--- perform meaningful statistical analyses.------ The threshold is 30 milliseconds. One use of 'runBenchmark' must--- accumulate more than 300 milliseconds of total measurements above--- this threshold before it will finish.-threshold :: Double-threshold = 0.03-{-# INLINE threshold #-}--runBenchmarkable :: Benchmarkable -> Int64 -> (a -> a -> a) -> (IO () -> IO a) -> IO a-runBenchmarkable Benchmarkable{..} i comb f- | perRun = work >>= go (i - 1)- | otherwise = work- where- go 0 result = return result- go !n !result = work >>= go (n - 1) . comb result-- count | perRun = 1- | otherwise = i-- work = do- env <- allocEnv count- let clean = cleanEnv count env- run = runRepeatedly env count-- clean `seq` run `seq` evaluate $ rnf env-- performGC- f run `finally` clean <* performGC- {-# INLINE work #-}-{-# INLINE runBenchmarkable #-}--runBenchmarkable_ :: Benchmarkable -> Int64 -> IO ()-runBenchmarkable_ bm i = runBenchmarkable bm i (\() () -> ()) id-{-# INLINE runBenchmarkable_ #-}---- | Run a single benchmark, and return measurements collected while--- executing it, along with the amount of time the measurement process--- took.-runBenchmark :: Benchmarkable- -> Double- -- ^ Lower bound on how long the benchmarking process- -- should take. In practice, this time limit may be- -- exceeded in order to generate enough data to perform- -- meaningful statistical analyses.- -> IO (V.Vector Measured, Double)-runBenchmark bm timeLimit = do- runBenchmarkable_ bm 1- start <- performGC >> getTime- let loop [] !_ !_ _ = error "unpossible!"- loop (iters:niters) prev count acc = do- (m, endTime) <- measure bm iters- let overThresh = max 0 (measTime m - threshold) + prev- -- We try to honour the time limit, but we also have more- -- important constraints:- --- -- We must generate enough data that bootstrapping won't- -- simply crash.- --- -- We need to generate enough measurements that have long- -- spans of execution to outweigh the (rather high) cost of- -- measurement.- if endTime - start >= timeLimit &&- overThresh > threshold * 10 &&- count >= (4 :: Int)- then do- let !v = V.reverse (V.fromList acc)- return (v, endTime - start)- else loop niters overThresh (count+1) (m:acc)- loop (squish (unfoldr series 1)) 0 0 []---- Our series starts its growth very slowly when we begin at 1, so we--- eliminate repeated values.-squish :: (Eq a) => [a] -> [a]-squish ys = foldr go [] ys- where go x xs = x : dropWhile (==x) xs--series :: Double -> Maybe (Int64, Double)-series k = Just (truncate l, l)- where l = k * 1.05---- | An empty structure.-measured :: Measured-measured = Measured {- measTime = 0- , measCpuTime = 0- , measCycles = 0- , measIters = 0-- , measAllocated = minBound- , measNumGcs = minBound- , measBytesCopied = minBound- , measMutatorWallSeconds = bad- , measMutatorCpuSeconds = bad- , measGcWallSeconds = bad- , measGcCpuSeconds = bad- } where bad = -1/0---- | Apply the difference between two sets of GC statistics to a--- measurement.-{-# DEPRECATED applyGCStats- ["GCStats has been deprecated in GHC 8.2. As a consequence,",- "applyGCStats has also been deprecated in favor of applyGCStatistics.",- "applyGCStats will be removed in the next major criterion release."] #-}-applyGCStats :: Maybe GCStats- -- ^ Statistics gathered at the __end__ of a run.- -> Maybe GCStats- -- ^ Statistics gathered at the __beginning__ of a run.- -> Measured- -- ^ Value to \"modify\".- -> Measured-applyGCStats (Just end) (Just start) m = m {- measAllocated = diff bytesAllocated- , measNumGcs = diff numGcs- , measBytesCopied = diff bytesCopied- , measMutatorWallSeconds = diff mutatorWallSeconds- , measMutatorCpuSeconds = diff mutatorCpuSeconds- , measGcWallSeconds = diff gcWallSeconds- , measGcCpuSeconds = diff gcCpuSeconds- } where diff f = f end - f start-applyGCStats _ _ m = m---- | Apply the difference between two sets of GC statistics to a--- measurement.-applyGCStatistics :: Maybe GCStatistics- -- ^ Statistics gathered at the __end__ of a run.- -> Maybe GCStatistics- -- ^ Statistics gathered at the __beginning__ of a run.- -> Measured- -- ^ Value to \"modify\".- -> Measured-applyGCStatistics (Just end) (Just start) m = m {- measAllocated = diff gcStatsBytesAllocated- , measNumGcs = diff gcStatsNumGcs- , measBytesCopied = diff gcStatsBytesCopied- , measMutatorWallSeconds = diff gcStatsMutatorWallSeconds- , measMutatorCpuSeconds = diff gcStatsMutatorCpuSeconds- , measGcWallSeconds = diff gcStatsGcWallSeconds- , measGcCpuSeconds = diff gcStatsGcCpuSeconds- } where diff f = f end - f start-applyGCStatistics _ _ m = m---- | Convert a number of seconds to a string. The string will consist--- of four decimal places, followed by a short description of the time--- units.-secs :: Double -> String-secs k- | k < 0 = '-' : secs (-k)- | k >= 1 = k `with` "s"- | k >= 1e-3 = (k*1e3) `with` "ms"-#ifdef mingw32_HOST_OS- | k >= 1e-6 = (k*1e6) `with` "us"-#else- | k >= 1e-6 = (k*1e6) `with` "μs"-#endif- | k >= 1e-9 = (k*1e9) `with` "ns"- | k >= 1e-12 = (k*1e12) `with` "ps"- | k >= 1e-15 = (k*1e15) `with` "fs"- | k >= 1e-18 = (k*1e18) `with` "as"- | otherwise = printf "%g s" k- where with (t :: Double) (u :: String)- | t >= 1e9 = printf "%.4g %s" t u- | t >= 1e3 = printf "%.0f %s" t u- | t >= 1e2 = printf "%.1f %s" t u- | t >= 1e1 = printf "%.2f %s" t u- | otherwise = printf "%.3f %s" t u---- | Set up time measurement.-foreign import ccall unsafe "criterion_inittime" initializeTime :: IO ()---- | Read the CPU cycle counter.-foreign import ccall unsafe "criterion_rdtsc" getCycles :: IO Word64---- | Return the current wallclock time, in seconds since some--- arbitrary time.------ You /must/ call 'initializeTime' once before calling this function!-foreign import ccall unsafe "criterion_gettime" getTime :: IO Double---- | Return the amount of elapsed CPU time, combining user and kernel--- (system) time into a single measure.-foreign import ccall unsafe "criterion_getcputime" getCPUTime :: IO Double
Criterion/Monad.hs view
@@ -14,26 +14,21 @@ Criterion , withConfig , getGen- , getOverhead ) where import Control.Monad.Reader (asks, runReaderT) import Control.Monad.Trans (liftIO)-import Control.Monad (when)-import Criterion.Measurement (measure, runBenchmark, secs) import Criterion.Monad.Internal (Criterion(..), Crit(..)) import Criterion.Types hiding (measure) import Data.IORef (IORef, newIORef, readIORef, writeIORef)-import Statistics.Regression (olsRegress)+import System.IO.CodePage (withCP65001) import System.Random.MWC (GenIO, createSystemRandom)-import qualified Data.Vector.Generic as G -- | Run a 'Criterion' action with the given 'Config'. withConfig :: Config -> Criterion a -> IO a-withConfig cfg (Criterion act) = do+withConfig cfg (Criterion act) = withCP65001 $ do g <- newIORef Nothing- o <- newIORef Nothing- runReaderT act (Crit cfg g o)+ runReaderT act (Crit cfg g) -- | Return a random number generator, creating one if necessary. --@@ -41,19 +36,6 @@ -- call 'createSystemRandom' more than once if multiple threads race). getGen :: Criterion GenIO getGen = memoise gen createSystemRandom---- | Return an estimate of the measurement overhead.-getOverhead :: Criterion Double-getOverhead = do- verbose <- asks ((== Verbose) . verbosity)- memoise overhead $ do- (meas,_) <- runBenchmark (whnfIO $ measure (whnfIO $ return ()) 1) 1- let metric get = G.convert . G.map get $ meas- let o = G.head . fst $- olsRegress [metric (fromIntegral . measIters)] (metric measTime)- when verbose . liftIO $- putStrLn $ "measurement overhead " ++ secs o- return o -- | Memoise the result of an 'IO' action. --
Criterion/Monad/Internal.hs view
@@ -17,27 +17,27 @@ , Crit(..) ) where --- Temporary: to support pre-AMP GHC 7.8.4:-import Control.Applicative- import Control.Monad.Catch (MonadThrow, MonadCatch, MonadMask)+import qualified Control.Monad.Fail as Fail (MonadFail(..)) import Control.Monad.Reader (MonadReader(..), ReaderT) import Control.Monad.Trans (MonadIO)+import Control.Monad.Trans.Instances () import Criterion.Types (Config) import Data.IORef (IORef)+import Prelude ()+import Prelude.Compat import System.Random.MWC (GenIO)-import Prelude data Crit = Crit { config :: !Config , gen :: !(IORef (Maybe GenIO))- , overhead :: !(IORef (Maybe Double)) } -- | The monad in which most criterion code executes. newtype Criterion a = Criterion { runCriterion :: ReaderT Crit IO a- } deriving (Functor, Applicative, Monad, MonadIO, MonadThrow, MonadCatch, MonadMask)+ } deriving ( Functor, Applicative, Monad, Fail.MonadFail, MonadIO+ , MonadThrow, MonadCatch, MonadMask ) instance MonadReader Config Criterion where ask = config `fmap` Criterion ask
Criterion/Report.hs view
@@ -32,29 +32,31 @@ ) where import Control.Exception (Exception, IOException, throwIO)-import Control.Monad (mplus, unless)+import Control.Monad (mplus) import Control.Monad.IO.Class (MonadIO(liftIO)) import Control.Monad.Reader (ask) import Criterion.Monad (Criterion) import Criterion.Types-import Data.Aeson (ToJSON (..), Value(..), object, (.=), Value, encode)-import Data.Data (Data, Typeable)+import Data.Aeson (ToJSON (..), Value(..), object, (.=), Value)+import qualified Data.Aeson.Key as Key+import Data.Aeson.Text (encodeToLazyText)+import Data.Data (Data) import Data.Foldable (forM_)-import Data.Monoid ((<>)) import GHC.Generics (Generic) import Paths_criterion (getDataFileName) import Statistics.Function (minMax)-import Statistics.Types (confidenceInterval, confidenceLevel, confIntCL, estError) import System.Directory (doesFileExist) import System.FilePath ((</>), (<.>), isPathSeparator) import System.IO (hPutStrLn, stderr)-import Text.Microstache (Key (..), MustacheWarning (..), Node (..), Template (..),- compileMustacheText, displayMustacheWarning, renderMustacheW)+import Text.Microstache (Key (..), Node (..), Template (..),+ compileMustacheText, displayMustacheWarning, renderMustacheW) import Prelude () import Prelude.Compat import qualified Control.Exception as E import qualified Data.Text as T+#if defined(EMBED) import qualified Data.Text.Lazy.Encoding as TLE+#endif import qualified Data.Text.IO as T import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.IO as TL@@ -62,13 +64,11 @@ import qualified Data.Vector.Unboxed as U #if defined(EMBED)-import Criterion.EmbeddedData (dataFiles, jQueryContents, flotContents,- flotErrorbarsContents, flotNavigateContents)+import Criterion.EmbeddedData (dataFiles, chartContents) import qualified Data.ByteString.Lazy as BL import qualified Data.Text.Encoding as TE #else-import qualified Language.Javascript.Flot as Flot-import qualified Language.Javascript.JQuery as JQuery+import qualified Language.Javascript.Chart as Chart #endif -- | Trim long flat tails from a KDE plot.@@ -105,6 +105,41 @@ tpl <- loadTemplate [td,"."] template TL.writeFile name =<< formatReport reports tpl +-- | Escape JSON string aimed to be embedded in an HTML <script> tag. Notably+-- < and > are replaced with their unicode escape sequences such that closing+-- the <script> tag from within the JSON data is disallowed, i.e, the character+-- sequence "</" is made impossible.+--+-- Moreover, & is escaped to avoid HTML character references (&<code>;), + is+-- escaped to avoid UTF-7 attacks (should only affect old versions of IE), and+-- \0 is escaped to allow it to be represented in JSON, as the NUL character is+-- disallowed in JSON but valid in Haskell characters.+--+-- The following characters are replaced with their unicode escape sequences+-- (\uXXXX):+-- <, >, &, +, \x2028 (line separator), \x2029 (paragraph separator), and \0+-- (null terminator)+--+-- Other characters are such as \\ (backslash) and \n (newline) are not escaped+-- as the JSON serializer @encodeToLazyText@ already escapes them when they+-- occur inside JSON strings and they cause no issues with respect to HTML+-- safety when used outside of strings in the JSON-encoded payload.+--+-- If the resulting JSON-encoded Text is embedded in an HTML attribute, extra+-- care is required to also escape quotes with character references in the+-- final JSON payload.+-- See <https://html.spec.whatwg.org/multipage/syntax.html#syntax-attributes>+-- for details on how to escape attribute values.+escapeJSON :: Char -> TL.Text+escapeJSON '<' = "\\u003c" -- ban closing of the script tag by making </ impossible+escapeJSON '>' = "\\u003e" -- encode tags with unicode escape sequences+escapeJSON '\x2028' = "\\u2028" -- line separator+escapeJSON '\x2029' = "\\u2029" -- paragraph separator+escapeJSON '&' = "\\u0026" -- avoid HTML entities+escapeJSON '+' = "\\u002b" -- + can be used in UTF-7 escape sequences+escapeJSON '\0' = "\\u0000" -- make null characters explicit+escapeJSON c = TL.singleton c+ -- | Format a series of 'Report' values using the given Mustache template. formatReport :: [Report] -> TL.Text -- ^ Mustache template.@@ -114,25 +149,18 @@ Left err -> fail (show err) -- TODO: throw a template exception? Right x -> return x - jQuery <- jQueryFileContents- flot <- flotFileContents- flotErrorbars <- flotErrorbarsFileContents- flotNavigate <- flotNavigateFileContents- jQueryCriterionJS <- readDataFile ("js" </> "jquery.criterion.js")- criterionCSS <- readDataFile "criterion.css"+ criterionJS <- readDataFile "criterion.js"+ criterionCSS <- readDataFile "criterion.css"+ chartJS <- chartFileContents -- includes, only top level templates <- getTemplateDir template <- includeTemplate (includeFile [templates]) template0 let context = object- [ "json" .= reports- , "report" .= map inner reports- , "js-jquery" .= jQuery- , "js-flot" .= flot- , "js-flot-errorbars" .= flotErrorbars- , "js-flot-navigate" .= flotNavigate- , "jquery-criterion-js" .= jQueryCriterionJS+ [ "json" .= reportsJSON reports+ , "js-criterion" .= criterionJS+ , "js-chart" .= chartJS , "criterion-css" .= criterionCSS ] @@ -140,33 +168,17 @@ -- If there were any issues during mustache template rendering, make sure -- to inform the user. See #127. forM_ warnings $ \warning -> do- -- The one thing we choose not to warn about is substituting in the `json`- -- key. The reason is that `json` is used in:- --- -- var reports = {{{json}}};- --- -- So `json` represents a raw JavaScript array. This is a bit skeevy by- -- mustache conventions, but redesigning the template to avoid this- -- warning would be more work than just substituting the array directly.- unless (warning == MustacheDirectlyRenderedValue (Key ["json"])) $- mapM_ (hPutStrLn stderr)- [ "criterion: warning:"- , " " ++ displayMustacheWarning warning- , ""- ]+ criterionWarning $ displayMustacheWarning warning return formatted where- jQueryFileContents, flotFileContents :: IO T.Text+ reportsJSON :: [Report] -> T.Text+ reportsJSON = TL.toStrict . TL.concatMap escapeJSON . encodeToLazyText++ chartFileContents :: IO T.Text #if defined(EMBED)- jQueryFileContents = pure $ TE.decodeUtf8 jQueryContents- flotFileContents = pure $ TE.decodeUtf8 flotContents- flotErrorbarsFileContents = pure $ TE.decodeUtf8 flotErrorbarsContents- flotNavigateFileContents = pure $ TE.decodeUtf8 flotNavigateContents+ chartFileContents = pure $ TE.decodeUtf8 chartContents #else- jQueryFileContents = T.readFile =<< JQuery.file- flotFileContents = T.readFile =<< Flot.file Flot.Flot- flotErrorbarsFileContents = T.readFile =<< Flot.file Flot.FlotErrorbars- flotNavigateFileContents = T.readFile =<< Flot.file Flot.FlotNavigate+ chartFileContents = T.readFile =<< Chart.file Chart.Chart #endif readDataFile :: FilePath -> IO T.Text@@ -189,43 +201,12 @@ fmap TextBlock (f (T.unpack fp)) includeNode _ n = return n - -- Merge Report with it's analysis and outliers- merge :: ToJSON a => a -> Value -> Value- merge x y = case toJSON x of- Object x' -> case y of- Object y' -> Object (x' <> y')- _ -> y- _ -> y-- inner r@Report {..} = merge reportAnalysis $ merge reportOutliers $ object- [ "name" .= reportName- , "json" .= TLE.decodeUtf8 (encode r)- , "number" .= reportNumber- , "iters" .= vector "x" iters- , "times" .= vector "x" times- , "cycles" .= vector "x" cycles- , "kdetimes" .= vector "x" kdeValues- , "kdepdf" .= vector "x" kdePDF- , "kde" .= vector2 "time" "pdf" kdeValues kdePDF- , "anMeanConfidenceLevel" .= anMeanConfidenceLevel- , "anMeanLowerBound" .= anMeanLowerBound- , "anMeanUpperBound" .= anMeanUpperBound- , "anStdDevLowerBound" .= anStdDevLowerBound- , "anStdDevUpperBound" .= anStdDevUpperBound- ]- where- [KDE{..}] = reportKDEs- SampleAnalysis{..} = reportAnalysis-- iters = measure measIters reportMeasured- times = measure measTime reportMeasured- cycles = measure measCycles reportMeasured- anMeanConfidenceLevel- = confidenceLevel $ confIntCL $ estError anMean- (anMeanLowerBound, anMeanUpperBound)- = confidenceInterval anMean- (anStdDevLowerBound, anStdDevUpperBound)- = confidenceInterval anStdDev+criterionWarning :: String -> IO ()+criterionWarning msg =+ hPutStrLn stderr $ unlines+ [ "criterion: warning:"+ , " " ++ msg+ ] -- | Render the elements of a vector. --@@ -241,8 +222,9 @@ -> Value {-# SPECIALIZE vector :: T.Text -> U.Vector Double -> Value #-} vector name v = toJSON . map val . G.toList $ v where- val i = object [ name .= i ]+ val i = object [ Key.fromText name .= i ] + -- | Render the elements of two vectors. vector2 :: (G.Vector v a, G.Vector v b, ToJSON a, ToJSON b) => T.Text -- ^ Name for elements from the first vector.@@ -254,8 +236,8 @@ -> Value #-} vector2 name1 name2 v1 v2 = toJSON $ zipWith val (G.toList v1) (G.toList v2) where val i j = object- [ name1 .= i- , name2 .= j+ [ Key.fromText name1 .= i+ , Key.fromText name2 .= j ] -- | Attempt to include the contents of a file based on a search path.@@ -281,7 +263,7 @@ -- | A problem arose with a template. data TemplateException = TemplateNotFound FilePath -- ^ The template could not be found.- deriving (Eq, Read, Show, Typeable, Data, Generic)+ deriving (Eq, Read, Show, Data, Generic) instance Exception TemplateException
Criterion/Types.hs view
@@ -57,10 +57,12 @@ , addPrefix , benchNames -- ** Evaluation control- , whnf , nf+ , whnf , nfIO , whnfIO+ , nfAppIO+ , whnfAppIO -- * Result types , Outliers(..) , OutlierEffect(..)@@ -72,31 +74,27 @@ , DataRecord(..) ) where --- Temporary: to support pre-AMP GHC 7.8.4:-import Control.Applicative-import Data.Monoid-import Data.Semigroup- import Control.DeepSeq (NFData(rnf))-import Control.Exception (evaluate)-import Criterion.Types.Internal (fakeEnvironment)+import Criterion.Measurement.Types import Data.Aeson (FromJSON(..), ToJSON(..)) import Data.Binary (Binary(..), putWord8, getWord8)-import Data.Data (Data, Typeable)+import Data.Binary.Orphans ()+import Data.Data (Data) import Data.Int (Int64)-import Data.Map (Map, fromList)+import Data.Map (Map) import GHC.Generics (Generic)+import Prelude ()+import Prelude.Compat import qualified Data.Vector as V import qualified Data.Vector.Unboxed as U import qualified Statistics.Types as St import Statistics.Resampling.Bootstrap ()-import Prelude -- | Control the amount of information displayed. data Verbosity = Quiet | Normal | Verbose- deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable, Data,+ deriving (Eq, Ord, Bounded, Enum, Read, Show, Data, Generic) -- | Top-level benchmarking configuration.@@ -104,11 +102,6 @@ confInterval :: St.CL Double -- ^ Confidence interval for bootstrap estimation (greater than -- 0, less than 1).- , forceGC :: Bool- -- ^ /Obsolete, unused/. This option used to force garbage- -- collection between every benchmark run, but it no longer has- -- an effect (we now unconditionally force garbage collection).- -- This option remains solely for backwards API compatibility. , timeLimit :: Double -- ^ Number of seconds to run a single benchmark. (In practice, -- execution time will very slightly exceed this limit.)@@ -132,480 +125,9 @@ -- benchmarks. , template :: FilePath -- ^ Template file to use if writing a report.- } deriving (Eq, Read, Show, Typeable, Data, Generic)-{-# DEPRECATED forceGC- ["forceGC will be removed in the next major criterion release."] #-}+ } deriving (Eq, Read, Show, Data, Generic) --- | A pure function or impure action that can be benchmarked. The--- 'Int64' parameter indicates the number of times to run the given--- function or action.-data Benchmarkable = forall a . NFData a =>- Benchmarkable- { allocEnv :: Int64 -> IO a- , cleanEnv :: Int64 -> a -> IO ()- , runRepeatedly :: a -> Int64 -> IO ()- , perRun :: Bool- } -noop :: Monad m => a -> m ()-noop = const $ return ()-{-# INLINE noop #-}---- | Construct a 'Benchmarkable' value from an impure action, where the 'Int64'--- parameter indicates the number of times to run the action.-toBenchmarkable :: (Int64 -> IO ()) -> Benchmarkable-toBenchmarkable f = Benchmarkable noop (const noop) (const f) False-{-# INLINE toBenchmarkable #-}---- | A collection of measurements made while benchmarking.------ Measurements related to garbage collection are tagged with __GC__.--- They will only be available if a benchmark is run with @\"+RTS--- -T\"@.------ __Packed storage.__ When GC statistics cannot be collected, GC--- values will be set to huge negative values. If a field is labeled--- with \"__GC__\" below, use 'fromInt' and 'fromDouble' to safely--- convert to \"real\" values.-data Measured = Measured {- measTime :: !Double- -- ^ Total wall-clock time elapsed, in seconds.- , measCpuTime :: !Double- -- ^ Total CPU time elapsed, in seconds. Includes both user and- -- kernel (system) time.- , measCycles :: !Int64- -- ^ Cycles, in unspecified units that may be CPU cycles. (On- -- i386 and x86_64, this is measured using the @rdtsc@- -- instruction.)- , measIters :: !Int64- -- ^ Number of loop iterations measured.-- , measAllocated :: !Int64- -- ^ __(GC)__ Number of bytes allocated. Access using 'fromInt'.- , measNumGcs :: !Int64- -- ^ __(GC)__ Number of garbage collections performed. Access- -- using 'fromInt'.- , measBytesCopied :: !Int64- -- ^ __(GC)__ Number of bytes copied during garbage collection.- -- Access using 'fromInt'.- , measMutatorWallSeconds :: !Double- -- ^ __(GC)__ Wall-clock time spent doing real work- -- (\"mutation\"), as distinct from garbage collection. Access- -- using 'fromDouble'.- , measMutatorCpuSeconds :: !Double- -- ^ __(GC)__ CPU time spent doing real work (\"mutation\"), as- -- distinct from garbage collection. Access using 'fromDouble'.- , measGcWallSeconds :: !Double- -- ^ __(GC)__ Wall-clock time spent doing garbage collection.- -- Access using 'fromDouble'.- , measGcCpuSeconds :: !Double- -- ^ __(GC)__ CPU time spent doing garbage collection. Access- -- using 'fromDouble'.- } deriving (Eq, Read, Show, Typeable, Data, Generic)--instance FromJSON Measured where- parseJSON v = do- (a,b,c,d,e,f,g,h,i,j,k) <- parseJSON v- -- The first four fields are not subject to the encoding policy:- return $ Measured a b c d- (int e) (int f) (int g)- (db h) (db i) (db j) (db k)- where int = toInt; db = toDouble---- Here we treat the numeric fields as `Maybe Int64` and `Maybe Double`--- and we use a specific policy for deciding when they should be Nothing,--- which becomes null in JSON.-instance ToJSON Measured where- toJSON Measured{..} = toJSON- (measTime, measCpuTime, measCycles, measIters,- i measAllocated, i measNumGcs, i measBytesCopied,- d measMutatorWallSeconds, d measMutatorCpuSeconds,- d measGcWallSeconds, d measMutatorCpuSeconds)- where i = fromInt; d = fromDouble--instance NFData Measured where- rnf Measured{} = ()---- THIS MUST REFLECT THE ORDER OF FIELDS IN THE DATA TYPE.------ The ordering is used by Javascript code to pick out the correct--- index into the vector that represents a Measured value in that--- world.-measureAccessors_ :: [(String, (Measured -> Maybe Double, String))]-measureAccessors_ = [- ("time", (Just . measTime,- "wall-clock time"))- , ("cpuTime", (Just . measCpuTime,- "CPU time"))- , ("cycles", (Just . fromIntegral . measCycles,- "CPU cycles"))- , ("iters", (Just . fromIntegral . measIters,- "loop iterations"))- , ("allocated", (fmap fromIntegral . fromInt . measAllocated,- "(+RTS -T) bytes allocated"))- , ("numGcs", (fmap fromIntegral . fromInt . measNumGcs,- "(+RTS -T) number of garbage collections"))- , ("bytesCopied", (fmap fromIntegral . fromInt . measBytesCopied,- "(+RTS -T) number of bytes copied during GC"))- , ("mutatorWallSeconds", (fromDouble . measMutatorWallSeconds,- "(+RTS -T) wall-clock time for mutator threads"))- , ("mutatorCpuSeconds", (fromDouble . measMutatorCpuSeconds,- "(+RTS -T) CPU time spent running mutator threads"))- , ("gcWallSeconds", (fromDouble . measGcWallSeconds,- "(+RTS -T) wall-clock time spent doing GC"))- , ("gcCpuSeconds", (fromDouble . measGcCpuSeconds,- "(+RTS -T) CPU time spent doing GC"))- ]---- | Field names in a 'Measured' record, in the order in which they--- appear.-measureKeys :: [String]-measureKeys = map fst measureAccessors_---- | Field names and accessors for a 'Measured' record.-measureAccessors :: Map String (Measured -> Maybe Double, String)-measureAccessors = fromList measureAccessors_---- | Normalise every measurement as if 'measIters' was 1.------ ('measIters' itself is left unaffected.)-rescale :: Measured -> Measured-rescale m@Measured{..} = m {- measTime = d measTime- , measCpuTime = d measCpuTime- , measCycles = i measCycles- -- skip measIters- , measNumGcs = i measNumGcs- , measBytesCopied = i measBytesCopied- , measMutatorWallSeconds = d measMutatorWallSeconds- , measMutatorCpuSeconds = d measMutatorCpuSeconds- , measGcWallSeconds = d measGcWallSeconds- , measGcCpuSeconds = d measGcCpuSeconds- } where- d k = maybe k (/ iters) (fromDouble k)- i k = maybe k (round . (/ iters)) (fromIntegral <$> fromInt k)- iters = fromIntegral measIters :: Double---- | Convert a (possibly unavailable) GC measurement to a true value.--- If the measurement is a huge negative number that corresponds to--- \"no data\", this will return 'Nothing'.-fromInt :: Int64 -> Maybe Int64-fromInt i | i == minBound = Nothing- | otherwise = Just i---- | Convert from a true value back to the packed representation used--- for GC measurements.-toInt :: Maybe Int64 -> Int64-toInt Nothing = minBound-toInt (Just i) = i---- | Convert a (possibly unavailable) GC measurement to a true value.--- If the measurement is a huge negative number that corresponds to--- \"no data\", this will return 'Nothing'.-fromDouble :: Double -> Maybe Double-fromDouble d | isInfinite d || isNaN d = Nothing- | otherwise = Just d---- | Convert from a true value back to the packed representation used--- for GC measurements.-toDouble :: Maybe Double -> Double-toDouble Nothing = -1/0-toDouble (Just d) = d--instance Binary Measured where- put Measured{..} = do- put measTime; put measCpuTime; put measCycles; put measIters- put measAllocated; put measNumGcs; put measBytesCopied- put measMutatorWallSeconds; put measMutatorCpuSeconds- put measGcWallSeconds; put measGcCpuSeconds- get = Measured <$> get <*> get <*> get <*> get- <*> get <*> get <*> get <*> get <*> get <*> get <*> get---- | Apply an argument to a function, and evaluate the result to weak--- head normal form (WHNF).-whnf :: (a -> b) -> a -> Benchmarkable-whnf = pureFunc id-{-# INLINE whnf #-}---- | Apply an argument to a function, and evaluate the result to--- normal form (NF).-nf :: NFData b => (a -> b) -> a -> Benchmarkable-nf = pureFunc rnf-{-# INLINE nf #-}--pureFunc :: (b -> c) -> (a -> b) -> a -> Benchmarkable-pureFunc reduce f0 x0 = toBenchmarkable (go f0 x0)- where go f x n- | n <= 0 = return ()- | otherwise = evaluate (reduce (f x)) >> go f x (n-1)-{-# INLINE pureFunc #-}---- | Perform an action, then evaluate its result to normal form.--- This is particularly useful for forcing a lazy 'IO' action to be--- completely performed.-nfIO :: NFData a => IO a -> Benchmarkable-nfIO = toBenchmarkable . impure rnf-{-# INLINE nfIO #-}---- | Perform an action, then evaluate its result to weak head normal--- form (WHNF). This is useful for forcing an 'IO' action whose result--- is an expression to be evaluated down to a more useful value.-whnfIO :: IO a -> Benchmarkable-whnfIO = toBenchmarkable . impure id-{-# INLINE whnfIO #-}--impure :: (a -> b) -> IO a -> Int64 -> IO ()-impure strategy a = go- where go n- | n <= 0 = return ()- | otherwise = a >>= (evaluate . strategy) >> go (n-1)-{-# INLINE impure #-}---- | Specification of a collection of benchmarks and environments. A--- benchmark may consist of:------ * An environment that creates input data for benchmarks, created--- with 'env'.------ * A single 'Benchmarkable' item with a name, created with 'bench'.------ * A (possibly nested) group of 'Benchmark's, created with 'bgroup'.-data Benchmark where- Environment :: NFData env- => IO env -> (env -> IO a) -> (env -> Benchmark) -> Benchmark- Benchmark :: String -> Benchmarkable -> Benchmark- BenchGroup :: String -> [Benchmark] -> Benchmark---- | Run a benchmark (or collection of benchmarks) in the given--- environment. The purpose of an environment is to lazily create--- input data to pass to the functions that will be benchmarked.------ A common example of environment data is input that is read from a--- file. Another is a large data structure constructed in-place.------ __Motivation.__ In earlier versions of criterion, all benchmark--- inputs were always created when a program started running. By--- deferring the creation of an environment when its associated--- benchmarks need the its, we avoid two problems that this strategy--- caused:------ * Memory pressure distorted the results of unrelated benchmarks.--- If one benchmark needed e.g. a gigabyte-sized input, it would--- force the garbage collector to do extra work when running some--- other benchmark that had no use for that input. Since the data--- created by an environment is only available when it is in scope,--- it should be garbage collected before other benchmarks are run.------ * The time cost of generating all needed inputs could be--- significant in cases where no inputs (or just a few) were really--- needed. This occurred often, for instance when just one out of a--- large suite of benchmarks was run, or when a user would list the--- collection of benchmarks without running any.------ __Creation.__ An environment is created right before its related--- benchmarks are run. The 'IO' action that creates the environment--- is run, then the newly created environment is evaluated to normal--- form (hence the 'NFData' constraint) before being passed to the--- function that receives the environment.------ __Complex environments.__ If you need to create an environment that--- contains multiple values, simply pack the values into a tuple.------ __Lazy pattern matching.__ In situations where a \"real\"--- environment is not needed, e.g. if a list of benchmark names is--- being generated, a value which throws an exception will be passed--- to the function that receives the environment. This avoids the--- overhead of generating an environment that will not actually be--- used.------ The function that receives the environment must use lazy pattern--- matching to deconstruct the tuple (e.g., @~(x, y)@, not @(x, y)@),--- as use of strict pattern matching will cause a crash if an--- exception-throwing value is passed in.------ __Example.__ This program runs benchmarks in an environment that--- contains two values. The first value is the contents of a text--- file; the second is a string. Pay attention to the use of a lazy--- pattern to deconstruct the tuple in the function that returns the--- benchmarks to be run.------ > setupEnv = do--- > let small = replicate 1000 (1 :: Int)--- > big <- map length . words <$> readFile "/usr/dict/words"--- > return (small, big)--- >--- > main = defaultMain [--- > -- notice the lazy pattern match here!--- > env setupEnv $ \ ~(small,big) -> bgroup "main" [--- > bgroup "small" [--- > bench "length" $ whnf length small--- > , bench "length . filter" $ whnf (length . filter (==1)) small--- > ]--- > , bgroup "big" [--- > bench "length" $ whnf length big--- > , bench "length . filter" $ whnf (length . filter (==1)) big--- > ]--- > ] ]------ __Discussion.__ The environment created in the example above is--- intentionally /not/ ideal. As Haskell's scoping rules suggest, the--- variable @big@ is in scope for the benchmarks that use only--- @small@. It would be better to create a separate environment for--- @big@, so that it will not be kept alive while the unrelated--- benchmarks are being run.-env :: NFData env =>- IO env- -- ^ Create the environment. The environment will be evaluated to- -- normal form before being passed to the benchmark.- -> (env -> Benchmark)- -- ^ Take the newly created environment and make it available to- -- the given benchmarks.- -> Benchmark-env alloc = Environment alloc noop---- | Same as `env`, but but allows for an additional callback--- to clean up the environment. Resource clean up is exception safe, that is,--- it runs even if the 'Benchmark' throws an exception.-envWithCleanup- :: NFData env- => IO env- -- ^ Create the environment. The environment will be evaluated to- -- normal form before being passed to the benchmark.- -> (env -> IO a)- -- ^ Clean up the created environment.- -> (env -> Benchmark)- -- ^ Take the newly created environment and make it available to- -- the given benchmarks.- -> Benchmark-envWithCleanup = Environment---- | Create a Benchmarkable where a fresh environment is allocated for every--- batch of runs of the benchmarkable.------ The environment is evaluated to normal form before the benchmark is run.------ When using 'whnf', 'whnfIO', etc. Criterion creates a 'Benchmarkable'--- whichs runs a batch of @N@ repeat runs of that expressions. Criterion may--- run any number of these batches to get accurate measurements. Environments--- created by 'env' and 'envWithCleanup', are shared across all these batches--- of runs.------ This is fine for simple benchmarks on static input, but when benchmarking--- IO operations where these operations can modify (and especially grow) the--- environment this means that later batches might have their accuracy effected--- due to longer, for example, longer garbage collection pauses.------ An example: Suppose we want to benchmark writing to a Chan, if we allocate--- the Chan using environment and our benchmark consists of @writeChan env ()@,--- the contents and thus size of the Chan will grow with every repeat. If--- Criterion runs a 1,000 batches of 1,000 repeats, the result is that the--- channel will have 999,000 items in it by the time the last batch is run.--- Since GHC GC has to copy the live set for every major GC this means our last--- set of writes will suffer a lot of noise of the previous repeats.------ By allocating a fresh environment for every batch of runs this function--- should eliminate this effect.-perBatchEnv- :: (NFData env, NFData b)- => (Int64 -> IO env)- -- ^ Create an environment for a batch of N runs. The environment will be- -- evaluated to normal form before running.- -> (env -> IO b)- -- ^ Function returning the IO action that should be benchmarked with the- -- newly generated environment.- -> Benchmarkable-perBatchEnv alloc = perBatchEnvWithCleanup alloc (const noop)---- | Same as `perBatchEnv`, but but allows for an additional callback--- to clean up the environment. Resource clean up is exception safe, that is,--- it runs even if the 'Benchmark' throws an exception.-perBatchEnvWithCleanup- :: (NFData env, NFData b)- => (Int64 -> IO env)- -- ^ Create an environment for a batch of N runs. The environment will be- -- evaluated to normal form before running.- -> (Int64 -> env -> IO ())- -- ^ Clean up the created environment.- -> (env -> IO b)- -- ^ Function returning the IO action that should be benchmarked with the- -- newly generated environment.- -> Benchmarkable-perBatchEnvWithCleanup alloc clean work- = Benchmarkable alloc clean (impure rnf . work) False---- | Create a Benchmarkable where a fresh environment is allocated for every--- run of the operation to benchmark. This is useful for benchmarking mutable--- operations that need a fresh environment, such as sorting a mutable Vector.------ As with 'env' and 'perBatchEnv' the environment is evaluated to normal form--- before the benchmark is run.------ This introduces extra noise and result in reduce accuracy compared to other--- Criterion benchmarks. But allows easier benchmarking for mutable operations--- than was previously possible.-perRunEnv- :: (NFData env, NFData b)- => IO env- -- ^ Action that creates the environment for a single run.- -> (env -> IO b)- -- ^ Function returning the IO action that should be benchmarked with the- -- newly genereted environment.- -> Benchmarkable-perRunEnv alloc = perRunEnvWithCleanup alloc noop---- | Same as `perRunEnv`, but but allows for an additional callback--- to clean up the environment. Resource clean up is exception safe, that is,--- it runs even if the 'Benchmark' throws an exception.-perRunEnvWithCleanup- :: (NFData env, NFData b)- => IO env- -- ^ Action that creates the environment for a single run.- -> (env -> IO ())- -- ^ Clean up the created environment.- -> (env -> IO b)- -- ^ Function returning the IO action that should be benchmarked with the- -- newly genereted environment.- -> Benchmarkable-perRunEnvWithCleanup alloc clean work = bm { perRun = True }- where- bm = perBatchEnvWithCleanup (const alloc) (const clean) work---- | Create a single benchmark.-bench :: String -- ^ A name to identify the benchmark.- -> Benchmarkable -- ^ An activity to be benchmarked.- -> Benchmark-bench = Benchmark---- | Group several benchmarks together under a common name.-bgroup :: String -- ^ A name to identify the group of benchmarks.- -> [Benchmark] -- ^ Benchmarks to group under this name.- -> Benchmark-bgroup = BenchGroup---- | Add the given prefix to a name. If the prefix is empty, the name--- is returned unmodified. Otherwise, the prefix and name are--- separated by a @\'\/\'@ character.-addPrefix :: String -- ^ Prefix.- -> String -- ^ Name.- -> String-addPrefix "" desc = desc-addPrefix pfx desc = pfx ++ '/' : desc---- | Retrieve the names of all benchmarks. Grouped benchmarks are--- prefixed with the name of the group they're in.-benchNames :: Benchmark -> [String]-benchNames (Environment _ _ b) = benchNames (b fakeEnvironment)-benchNames (Benchmark d _) = [d]-benchNames (BenchGroup d bs) = map (addPrefix d) . concatMap benchNames $ bs--instance Show Benchmark where- show (Environment _ _ b) = "Environment _ _" ++ show (b fakeEnvironment)- show (Benchmark d _) = "Benchmark " ++ show d- show (BenchGroup d _) = "BenchGroup " ++ show d--measure :: (U.Unbox a) => (Measured -> a) -> V.Vector Measured -> U.Vector a-measure f v = U.convert . V.map f $ v- -- | Outliers from sample data, calculated using the boxplot -- technique. data Outliers = Outliers {@@ -619,7 +141,7 @@ -- ^ Between 1.5 and 3 times the IQR above the third quartile. , highSevere :: !Int64 -- ^ More than 3 times the IQR above the third quartile.- } deriving (Eq, Read, Show, Typeable, Data, Generic)+ } deriving (Eq, Read, Show, Data, Generic) instance FromJSON Outliers instance ToJSON Outliers@@ -636,7 +158,7 @@ | Moderate -- ^ Between 10% and 50%. | Severe -- ^ Above 50% (i.e. measurements -- are useless).- deriving (Eq, Ord, Read, Show, Typeable, Data, Generic)+ deriving (Eq, Ord, Read, Show, Data, Generic) instance FromJSON OutlierEffect instance ToJSON OutlierEffect@@ -679,7 +201,7 @@ -- ^ Brief textual description of effect. , ovFraction :: Double -- ^ Quantitative description of effect (a fraction between 0 and 1).- } deriving (Eq, Read, Show, Typeable, Data, Generic)+ } deriving (Eq, Read, Show, Data, Generic) instance FromJSON OutlierVariance instance ToJSON OutlierVariance@@ -699,7 +221,7 @@ -- ^ Map from name to value of predictor coefficients. , regRSquare :: St.Estimate St.ConfInt Double -- ^ R² goodness-of-fit estimate.- } deriving (Eq, Read, Show, Typeable, Generic)+ } deriving (Eq, Read, Show, Generic) instance FromJSON Regression instance ToJSON Regression@@ -717,9 +239,6 @@ data SampleAnalysis = SampleAnalysis { anRegress :: [Regression] -- ^ Estimates calculated via linear regression.- , anOverhead :: Double- -- ^ Estimated measurement overhead, in seconds. Estimation is- -- performed via linear regression. , anMean :: St.Estimate St.ConfInt Double -- ^ Estimated mean. , anStdDev :: St.Estimate St.ConfInt Double@@ -727,19 +246,19 @@ , anOutlierVar :: OutlierVariance -- ^ Description of the effects of outliers on the estimated -- variance.- } deriving (Eq, Read, Show, Typeable, Generic)+ } deriving (Eq, Read, Show, Generic) instance FromJSON SampleAnalysis instance ToJSON SampleAnalysis instance Binary SampleAnalysis where put SampleAnalysis{..} = do- put anRegress; put anOverhead; put anMean; put anStdDev; put anOutlierVar- get = SampleAnalysis <$> get <*> get <*> get <*> get <*> get+ put anRegress; put anMean; put anStdDev; put anOutlierVar+ get = SampleAnalysis <$> get <*> get <*> get <*> get instance NFData SampleAnalysis where rnf SampleAnalysis{..} =- rnf anRegress `seq` rnf anOverhead `seq` rnf anMean `seq`+ rnf anRegress `seq` rnf anMean `seq` rnf anStdDev `seq` rnf anOutlierVar -- | Data for a KDE chart of performance.@@ -747,7 +266,7 @@ kdeType :: String , kdeValues :: U.Vector Double , kdePDF :: U.Vector Double- } deriving (Eq, Read, Show, Typeable, Data, Generic)+ } deriving (Eq, Read, Show, Data, Generic) instance FromJSON KDE instance ToJSON KDE@@ -768,16 +287,14 @@ , reportKeys :: [String] -- ^ See 'measureKeys'. , reportMeasured :: V.Vector Measured- -- ^ Raw measurements. These are /not/ corrected for the- -- estimated measurement overhead that can be found via the- -- 'anOverhead' field of 'reportAnalysis'.+ -- ^ Raw measurements. , reportAnalysis :: SampleAnalysis -- ^ Report analysis. , reportOutliers :: Outliers -- ^ Analysis of outliers. , reportKDEs :: [KDE] -- ^ Data for a KDE of times.- } deriving (Eq, Read, Show, Typeable, Generic)+ } deriving (Eq, Read, Show, Generic) instance FromJSON Report instance ToJSON Report@@ -798,7 +315,7 @@ data DataRecord = Measurement Int String (V.Vector Measured) | Analysed Report- deriving (Eq, Read, Show, Typeable, Generic)+ deriving (Eq, Read, Show, Generic) instance Binary DataRecord where put (Measurement i n v) = putWord8 0 >> put i >> put n >> put v
− Criterion/Types/Internal.hs
@@ -1,21 +0,0 @@--- |--- Module : Criterion.Types.Internal--- Copyright : (c) 2017 Ryan Scott------ License : BSD-style--- Maintainer : bos@serpentine.com--- Stability : experimental--- Portability : GHC------ Exports 'fakeEnvironment'.-module Criterion.Types.Internal (fakeEnvironment) where---- | A dummy environment that is passed to functions that create benchmarks--- from environments when no concrete environment is available.-fakeEnvironment :: env-fakeEnvironment = error $ unlines- [ "Criterion atttempted to retrieve a non-existent environment!"- , "\tPerhaps you forgot to use lazy pattern matching in a function which"- , "\tconstructs benchmarks from an environment?"- , "\t(see the documentation for `env` for details)"- ]
README.markdown view
@@ -1,43 +1,660 @@ # Criterion: robust, reliable performance measurement -[](https://travis-ci.org/bos/criterion)+[](https://hackage.haskell.org/package/criterion) [](https://github.com/haskell/criterion/actions?query=workflow%3AHaskell-CI) -This package provides the Criterion module, a Haskell library for-measuring and analysing software performance.+`criterion` is a library that makes accurate microbenchmarking in+Haskell easy. -<a href="http://www.serpentine.com/criterion/fibber.html" target="_blank"><img src="http://www.serpentine.com/criterion/fibber-screenshot.png"></img></a>+<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a> -To get started, read the <a-href="http://www.serpentine.com/criterion/tutorial.html"-target="_blank">online tutorial</a>, and take a look at the programs-in the <a href="/examples"-target="_blank">examples directory</a>. +## Features -# Building and installing+* The simple API hides a lot of automation and details that you+ shouldn't need to worry about. -To build and install criterion, just run+* Sophisticated, high-resolution analysis which can accurately measure+ operations that run in as little as a few hundred picoseconds. - cabal install criterion+* [Output to active HTML](https://hackage.haskell.org/package/criterion/src/www/report.html) (with JavaScript charts), CSV,+ and JSON. Write your own report templates to customize exactly how+ your results are presented. +* Linear regression model that allows measuring the effects of garbage+ collection and other factors. -# Get involved!+* Measurements are cross-validated to ensure that sources of+ significant noise (usually other activity on the system) can be+ identified. ++To get started, read the [tutorial below](#tutorial), and take a look+at the programs in the [examples+directory](https://github.com/haskell/criterion/tree/master/examples).+++## Credits and contacts++This library is written by Bryan O'Sullivan+(<bos@serpentine.com>) and maintained by Ryan Scott (<ryan.gl.scott@gmail.com>). Please report bugs via the-[github issue tracker](https://github.com/bos/criterion/issues).+[GitHub issue tracker](https://github.com/haskell/criterion/issues). -Master [github repository](https://github.com/bos/criterion): -* `git clone https://github.com/bos/criterion.git`+# Tutorial -There's also a [Mercurial mirror](https://bitbucket.org/bos/criterion): -* `hg clone https://bitbucket.org/bos/criterion`+## Getting started -(You can create and contribute changes using either Mercurial or git.)+Here's `Fibber.hs`: a simple and complete benchmark, measuring the performance of+the ever-ridiculous `fib` function. +```haskell+{- cabal:+build-depends: base, criterion+-} -# Authors+import Criterion.Main -This library is written and maintained by Bryan O'Sullivan,-<bos@serpentine.com>.+-- The function we're benchmarking.+fib :: Int -> Int+fib m | m < 0 = error "negative!"+ | otherwise = go m+ where+ go 0 = 0+ go 1 = 1+ go n = go (n - 1) + go (n - 2)++-- Our benchmark harness.+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs))++The+[`defaultMain`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:defaultMain)+function takes a list of+[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark)+values, each of which describes a function to benchmark. (We'll come+back to `bench` and `whnf` shortly, don't worry.)++To maximise our convenience, `defaultMain` will parse command line+arguments and then run any benchmarks we ask. Let's run our benchmark+program (it might take some time if you never used Criterion before, since+the library has to be downloaded and compiled).++```+$ cabal run Fibber.hs+benchmarking fib/1+time 13.77 ns (13.49 ns .. 14.07 ns)+ 0.998 R² (0.997 R² .. 1.000 R²)+mean 13.56 ns (13.49 ns .. 13.70 ns)+std dev 305.1 ps (64.14 ps .. 532.5 ps)+variance introduced by outliers: 36% (moderately inflated)++benchmarking fib/5+time 173.9 ns (172.8 ns .. 175.6 ns)+ 1.000 R² (0.999 R² .. 1.000 R²)+mean 173.8 ns (173.1 ns .. 175.4 ns)+std dev 3.149 ns (1.842 ns .. 5.954 ns)+variance introduced by outliers: 23% (moderately inflated)++benchmarking fib/9+time 1.219 μs (1.214 μs .. 1.228 μs)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 1.219 μs (1.216 μs .. 1.223 μs)+std dev 12.43 ns (9.907 ns .. 17.29 ns)++benchmarking fib/11+time 3.253 μs (3.246 μs .. 3.260 μs)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 3.248 μs (3.243 μs .. 3.254 μs)+std dev 18.94 ns (16.57 ns .. 21.95 ns)++```++Even better, the `--output` option directs our program to write a+report to the file [`fibber.html`](fibber.html).++```shellsession+$ cabal run Fibber.hs -- --output fibber.html+...similar output as before...+```++Click on the image to see a complete report. If you mouse over the data+points in the charts, you'll see that they are *live*, giving additional+information about what's being displayed.++<a href="https://hackage.haskell.org/package/criterion/src/www/fibber.html" target="_blank"><img src="https://hackage.haskell.org/package/criterion/src/www/fibber-screenshot.png"></a>+++### Understanding charts++A report begins with a summary of all the numbers measured.+Underneath is a breakdown of every benchmark, each with two charts and+some explanation.++The chart on the left is a+[kernel density estimate](https://en.wikipedia.org/wiki/Kernel_density_estimation)+(also known as a KDE) of time measurements. This graphs the+*probability* of any given time measurement occurring. A spike+indicates that a measurement of a particular time occurred; its height+indicates how often that measurement was repeated.++> [!NOTE]+> **Why not use a histogram?**+> +> A more popular alternative to the KDE for this kind of display is the+> [histogram](https://en.wikipedia.org/wiki/Histogram). Why do we use a+> KDE instead? In order to get good information out of a histogram, you+> have to+> [choose a suitable bin size](https://en.wikipedia.org/wiki/Histogram#Number_of_bins_and_width).+> This is a fiddly manual task. In contrast, a KDE is likely to be+> informative immediately, with no configuration required.++The chart on the right contains the raw measurements from which the+kernel density estimate was built. The $x$ axis indicates the number+of loop iterations, while the $y$ axis shows measured execution time+for the given number of iterations. The line “behind” the values is a+linear regression generated from this data. Ideally, all measurements+will be on (or very near) this line.+++### Understanding the data under a chart++Underneath the chart for each benchmark is a small table of+information that looks like this.++| | lower bound | estimate | upper bound |+|----------------------|-------------|------------|-------------|+| OLS regression | 31.0 ms | 37.4 ms | 42.9 ms |+| R² goodness-of-fit | 0.887 | 0.942 | 0.994 |+| Mean execution time | 34.8 ms | 37.0 ms | 43.1 ms |+| Standard deviation | 2.11 ms | 6.49 ms | 11.0 ms |++The second row is the result of a linear regression run on the measurements displayed in the right-hand chart.++* “**OLS regression**” estimates the time needed for a single+ execution of the activity being benchmarked, using an+ [ordinary least-squares regression model](https://en.wikipedia.org/wiki/Ordinary_least_squares).+ This number should be similar to the “mean execution time” row a+ couple of rows beneath. The OLS estimate is usually more accurate+ than the mean, as it more effectively eliminates measurement+ overhead and other constant factors.++* “**R² goodness-of-fit**” is a measure of how accurately the linear+ regression model fits the observed measurements. If the measurements+ are not too noisy, R² should lie between 0.99 and 1, indicating an+ excellent fit. If the number is below 0.99, something is confounding+ the accuracy of the linear model. A value below 0.9 is outright+ worrisome.++* “**Mean execution time**” and “**Standard deviation**” are+ statistics calculated (more or less) from execution time divided by+ number of iterations.++On either side of the main column of values are greyed-out lower and+upper bounds. These measure the *accuracy* of the main estimate using+a statistical technique called+[*bootstrapping*](https://en.wikipedia.org/wiki/Bootstrapping_(statistics)). This+tells us that when randomly resampling the data, 95% of estimates fell+within between the lower and upper bounds. When the main estimate is+of good quality, the lower and upper bounds will be close to its+value.+++## Reading command line output++Before you look at HTML reports, you'll probably start by inspecting+the report that criterion prints in your terminal window.++```+benchmarking ByteString/HashMap/random+time 4.046 ms (4.020 ms .. 4.072 ms)+ 1.000 R² (1.000 R² .. 1.000 R²)+mean 4.017 ms (4.010 ms .. 4.027 ms)+std dev 27.12 μs (20.45 μs .. 38.17 μs)+```++The first column is a name; the second is an estimate. The third and+fourth, in parentheses, are the 95% lower and upper bounds on the+estimate.++* `time` corresponds to the “OLS regression” field in the HTML table+ above.++* `R²` is the goodness-of-fit metric for `time`.++* `mean` and `std dev` have the same meanings as “Mean execution time”+ and “Standard deviation” in the HTML table.+++## How to write a benchmark suite++A criterion benchmark suite consists of a series of+[`Benchmark`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmark)+values.++```haskell+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+++We group related benchmarks together using the+[`bgroup`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bgroup)+function. Its first argument is a name for the group of benchmarks.++```haskell+bgroup :: String -> [Benchmark] -> Benchmark+```++All the magic happens with the+[`bench`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:bench)+function. The first argument to `bench` is a name that describes the+activity we're benchmarking.++```haskell+bench :: String -> Benchmarkable -> Benchmark+bench = Benchmark+```++The+[`Benchmarkable`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#t:Benchmarkable)+type is a container for code that can be benchmarked.++By default, criterion allows two kinds of code to be benchmarked.++* Any `IO` action can be benchmarked directly.++* With a little trickery, we can benchmark pure functions.+++### Benchmarking an `IO` action++This function shows how we can benchmark an `IO` action.++```haskell+import Criterion.Main++main = defaultMain [+ bench "readFile" $ nfIO (readFile "GoodReadFile.hs")+ ]+```+([examples/GoodReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/GoodReadFile.hs))++We use+[`nfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nfIO)+to specify that after we run the `IO` action, its result must be+evaluated to <span id="normal-form">normal form</span>, i.e. so that+all of its internal constructors are fully evaluated, and it contains+no thunks.++```haskell+nfIO :: NFData a => IO a -> Benchmarkable+```++Rules of thumb for when to use `nfIO`:++* Any time that lazy I/O is involved, use `nfIO` to avoid resource+ leaks.++* If you're not sure how much evaluation will have been performed on+ the result of an action, use `nfIO` to be certain that it's fully+ evaluated.+++### `IO` and `seq`++In addition to `nfIO`, criterion provides a+[`whnfIO`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnfIO)+function that evaluates the result of an action only deep enough for+the outermost constructor to be known (using `seq`). This is known as+<span id="weak-head-normal-form">**weak head normal form** (WHNF)</span>.++```haskell+whnfIO :: IO a -> Benchmarkable+```++This function is useful if your `IO` action returns a simple value+like an `Int`, or something more complex like a+[`Map`](http://hackage.haskell.org/package/containers/docs/Data-Map-Lazy.html#t:Map)+where evaluating the outermost constructor will do “enough work”.+++## Be careful with lazy I/O!++Experienced Haskell programmers don't use lazy I/O very often, and+here's an example of why: if you try to run the benchmark below, it+will probably *crash*.++```haskell+import Criterion.Main++main = defaultMain [+ bench "whnfIO readFile" $ whnfIO (readFile "BadReadFile.hs")+ ]+```+([examples/BadReadFile.hs](https://github.com/haskell/criterion/blob/master/examples/BadReadFile.hs))++The reason for the crash is that `readFile` reads the contents of a+file lazily: it can't close the file handle until whoever opened the+file reads the whole thing. Since `whnfIO` only evaluates the very+first constructor after the file is opened, the benchmarking loop+causes a large number of open files to accumulate, until the+inevitable occurs:++```shellsession+$ ./BadReadFile+benchmarking whnfIO readFile+openFile: resource exhausted (Too many open files)+```+++## Beware “pretend” I/O!++GHC is an aggressive compiler. If you have an `IO` action that+doesn't really interact with the outside world, *and* it has just the+right structure, GHC may notice that a substantial amount of its+computation can be memoised via “let-floating”.++There exists a+[somewhat contrived example](https://github.com/haskell/criterion/blob/master/examples/ConduitVsPipes.hs)+of this problem, where the first two benchmarks run between 40 and+40,000 times faster than they “should”.++As always, if you see numbers that look wildly out of whack, you+shouldn't rejoice that you have magically achieved fast+performance—be skeptical and investigate!+++> [!TIP]+> **Defeating let-floating**+> +> Fortunately for this particular misbehaving benchmark suite, GHC has+> an option named+> [`-fno-full-laziness`](https://downloads.haskell.org/ghc/latest/docs/users_guide/using-optimisation.html#ghc-flag-ffull-laziness)+> that will turn off let-floating and restore the first two benchmarks+> to performing in line with the second two.+>+> You should not react by simply throwing `-fno-full-laziness` into+> every GHC-and-criterion command line, as let-floating helps with+> performance more often than it hurts with benchmarking.+++## Benchmarking pure functions++Lazy evaluation makes it tricky to benchmark pure code. If we tried to+saturate a function with all of its arguments and evaluate it+repeatedly, laziness would ensure that we'd only do “real work” the+first time through our benchmarking loop. The expression would be+overwritten with that result, and no further work would happen on+subsequent loops through our benchmarking harness.++We can defeat laziness by benchmarking an *unsaturated* function—one+that has been given *all but one* of its arguments.++This is why the+[`nf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:nf)+function accepts two arguments: the first is the almost-saturated+function we want to benchmark, and the second is the final argument to+give it.++```haskell+nf :: NFData b => (a -> b) -> a -> Benchmarkable+```++As the+[`NFData`](http://hackage.haskell.org/package/deepseq/docs/Control-DeepSeq.html#t:NFData)+constraint suggests, `nf` applies the argument to the function, then+evaluates the result to <a href="#normal-form">normal form</a>.++The+[`whnf`](http://hackage.haskell.org/package/criterion/docs/Criterion-Main.html#v:whnf)+function evaluates the result of a function only to <a+href="#weak-head-normal-form">weak head normal form</a> (WHNF).++```haskell+whnf :: (a -> b) -> a -> Benchmarkable+```++If we go back to our first example, we can now fully understand what's+going on.++```haskell+main = defaultMain [+ bgroup "fib" [ bench "1" $ whnf fib 1+ , bench "5" $ whnf fib 5+ , bench "9" $ whnf fib 9+ , bench "11" $ whnf fib 11+ ]+ ]+```+([examples/Fibber.hs](https://github.com/haskell/criterion/blob/master/examples/Fibber.hs))++We can get away with using `whnf` here because we know that an+`Int` has only one constructor, so there's no deeper buried+structure that we'd have to reach using `nf`.++As with benchmarking `IO` actions, there's no clear-cut case for when+to use `whfn` versus `nf`, especially when a result may be lazily+generated.++Guidelines for thinking about when to use `nf` or `whnf`:++* If a result is a lazy structure (or a mix of strict and lazy, such+ as a balanced tree with lazy leaves), how much of it would a+ real-world caller use? You should be trying to evaluate as much of+ the result as a realistic consumer would. Blindly using `nf` could+ cause way too much unnecessary computation.++* If a result is something simple like an `Int`, you're probably safe+ using `whnf`—but then again, there should be no additional cost to+ using `nf` in these cases.+++## Using the criterion command line++By default, a criterion benchmark suite simply runs all of its+benchmarks. However, criterion accepts a number of arguments to+control its behaviour. Run your program with `--help` for a complete+list.+++### Specifying benchmarks to run++The most common thing you'll want to do is specify which benchmarks+you want to run. You can do this by simply enumerating each+benchmark.++```shellsession+$ ./Fibber 'fib/fib 1'+```++By default, any names you specify are treated as prefixes to match, so+you can specify an entire group of benchmarks via a name like+`"fib/"`. Use the `--match` option to control this behaviour. There are+currently four ways to configure `--match`:++* `--match prefix`: Check if the given string is a prefix of a benchmark+ path. For instance, `"foo"` will match `"foobar"`.++* `--match glob`: Use the given string as a Unix-style glob pattern. Bear in+ mind that performing a glob match on benchmarks names is done as if they were+ file paths, so for instance both `"*/ba*"` and `"*/*"` will match `"foo/bar"`,+ but neither `"*"` nor `"*bar"` will match `"foo/bar"`.++* `--match pattern`: Check if the given string is a substring (not necessarily+ just a prefix) of a benchmark path. For instance `"ooba"` will match+ `"foobar"`.++* `--match ipattern`: Check if the given string is a substring (not necessarily+ just a prefix) of a benchmark path, but in a case-insensitive fashion. For+ instance, `"oObA"` will match `"foobar"`.++### Listing benchmarks++If you've forgotten the names of your benchmarks, run your program+with `--list` and it will print them all.+++### How long to spend measuring data++By default, each benchmark runs for 5 seconds.++You can control this using the `--time-limit` option, which specifies+the minimum number of seconds (decimal fractions are acceptable) that+a benchmark will spend gathering data. The actual amount of time+spent may be longer, if more data is needed.+++### Writing out data++Criterion provides several ways to save data.++The friendliest is as HTML, using `--output`. Files written using+`--output` are actually generated from Mustache-style templates. The+only other template provided by default is `json`, so if you run with+`--template json --output mydata.json`, you'll get a big JSON dump of+your data.++You can also write out a basic CSV file using `--csv`, a JSON file using+`--json`, and a JUnit-compatible XML file using `--junit`. (The contents+of these files are likely to change in the not-too-distant future.)+++## Linear regression++If you want to perform linear regressions on metrics other than+elapsed time, use the `--regress` option. This can be tricky to use+if you are not familiar with linear regression, but here's a thumbnail+sketch.++The purpose of linear regression is to predict how much one variable+(the *responder*) will change in response to a change in one or more+others (the *predictors*).++On each step through a benchmark loop, criterion changes the number of+iterations. This is the most obvious choice for a predictor+variable. This variable is named `iters`.++If we want to regress CPU time (`cpuTime`) against iterations, we can+use `cpuTime:iters` as the argument to `--regress`. This generates+some additional output on the command line:++```+time 31.31 ms (30.44 ms .. 32.22 ms)+ 0.997 R² (0.994 R² .. 0.999 R²)+mean 30.56 ms (30.01 ms .. 30.99 ms)+std dev 1.029 ms (754.3 μs .. 1.503 ms)++cpuTime: 0.997 R² (0.994 R² .. 0.999 R²)+ iters 3.129e-2 (3.039e-2 .. 3.221e-2)+ y -4.698e-3 (-1.194e-2 .. 1.329e-3)+```++After the block of normal data, we see a series of new rows.++On the first line of the new block is an R² goodness-of-fit measure,+so we can see how well our choice of regression fits the data.++On the second line, we get the slope of the `cpuTime`/`iters` curve,+or (stated another way) how much `cpuTime` each iteration costs.++The last entry is the $y$-axis intercept.+++### Measuring garbage collector statistics++By default, GHC does not collect statistics about the operation of its+garbage collector. If you want to measure and regress against GC+statistics, you must explicitly enable statistics collection at+runtime using `+RTS -T`.+++### Useful regressions++| regression | `--regress` | notes+| -------------------------------|------------------- |-----------+| CPU cycles | `cycles:iters` |+| Bytes allocated | `allocated:iters` | `+RTS -T`+| Number of garbage collections | `numGcs:iters` | `+RTS -T`+| CPU frequency | `cycles:time` |+++## Tips, tricks, and pitfalls++While criterion tries hard to automate as much of the benchmarking+process as possible, there are some things you will want to pay+attention to.++* Measurements are only as good as the environment in which they're+ gathered. Try to make sure your computer is quiet when measuring+ data.++* Be judicious in when you choose `nf` and `whnf`. Always think about+ what the result of a function is, and how much of it you want to+ evaluate.++* Simply rerunning a benchmark can lead to variations of a few percent+ in numbers. This variation can have many causes, including address+ space layout randomization, recompilation between runs, cache+ effects, CPU thermal throttling, and the phase of the moon. Don't+ treat your first measurement as golden!++* Keep an eye out for completely bogus numbers, as in the case of+ `-fno-full-laziness` above.++* When you need trustworthy results from a benchmark suite, run each+ measurement as a separate invocation of your program. When you run+ a number of benchmarks during a single program invocation, you will+ sometimes see them interfere with each other.+++### How to sniff out bogus results++If some external factors are making your measurements noisy, criterion+tries to make it easy to tell. At the level of raw data, noisy+measurements will show up as “outliers”, but you shouldn't need to+inspect the raw data directly.++The easiest yellow flag to spot is the R² goodness-of-fit measure+dropping below 0.9. If this happens, scrutinise your data carefully.++Another easy pattern to look for is severe outliers in the raw+measurement chart when you're using `--output`. These should be easy+to spot: they'll be points sitting far from the linear regression line+(usually above it).++If the lower and upper bounds on an estimate aren't “tight” (close to+the estimate), this suggests that noise might be having some kind of+negative effect.++A warning about “variance introduced by outliers” may be printed.+This indicates the degree to which the standard deviation is inflated+by outlying measurements, as in the following snippet (notice that the+lower and upper bounds aren't all that tight, too).++```+std dev 652.0 ps (507.7 ps .. 942.1 ps)+variance introduced by outliers: 91% (severely inflated)+```++## Generating (HTML) reports from previous benchmarks with criterion-report++If you want to post-process benchmark data before generating a HTML report you+can use the `criterion-report` executable to generate HTML reports from+criterion generated JSON. To store the benchmark results run criterion with the+`--json` flag to specify where to store the results. You can then use:+`criterion-report data.json report.html` to generate a HTML report of the data.+`criterion-report` also accepts the `--template` flag accepted by criterion.
app/Options.hs view
@@ -7,17 +7,18 @@ , versionInfo ) where -import Data.Monoid ((<>), mconcat)+import Data.Data (Data) import Data.Version (showVersion)-import Data.Data (Data, Typeable) import GHC.Generics (Generic) import Paths_criterion (version)+import Prelude ()+import Prelude.Compat import Options.Applicative data CommandLine = Report { jsonFile :: FilePath, outputFile :: FilePath, templateFile :: FilePath } | Version- deriving (Eq, Read, Show, Typeable, Data, Generic)+ deriving (Eq, Read, Show, Data, Generic) reportOptions :: Parser CommandLine reportOptions = Report <$> measurements <*> outputFile <*> templateFile
− cbits/cycles.c
@@ -1,57 +0,0 @@-#include "Rts.h"--#if x86_64_HOST_ARCH || i386_HOST_ARCH--StgWord64 criterion_rdtsc(void)-{- StgWord32 hi, lo;- __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));- return ((StgWord64) lo) | (((StgWord64) hi)<<32);-}--#elif linux_HOST_OS--/*- * This should work on all Linux.- *- * Technique by Austin Seipp found here:- *- * http://neocontra.blogspot.com/2013/05/user-mode-performance-counters-for.html- */--#include <unistd.h>-#include <asm-generic/unistd.h>-#include <linux/perf_event.h>--static int fddev = -1;-__attribute__((constructor))-static void-init(void)-{- static struct perf_event_attr attr;- attr.type = PERF_TYPE_HARDWARE;- attr.config = PERF_COUNT_HW_CPU_CYCLES;- fddev = syscall (__NR_perf_event_open, &attr, 0, -1, -1, 0);-}--__attribute__((destructor))-static void-fini(void)-{- close(fddev);-}--StgWord64-criterion_rdtsc (void)-{- StgWord64 result = 0;- if (read (fddev, &result, sizeof(result)) < sizeof(result))- return 0;- return result;-}--#else--#error Unsupported OS/architecture/compiler!--#endif
− cbits/time-osx.c
@@ -1,35 +0,0 @@-#include <mach/mach.h>-#include <mach/mach_time.h>--static mach_timebase_info_data_t timebase_info;-static double timebase_recip;--void criterion_inittime(void)-{- if (timebase_recip == 0) {- mach_timebase_info(&timebase_info);- timebase_recip = (timebase_info.denom / timebase_info.numer) / 1e9;- }-}--double criterion_gettime(void)-{- return mach_absolute_time() * timebase_recip;-}--static double to_double(time_value_t time)-{- return time.seconds + time.microseconds / 1e6;-}--double criterion_getcputime(void)-{- struct task_thread_times_info thread_info_data;- mach_msg_type_number_t thread_info_count = TASK_THREAD_TIMES_INFO_COUNT;- kern_return_t kr = task_info(mach_task_self(),- TASK_THREAD_TIMES_INFO,- (task_info_t) &thread_info_data,- &thread_info_count);- return (to_double(thread_info_data.user_time) +- to_double(thread_info_data.system_time));-}
− cbits/time-posix.c
@@ -1,24 +0,0 @@-#include <time.h>--void criterion_inittime(void)-{-}--double criterion_gettime(void)-{- struct timespec ts;-- clock_gettime(CLOCK_MONOTONIC, &ts);-- return ts.tv_sec + ts.tv_nsec * 1e-9;-}---double criterion_getcputime(void)-{- struct timespec ts;-- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);-- return ts.tv_sec + ts.tv_nsec * 1e-9;-}
− cbits/time-windows.c
@@ -1,80 +0,0 @@-/*- * Windows has the most amazingly cretinous time measurement APIs you- * can possibly imagine.- *- * Our first possibility is GetSystemTimeAsFileTime, which updates at- * roughly 60Hz, and is hence worthless - we'd have to run a- * computation for tens or hundreds of seconds to get a trustworthy- * number.- *- * Alternatively, we can use QueryPerformanceCounter, which has- * undefined behaviour under almost all interesting circumstances- * (e.g. multicore systems, CPU frequency changes). But at least it- * increments reasonably often.- */--#include <windows.h>--#if 0--void criterion_inittime(void)-{-}--double criterion_gettime(void)-{- FILETIME ft;- ULARGE_INTEGER li;-- GetSystemTimeAsFileTime(&ft);- li.LowPart = ft.dwLowDateTime;- li.HighPart = ft.dwHighDateTime;-- return (li.QuadPart - 130000000000000000ull) * 1e-7;-}--#else--static double freq_recip;-static LARGE_INTEGER firstClock;--void criterion_inittime(void)-{- LARGE_INTEGER freq;-- if (freq_recip == 0) {- QueryPerformanceFrequency(&freq);- QueryPerformanceCounter(&firstClock);- freq_recip = 1.0 / freq.QuadPart;- }-}--double criterion_gettime(void)-{- LARGE_INTEGER li;-- QueryPerformanceCounter(&li);-- return ((double) (li.QuadPart - firstClock.QuadPart)) * freq_recip;-}--#endif--static ULONGLONG to_quad_100ns(FILETIME ft)-{- ULARGE_INTEGER li;- li.LowPart = ft.dwLowDateTime;- li.HighPart = ft.dwHighDateTime;- return li.QuadPart;-}--double criterion_getcputime(void)-{- FILETIME creation, exit, kernel, user;- ULONGLONG time;-- GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user);-- time = to_quad_100ns(user) + to_quad_100ns(kernel);- return time / 1e7;-}
changelog.md view
@@ -1,3 +1,242 @@+1.6.5.0++* Make the test suite work with `tasty-1.5.4` or later.+* Remove unused `parsec`, `time`, and `vector-algorithms` dependencies.++1.6.4.1++* Merge tutorial into README.++1.6.4.0++* Drop support for pre-8.0 versions of GHC.++1.6.3.0++* Remove a use of the partial `head` function within `criterion`.++1.6.2.0++* Require `optparse-applicative-0.18.*` as the minimum and add an explicit+ dependency on `prettyprinter` and `prettyprinter-ansi-terminal`.++1.6.1.0++* Support building with `optparse-applicative-0.18.*`.++1.6.0.0++* `criterion-measurement-0.2.0.0` adds the `measPeakMbAllocated` field to+ `Measured` for reporting maximum megabytes allocated. Since `criterion`+ re-exports `Measured` from `Criterion.Types`, this change affects `criterion`+ as well. Naturally, this affects the behavior of `Measured`'s `{To,From}JSON`+ and `Binary` instances.+* Fix a bug in which the `--help` text for the `--match` option was printed+ twice in `criterion` applications.++1.5.13.0++* Allow building with `optparse-applicative-0.17.*`.++1.5.12.0++* Fix a bug introduced in version 1.5.9.0 in which benchmark names that include+ double quotes would produce broken HTML reports.++1.5.11.0++* Allow building with `aeson-2.0.0.0`.++1.5.10.0++* Fix a bug in which the `defaultMainWith` function would not use the+ `regressions` values specified in the `Config` argument. This bug only+ affected `criterion` the library—uses of the `--regressions` flag from+ `criterion` executables themselves were unaffected.++1.5.9.0++* Fix a bug where HTML reports failed to escape JSON properly.++1.5.8.0++* The HTML reports have been reworked.++ * The `flot` plotting library (`js-flot` on Hackage) has been replaced by+ `Chart.js` (`js-chart`).+ * Most practical changes focus on improving the functionality of the overview+ chart:+ * It now supports logarithmic scale (#213). The scale can be toggled by+ clicking the x-axis.+ * Manual zooming has been replaced by clicking to focus a single bar.+ * It now supports a variety of sort orders.+ * The legend can now be toggled on/off and is hidden by default.+ * Clicking the name of a group in the legend shows/hides all bars in that+ group.+ * The regression line on the scatter plot shows confidence interval.+ * Better support for mobile and print.+ * JSON escaping has been made more robust by no longer directly injecting+ reports as JavaScript code.++1.5.7.0++* Warn if an HTML report name contains newlines, and replace newlines with+ whitespace to avoid syntax errors in the report itself.++1.5.6.2++* Use unescaped HTML in the `json.tpl` template.++1.5.6.1++* Bundle `criterion-examples`' `LICENSE` file.++1.5.6.0++* Allow building with `base-compat-batteries-0.11`.++1.5.5.0++* Fix the build on old GHCs with the `embed-data-files` flag.+* Require `transformers-compat-0.6.4` or later.++1.5.4.0++* Add `parserWith`, which allows creating a `criterion` command-line interface+ using a custom `optparse-applicative` `Parser`. This is usefule for sitations+ where one wants to add additional command-line arguments to the default ones+ that `criterion` provides.++ For an example of how to use `parserWith`, refer to+ `examples/ExtensibleCLI.hs`.++* Tweak the way the graph in the HTML overview zooms:++ * Zooming all the way out resets to the default view (instead of continuing+ to zoom out towards empty space).+ * Panning all the way to the right resets to the default view in which zero+ is left-aligned (instead of continuing to pan off the edge of the graph).+ * Panning and zooming only affecs the x-axis, so all results remain in-frame.++1.5.3.0++* Make more functions (e.g., `runMode`) able to print the `µ` character on+ non-UTF-8 encodings.++1.5.2.0++* Fix a bug in which HTML reports would render incorrectly when including+ benchmark names containing apostrophes.++* Only incur a dependency on `fail` on old GHCs.++1.5.1.0++* Add a `MonadFail Criterion` instance.++* Add some documentation in `Criterion.Main` about `criterion-measurement`'s+ new `nfAppIO` and `whnfAppIO` functions, which `criterion` reexports.++1.5.0.0++* Move the measurement functionality of `criterion` into a standalone package,+ `criterion-measurement`. In particular, `cbits/` and `Criterion.Measurement`+ are now in `criterion-measurement`, along with the relevant definitions of+ `Criterion.Types` and `Criterion.Types.Internal` (both of which are now under+ the `Criterion.Measurement.*` namespace).+ Consequently, `criterion` now depends on `criterion-measurement`.++ This will let other libraries (e.g. alternative statistical analysis+ front-ends) to import the measurement functionality alone as a lightweight+ dependency.++* Fix a bug on macOS and Windows where using `runAndAnalyse` and other+ lower-level benchmarking functions would result in an infinite loop.++1.4.1.0++* Use `base-compat-batteries`.++1.4.0.0++* We now do three samples for statistics:++ * `performMinorGC` before the first sample, to ensure it's up to date.+ * Take another sample after the action, without a garbage collection, so we+ can gather legitimate readings on GC-related statistics.+ * Then `performMinorGC` and sample once more, so we can get up-to-date+ readings on other metrics.++ The type of `applyGCStatistics` has changed accordingly. Before, it was:++ ```haskell+ Maybe GCStatistics -- ^ Statistics gathered at the end of a run.+ -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run.+ -> Measured -> Measured+ ```++ Now, it is:++ ```haskell+ Maybe GCStatistics -- ^ Statistics gathered at the end of a run, post-GC.+ -> Maybe GCStatistics -- ^ Statistics gathered at the end of a run, pre-GC.+ -> Maybe GCStatistics -- ^ Statistics gathered at the beginning of a run.+ -> Measured -> Measured+ ```++ When diffing `GCStatistics` in `applyGCStatistics`, we carefully choose+ whether to diff against the end stats pre- or post-GC.++* Use `performMinorGC` rather than `performGC` to update garbage collection+ statistics. This improves the benchmark performance of fast functions on large+ objects.++* Fix a bug in the `ToJSON Measured` instance which duplicated the+ mutator CPU seconds where GC CPU seconds should go.++* Fix a bug in sample analysis which incorrectly accounted for overhead+ causing runtime errors and invalid results. Accordingly, the buggy+ `getOverhead` function has been removed.++* Fix a bug in `Measurement.measure` which inflated the reported time taken+ for `perRun` benchmarks.++* Reduce overhead of `nf`, `whnf`, `nfIO`, and `whnfIO` by removing allocation+ from the central loops.++1.3.0.0++* `criterion` was previously reporting the following statistics incorrectly+ on GHC 8.2 and later:++ * `gcStatsBytesAllocated`+ * `gcStatsBytesCopied`+ * `gcStatsGcCpuSeconds`+ * `gcStatsGcWallSeconds`++ This has been fixed.++* The type signature of `runBenchmarkable` has changed from:++ ```haskell+ Benchmarkable -> Int64 -> (a -> a -> a) -> (IO () -> IO a) -> IO a+ ```++ to:++ ```haskell+ Benchmarkable -> Int64 -> (a -> a -> a) -> (Int64 -> IO () -> IO a) -> IO a+ ```++ The extra `Int64` argument represents how many iterations are being timed.++* Remove the deprecated `getGCStats` and `applyGCStats` functions (which have+ been replaced by `getGCStatistics` and `applyGCStatistics`).+* Remove the deprecated `forceGC` field of `Config`, as well as the+ corresponding `--no-gc` command-line option.+* The header in generated JSON output mistakenly used the string `"criterio"`.+ This has been corrected to `"criterion"`.+ 1.2.6.0 * Add error bars and zoomable navigation to generated HTML report graphs.
criterion.cabal view
@@ -1,48 +1,55 @@ name: criterion-version: 1.2.6.0+version: 1.6.5.0 synopsis: Robust, reliable performance measurement and analysis license: BSD3 license-file: LICENSE author: Bryan O'Sullivan <bos@serpentine.com>-maintainer: Bryan O'Sullivan <bos@serpentine.com>-copyright: 2009-2016 Bryan O'Sullivan and others+maintainer: Ryan Scott <ryan.gl.scott@gmail.com>+copyright: 2009-present Bryan O'Sullivan and others category: Development, Performance, Testing, Benchmarking-homepage: http://www.serpentine.com/criterion-bug-reports: https://github.com/bos/criterion/issues+homepage: https://github.com/haskell/criterion+bug-reports: https://github.com/haskell/criterion/issues build-type: Simple cabal-version: >= 1.10 extra-source-files: README.markdown changelog.md+ examples/LICENSE examples/*.cabal examples/*.hs- examples/*.html+ www/fibber.html+ www/report.html+ www/fibber-screenshot.png tested-with:- GHC==7.4.2,- GHC==7.6.3,- GHC==7.8.4,- GHC==7.10.3, GHC==8.0.2,- GHC==8.2.2+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.8,+ GHC==9.4.8,+ GHC==9.6.7,+ GHC==9.8.4,+ GHC==9.10.3,+ GHC==9.12.2 data-files: templates/*.css templates/*.tpl- templates/js/jquery.criterion.js+ templates/*.js description: This library provides a powerful but simple way to measure software- performance. It provides both a framework for executing and+ performance. It consists of both a framework for executing and analysing benchmarks and a set of driver functions that makes it easy to build and run benchmarks, and to analyse their results. . The fastest way to get started is to read the- <http://www.serpentine.com/criterion/tutorial.html online tutorial>,+ <https://github.com/haskell/criterion/blob/master/README.markdown#tutorial online tutorial>, followed by the documentation and examples in the "Criterion.Main" module.- .- For examples of the kinds of reports that criterion generates, see- <http://www.serpentine.com/criterion the home page>. flag fast description: compile without optimizations@@ -64,66 +71,47 @@ Criterion.Internal Criterion.Main Criterion.Main.Options- Criterion.Measurement Criterion.Monad Criterion.Report Criterion.Types other-modules: Criterion.Monad.Internal- Criterion.Types.Internal - c-sources: cbits/cycles.c- if os(darwin)- c-sources: cbits/time-osx.c- else {- if os(windows)- c-sources: cbits/time-windows.c- else- c-sources: cbits/time-posix.c- }- other-modules: Paths_criterion build-depends:- aeson >= 0.8,- ansi-wl-pprint >= 0.6.7.2,- base >= 4.5 && < 5,- base-compat >= 0.9,- binary >= 0.5.1.0,- bytestring >= 0.9 && < 1.0,+ aeson >= 2 && < 2.3,+ base >= 4.9 && < 5,+ base-compat-batteries >= 0.10 && < 0.16,+ binary >= 0.8.3.0,+ binary-orphans >= 1.0.1 && < 1.1,+ bytestring >= 0.10.8.1 && < 1.0, cassava >= 0.3.0.0, code-page, containers,+ criterion-measurement >= 0.2 && < 0.3, deepseq >= 1.1.0.0, directory,- exceptions >= 0.8.2 && < 0.9,+ exceptions >= 0.8.2 && < 0.11, filepath, Glob >= 0.7.2, microstache >= 1.0.1 && < 1.1,- js-flot,- js-jquery,+ js-chart >= 2.9.4 && < 3, mtl >= 2, mwc-random >= 0.8.0.3,- optparse-applicative >= 0.13,- parsec >= 3.1.0,- semigroups,- statistics >= 0.14 && < 0.15,+ optparse-applicative >= 0.18 && < 0.20,+ prettyprinter >= 1.7 && < 1.8,+ prettyprinter-ansi-terminal >= 1.1 && < 1.2,+ statistics >= 0.14 && < 0.17, text >= 0.11,- time, transformers,- transformers-compat >= 0.4,- vector >= 0.7.1,- vector-algorithms >= 0.4- if impl(ghc < 7.6)- build-depends:- ghc-prim+ transformers-compat >= 0.6.4,+ vector >= 0.7.1 default-language: Haskell2010- ghc-options: -Wall -funbox-strict-fields- if impl(ghc >= 6.8)- ghc-options: -fwarn-tabs+ ghc-options: -Wall -funbox-strict-fields -Wtabs if flag(fast) ghc-options: -O0 else@@ -145,13 +133,10 @@ Build-Depends: base,+ base-compat-batteries, criterion, optparse-applicative >= 0.13 - if impl(ghc < 7.6)- build-depends:- ghc-prim- test-suite sanity type: exitcode-stdio-1.0 hs-source-dirs: tests@@ -168,7 +153,6 @@ base, bytestring, criterion,- deepseq, tasty, tasty-hunit @@ -185,6 +169,7 @@ build-depends: QuickCheck >= 2.4, base,+ base-compat-batteries, criterion, statistics, HUnit,@@ -192,7 +177,7 @@ tasty-hunit, tasty-quickcheck, vector,- aeson >= 0.8+ aeson test-suite cleanup type: exitcode-stdio-1.0@@ -206,6 +191,7 @@ build-depends: HUnit, base,+ base-compat, bytestring, criterion, deepseq,@@ -215,4 +201,4 @@ source-repository head type: git- location: https://github.com/bos/criterion.git+ location: https://github.com/haskell/criterion.git
examples/ConduitVsPipes.hs view
@@ -1,11 +1,11 @@--- Contributed by Gabriel Gonzales as a test case for--- https://github.com/bos/criterion/issues/35+-- Contributed by Gabriella Gonzales as a test case for+-- https://github.com/haskell/criterion/issues/35 -- -- The numbers reported by this benchmark can be made "more correct" -- by compiling with the -fno-full-laziness option. import Criterion.Main (bench, bgroup, defaultMain, nfIO, whnf)-import Data.Conduit (($=), ($$))+import Data.Conduit (runConduit, (.|)) import Data.Functor.Identity (Identity(..)) import Pipes ((>->), discard, each, for, runEffect) import qualified Data.Conduit.List as C@@ -28,7 +28,7 @@ pipes, conduit :: (Monad m) => Int -> m () pipes n = runEffect $ for (each [1..n] >-> P.map (+1) >-> P.filter even) discard-conduit n = C.sourceList [1..n] $= C.map (+1) $= C.filter even $$ C.sinkNull+conduit n = runConduit $ C.sourceList [1..n] .| C.map (+1) .| C.filter even .| C.sinkNull main :: IO () main = criterion 10000
+ examples/ExtensibleCLI.hs view
@@ -0,0 +1,38 @@+module Main where++import Criterion.Main+import Criterion.Main.Options+import Options.Applicative+import Prelude ()+import Prelude.Compat++data CustomArgs = CustomArgs+ { -- This data type adds two new arguments, listed below.+ customArg1 :: Int+ , customArg2 :: String++ -- The remaining arguments come from criterion itself.+ , criterionArgs :: Mode+ }++customParser :: Parser CustomArgs+customParser = CustomArgs+ <$> option auto+ ( long "custom-arg1"+ <> value 42+ <> metavar "INT"+ <> help "Custom argument 1" )+ <*> strOption+ ( long "custom-arg2"+ <> value "Benchmark name"+ <> metavar "STR"+ <> help "Custom argument 2" )+ <*> parseWith defaultConfig++main :: IO ()+main = do+ args <- execParser $ describeWith customParser+ putStrLn $ "custom-arg1: " ++ show (customArg1 args)+ putStrLn $ "custom-arg2: " ++ customArg2 args+ runMode (criterionArgs args)+ [ bench (customArg2 args) $ whnf id $ customArg1 args ]
examples/Fibber.hs view
@@ -1,8 +1,11 @@--- The simplest/silliest of all benchmarks!+{- cabal:+build-depends: base, criterion+-} import Criterion.Main -fib :: Integer -> Integer+-- The function we're benchmarking.+fib :: Int -> Int fib m | m < 0 = error "negative!" | otherwise = go m where
+ examples/LICENSE view
@@ -0,0 +1,26 @@+Copyright (c) 2009, 2010 Bryan O'Sullivan+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
examples/Maps.hs view
@@ -6,7 +6,6 @@ import Data.ByteString (ByteString, pack) import Data.Hashable (Hashable) import System.Random.MWC-import qualified Data.CritBit.Map.Lazy as C import qualified Data.HashMap.Lazy as H import qualified Data.IntMap as I import qualified Data.Map as M@@ -20,15 +19,16 @@ numbers :: IO (V, V, V) numbers = do- random <- withSystemRandom . asGenIO $ \gen -> uniformVector gen 40000+ gen <- createSystemRandom+ random <- uniformVector gen 40000 let sorted = G.modify I.sort random revsorted = G.reverse sorted return (random, sorted, revsorted) strings :: IO (B, B, B) strings = do- random <- withSystemRandom . asGenIO $ \gen ->- V.replicateM 10000 $+ gen <- createSystemRandom+ random <- V.replicateM 10000 $ (pack . U.toList) `fmap` (uniformVector gen =<< uniformR (1,16) gen) let sorted = G.modify I.sort random revsorted = G.reverse sorted@@ -66,16 +66,8 @@ , bench "random" $ whnf hashmap random , bench "revsorted" $ whnf hashmap revsorted ]- , bgroup "CritBit" [- bench "sorted" $ whnf critbit sorted- , bench "random" $ whnf critbit random- , bench "revsorted" $ whnf critbit revsorted- ] ] ]--critbit :: (G.Vector v k, C.CritBitKey k) => v k -> C.CritBit k Int-critbit xs = G.foldl' (\m k -> C.insert k value m) C.empty xs hashmap :: (G.Vector v k, Hashable k, Eq k) => v k -> H.HashMap k Int hashmap xs = G.foldl' (\m k -> H.insert k value m) H.empty xs
examples/Overhead.hs view
@@ -11,13 +11,14 @@ main :: IO () main = do+ M.initializeTime -- Need to do this before calling M.getTime statsEnabled <- getRTSStatsEnabled defaultMain $ [- bench "measure" $ whnfIO (M.measure (whnfIO $ return ()) 1)- , bench "getTime" $ whnfIO M.getTime- , bench "getCPUTime" $ whnfIO M.getCPUTime- , bench "getCycles" $ whnfIO M.getCycles- , bench "M.getGCStatisticss" $ whnfIO M.getGCStatistics+ bench "measure" $ whnfIO (M.measure (whnfIO $ return ()) 1)+ , bench "getTime" $ whnfIO M.getTime+ , bench "getCPUTime" $ whnfIO M.getCPUTime+ , bench "getCycles" $ whnfIO M.getCycles+ , bench "M.getGCStatistics" $ whnfIO M.getGCStatistics ] ++ if statsEnabled then [bench #if MIN_VERSION_base(4,10,0)@@ -28,10 +29,7 @@ ] else [] -#if !MIN_VERSION_base(4,6,0)-getRTSStatsEnabled :: IO Bool-getRTSStatsEnabled = return False-#elif !MIN_VERSION_base(4,10,0)+#if !MIN_VERSION_base(4,10,0) getRTSStatsEnabled :: IO Bool getRTSStatsEnabled = getGCStatsEnabled #endif
+ examples/Quotes.hs view
@@ -0,0 +1,12 @@+module Main where++import Criterion+import Criterion.Main++main :: IO ()+main = defaultMain+ [ env (return ()) $+ \ ~() -> bgroup "\"oops\"" [bench "dummy" $ nf id ()]+ , env (return ()) $+ \ ~() -> bgroup "'oops'" [bench "dummy" $ nf id ()]+ ]
examples/criterion-examples.cabal view
@@ -1,47 +1,74 @@ name: criterion-examples version: 0 synopsis: Examples for the criterion benchmarking system-description: Examples for the criterion benchmarking system-homepage: https://github.com/bos/criterion+description: Examples for the criterion benchmarking system.+homepage: https://github.com/haskell/criterion license: BSD3-license-file: ../LICENSE+license-file: LICENSE author: Bryan O'Sullivan <bos@serpentine.com> maintainer: Bryan O'Sullivan <bos@serpentine.com> category: Benchmarks build-type: Simple-cabal-version: >=1.8+cabal-version: >=1.10+tested-with:+ GHC==8.0.2,+ GHC==8.2.2,+ GHC==8.4.4,+ GHC==8.6.5,+ GHC==8.8.4,+ GHC==8.10.7,+ GHC==9.0.2,+ GHC==9.2.8,+ GHC==9.4.8,+ GHC==9.6.7,+ GHC==9.8.4,+ GHC==9.10.3,+ GHC==9.12.2 +flag conduit-vs-pipes+ default: True++flag maps+ default: True+ executable fibber main-is: Fibber.hs + default-language: Haskell2010 ghc-options: -Wall -rtsopts build-depends:- base == 4.*,+ base >= 4.9 && < 5, criterion executable conduit-vs-pipes+ if !flag(conduit-vs-pipes)+ buildable: False+ main-is: ConduitVsPipes.hs + default-language: Haskell2010 ghc-options: -Wall -rtsopts build-depends:- base == 4.*,- conduit >= 1.1,+ base >= 4.9 && < 5,+ conduit >= 1.2.13.1, criterion,- pipes >= 4.1,- transformers+ pipes >= 4.3.5 executable maps+ if !flag(maps)+ buildable: False+ main-is: Maps.hs + default-language: Haskell2010 ghc-options: -Wall -rtsopts build-depends:- base == 4.*,+ base >= 4.9 && < 5, bytestring, containers,- critbit, criterion, hashable,- mwc-random,+ mwc-random >= 0.13.1, unordered-containers, vector, vector-algorithms@@ -49,35 +76,60 @@ executable overhead main-is: Overhead.hs + default-language: Haskell2010 ghc-options: -Wall -rtsopts build-depends:- base == 4.*,- criterion+ base >= 4.9 && < 5,+ criterion,+ criterion-measurement executable bad-read-file main-is: BadReadFile.hs + default-language: Haskell2010 ghc-options: -Wall -rtsopts build-depends:- base == 4.*,+ base >= 4.9 && < 5, criterion executable good-read-file main-is: GoodReadFile.hs + default-language: Haskell2010 ghc-options: -Wall -rtsopts build-depends:- base == 4.*,+ base >= 4.9 && < 5, criterion +executable extensible-cli+ main-is: ExtensibleCLI.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ base-compat-batteries,+ criterion,+ optparse-applicative++executable quotes+ main-is: Quotes.hs++ default-language: Haskell2010+ ghc-options: -Wall -rtsopts+ build-depends:+ base >= 4.9 && < 5,+ criterion+ -- Cannot uncomment due to https://github.com/haskell/cabal/issues/1725 -- -- executable judy -- main-is: Judy.hs -- -- buildable: False+-- default-language: Haskell2010 -- ghc-options: -Wall -rtsopts -- build-depends:--- base == 4.*,+-- base >= 4.9 && < 5, -- criterion, -- judy
− examples/tiny.html
@@ -1,668 +0,0 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">-<html>- <head>- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">- <title>criterion report</title>- <!--[if lte IE 8]>- <script language="javascript" type="text/javascript">- if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&").replace(/"/g,""")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};- </script>- <![endif]-->- <script language="javascript" type="text/javascript">- /*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */-(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete -t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean-(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);- </script>- <script language="javascript" type="text/javascript">- /* Javascript plotting library for jQuery, v. 0.7.- *- * Released under the MIT license by IOLA, December 2007.- *- */-(function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=1;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}H.stroke()}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);- </script>- <script language="javascript" type="text/javascript">- (function ($) {- $.zip = function(a,b) {- var x = Math.min(a.length,b.length);- var c = new Array(x);- for (var i = 0; i < x; i++)- c[i] = [a[i],b[i]];- return c;- };-- $.mean = function(ary) {- var m = 0, i = 0;-- while (i < ary.length) {- var j = i++;- m += (ary[j] - m) / i;- }-- return m;- };-- $.timeUnits = function(secs) {- if (secs < 0) return timeUnits(-secs);- else if (secs >= 1e9) return [1e-9, "Gs"];- else if (secs >= 1e6) return [1e-6, "Ms"];- else if (secs >= 1) return [1, "s"];- else if (secs >= 1e-3) return [1e3, "ms"];- else if (secs >= 1e-6) return [1e6, "\u03bcs"];- else if (secs >= 1e-9) return [1e9, "ns"];- else if (secs >= 1e-12) return [1e12, "ps"];- };-- $.scaleTimes = function(ary) {- var s = $.timeUnits($.mean(ary));- return [$.scaleBy(s[0], ary), s[1]];- };-- $.scaleBy = function(x, ary) {- var nary = new Array(ary.length);- for (var i = 0; i < ary.length; i++)- nary[i] = ary[i] * x;- return nary;- };-- $.renderTime = function(text) {- var x = parseFloat(text);- var t = $.timeUnits(x);- x *= t[0];- if (x >= 1000 || x <= -1000) return x.toFixed() + " " + t[1];- var prec = 5;- if (x < 0) prec++;-- return x.toString().substring(0,prec) + " " + t[1];- };-- $.unitFormatter = function(units) {- var ticked = 0;- return function(val,axis) {- var s = val.toFixed(axis.tickDecimals);- if (ticked > 1)- return s;- else {- ticked++;- return s + ' ' + units;- }- };- };-- $.addTooltip = function(name, renderText) {- function showTooltip(x, y, contents) {- $('<div id="tooltip">' + contents + '</div>').css( {- position: 'absolute',- display: 'none',- top: y + 5,- left: x + 5,- border: '1px solid #fdd',- padding: '2px',- 'background-color': '#fee',- opacity: 0.80- }).appendTo("body").fadeIn(200);- };- var pp = null;- $(name).bind("plothover", function (event, pos, item) {- $("#x").text(pos.x.toFixed(2));- $("#y").text(pos.y.toFixed(2));-- if (item) {- if (pp != item.dataIndex) {- pp = item.dataIndex;-- $("#tooltip").remove();- var x = item.datapoint[0].toFixed(2),- y = item.datapoint[1].toFixed(2);-- showTooltip(item.pageX, item.pageY, renderText(x,y));- }- }- else {- $("#tooltip").remove();- pp = null; - }- });- };-})(jQuery);-- </script>- <style type="text/css">-html, body {- height: 100%;- margin: 0;-}--#wrap {- min-height: 100%;-}--#main {- overflow: auto;- padding-bottom: 180px; /* must be same height as the footer */-}--#footer {- position: relative;- margin-top: -180px; /* negative value of footer height */- height: 180px;- clear: both;- background: #888;- margin: 40px 0 0;- color: white;- font-size: larger;- font-weight: 300;-} --body:before {- /* Opera fix */- content: "";- height: 100%;- float: left;- width: 0;- margin-top: -32767px;-}--body {- font: 14px Helvetica Neue;- text-rendering: optimizeLegibility;- margin-top: 1em;-}--a:link {- color: steelblue;- text-decoration: none;-}--a:visited {- color: #4a743b;- text-decoration: none;-}--#footer a {- color: white;- text-decoration: underline;-}--.hover {- color: steelblue;- text-decoration: none;-}--.body {- width: 960px;- margin: auto;-}--.footfirst {- position: relative;- top: 30px;-}--th {- font-weight: 500;- opacity: 0.8;-}--th.cibound {- opacity: 0.4;-}--.citime {- opacity: 0.5;-}--h1 {- font-size: 36px;- font-weight: 300;- margin-bottom: .3em;-}--h2 {- font-size: 30px;- font-weight: 300;- margin-bottom: .3em;-}--.meanlegend {- color: #404040;- background-color: #ffffff;- opacity: 0.6;- font-size: smaller;-}-- </style>- <!--[if !IE 7]>- <style type="text/css">- #wrap {display:table;height:100%}- </style>- <![endif]-->- </head>- <body>- <div id="wrap">- <div id="main" class="body">- <h1>criterion performance measurements</h1>--<h2>overview</h2>--<p><a href="#grokularation">want to understand this report?</a></p>--<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>--<h2><a name="b0">fib/fib 10</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde0" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time0" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">7.950250148027324e-7</span></td>- <td><span class="time">8.087233523139602e-7</span></td>- <td><span class="citime">8.263881789521396e-7</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">6.469576002518438e-8</span></td>- <td><span class="time">7.962093335887086e-8</span></td>- <td><span class="citime">9.595188287095253e-8</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have severe- (<span class="percent">0.789683189845111</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b1">fib/fib 20</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde1" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time1" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">9.397387721886237e-5</span></td>- <td><span class="time">9.511279240520537e-5</span></td>- <td><span class="citime">9.683396722581508e-5</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">5.084981483933464e-6</span></td>- <td><span class="time">7.060410460215048e-6</span></td>- <td><span class="citime">9.916444086871226e-6</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have severe- (<span class="percent">0.6764999252677036</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b2">fib/fib 30</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde2" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time2" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">1.1405421545418602e-2</span></td>- <td><span class="time">1.1464177420052388e-2</span></td>- <td><span class="citime">1.166933422318349e-2</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">1.5835878091381052e-4</span></td>- <td><span class="time">5.030517750313856e-4</span></td>- <td><span class="citime">1.146763021342376e-3</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.414995643896579</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b3">intmap/intmap 25k</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde3" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time3" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">5.030530741127831e-3</span></td>- <td><span class="time">5.067442705544335e-3</span></td>- <td><span class="citime">5.11489753952871e-3</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">1.7601420712288937e-4</span></td>- <td><span class="time">2.14104721044797e-4</span></td>- <td><span class="citime">2.796949297562274e-4</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.39528660323872544</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b4">intmap/intmap 50k</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde4" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time4" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">1.3004106333168846e-2</span></td>- <td><span class="time">1.3085197260292869e-2</span></td>- <td><span class="citime">1.317617540589223e-2</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">3.817067615429757e-4</span></td>- <td><span class="time">4.4020726935288003e-4</span></td>- <td><span class="citime">5.281243811580562e-4</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.2967324863902443</span>%)- effect on estimated standard deviation.</p>- </span>-<h2><a name="b5">intmap/intmap 75k</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde5" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time5" class="timechart"- style="width:450px;height:278px;"></div></td>- </tr>- </tbody>- </table>- <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="0.95 confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="0.95 confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>Mean execution time</td>- <td><span class="citime">1.772755031815419e-2</span></td>- <td><span class="time">1.782442693940053e-2</span></td>- <td><span class="citime">1.794612770310293e-2</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="citime">4.572927417104507e-4</span></td>- <td><span class="time">5.554628346393567e-4</span></td>- <td><span class="citime">7.805157733235236e-4</span></td>- </tr>- </tbody>- </table>-- <span class="outliers">- <p>Outlying measurements have moderate- (<span class="percent">0.2673858721467461</span>%)- effect on estimated standard deviation.</p>- </span>-- <h2><a name="grokularation">understanding this report</a></h2>-- <p>In this report, each function benchmarked by criterion is assigned- a section of its own. In each section, we display two charts, each- with an <i>x</i> axis that represents measured execution time.- These charts are active; if you hover your mouse over data points- and annotations, you will see more details.</p>-- <ul>- <li>The chart on the left is a- <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel- density estimate</a> (also known as a KDE) of time- measurements. This graphs the probability of any given time- measurement occurring. A spike indicates that a measurement of a- particular time occurred; its height indicates how often that- measurement was repeated.</li>-- <li>The chart on the right is the raw data from which the kernel- density estimate is built. Measurements are displayed on- the <i>y</i> axis in the order in which they occurred.</li>- </ul>- - <p>Under the charts is a small table displaying the mean and standard- deviation of the measurements. We use a statistical technique- called- the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>- to provide confidence intervals on our estimates of these values.- The bootstrap-derived upper and lower bounds on the mean and- standard deviation let you see how accurate we believe those- estimates to be. (Hover the mouse over the table headers to see- the confidence levels.)</p>- - <p>A noisy benchmarking environment can cause some or many- measurements to fall far from the mean. These outlying- measurements can have a significant inflationary effect on the- estimate of the standard deviation. We calculate and display an- estimate of the extent to which the standard deviation has been- inflated by outliers.</p>--<script type="text/javascript">-$(function () {- function mangulate(number, name, mean, times, kdetimes, kdepdf) {- var meanSecs = mean;- var units = $.timeUnits(mean);- var scale = units[0];- units = units[1];- mean *= scale;- kdetimes = $.scaleBy(scale, kdetimes);- var ts = $.scaleBy(scale, times);- var kq = $("#kde" + number);- var k = $.plot(kq,- [{ label: name + " time densities",- data: $.zip(kdetimes, kdepdf),- }],- { xaxis: { tickFormatter: $.unitFormatter(units) },- yaxis: { ticks: false },- grid: { borderColor: "#777",- hoverable: true, markings: [ { color: '#6fd3fb',- lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },- });- var o = k.pointOffset({ x: mean, y: 0});- kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +- '" style="position:absolute;left:' + (o.left + 4) +- 'px;bottom:139px;">mean</div>');- var timepairs = new Array(ts.length);- for (var i = 0; i < ts.length; i++)- timepairs[i] = [ts[i],i];- $.plot($("#time" + number),- [{ label: name + " times",- data: timepairs }],- { points: { show: true },- grid: { borderColor: "#777", hoverable: true },- xaxis: { min: kdetimes[0], max: kdetimes[kdetimes.length-1],- tickFormatter: $.unitFormatter(units) },- yaxis: { ticks: false },- });- $.addTooltip("#kde" + number, function(x,y) { return x + ' ' + units; });- $.addTooltip("#time" + number, function(x,y) { return x + ' ' + units; });- };- mangulate(0, "fib/fib 10",- 8.087233523139602e-7,- [7.377674858265166e-7,7.368895123355534e-7,7.799102133927503e-7,8.043959185296127e-7,7.92104289656128e-7,7.667406110283022e-7,7.368895123355534e-7,7.671308214687303e-7,7.823490286454257e-7,8.641956685252174e-7,7.561073765266367e-7,7.368895123355534e-7,7.385479067073727e-7,7.581559813388842e-7,7.9629905189073e-7,7.667406110283022e-7,7.946406575189106e-7,7.720084519740814e-7,7.700573997719409e-7,7.409867219600483e-7,7.753252407177201e-7,7.463521155159345e-7,7.385479067073727e-7,7.683990054001215e-7,7.398160906387641e-7,7.380601436568377e-7,7.786420294613589e-7,7.368895123355534e-7,7.741546093964359e-7,7.659601901474461e-7,7.872266591507768e-7,7.508395355808575e-7,7.806906342736064e-7,7.364993018951253e-7,7.380601436568377e-7,7.626434014038073e-7,7.466447733462556e-7,7.847878438981013e-7,8.031277345982215e-7,8.129805482190307e-7,7.83617212576817e-7,7.384503540972658e-7,7.384503540972658e-7,7.884948430821682e-7,8.027375241577934e-7,7.545465347649244e-7,7.385479067073727e-7,7.740570567863288e-7,7.840074230172451e-7,7.958112888401949e-7,7.463521155159345e-7,7.691794262809778e-7,7.385479067073727e-7,7.475227468372188e-7,8.355152011537529e-7,1.0494480751184528e-6,9.962819026101256e-7,9.930626664765938e-7,8.178581787243818e-7,8.01079129785974e-7,8.039081554790776e-7,8.032252872083284e-7,8.052738920205759e-7,8.027375241577934e-7,8.027375241577934e-7,8.047861289700409e-7,8.032252872083284e-7,8.043959185296127e-7,8.039081554790776e-7,8.031277345982215e-7,8.043959185296127e-7,8.068347337822882e-7,8.028350767679004e-7,8.027375241577934e-7,8.027375241577934e-7,8.542453022943011e-7,9.783322223504334e-7,9.76283617538186e-7,1.028669369165657e-6,1.011012346736286e-6,1.0298400004869412e-6,9.770640384190422e-7,1.050716259049844e-6,9.76283617538186e-7,8.797065335322339e-7,8.771701656694514e-7,8.064445233418602e-7,8.032252872083284e-7,8.110294960168903e-7,9.218492610984676e-7,9.087772113441266e-7,7.970794727715862e-7,7.736668463459007e-7,7.900556848438805e-7,8.227358092297329e-7,8.612690902220067e-7,7.384503540972658e-7,7.385479067073727e-7,7.405965115196202e-7,8.043959185296127e-7,],- [7.050776061796535e-7,7.080465853023752e-7,7.11015564425097e-7,7.139845435478188e-7,7.169535226705404e-7,7.199225017932622e-7,7.22891480915984e-7,7.258604600387057e-7,7.288294391614275e-7,7.317984182841493e-7,7.347673974068709e-7,7.377363765295927e-7,7.407053556523145e-7,7.436743347750362e-7,7.46643313897758e-7,7.496122930204798e-7,7.525812721432015e-7,7.555502512659232e-7,7.58519230388645e-7,7.614882095113667e-7,7.644571886340885e-7,7.674261677568103e-7,7.703951468795319e-7,7.733641260022537e-7,7.763331051249755e-7,7.793020842476972e-7,7.82271063370419e-7,7.852400424931408e-7,7.882090216158626e-7,7.911780007385843e-7,7.94146979861306e-7,7.971159589840278e-7,8.000849381067495e-7,8.030539172294713e-7,8.060228963521931e-7,8.089918754749147e-7,8.119608545976365e-7,8.149298337203583e-7,8.1789881284308e-7,8.208677919658018e-7,8.238367710885236e-7,8.268057502112453e-7,8.297747293339671e-7,8.327437084566888e-7,8.357126875794105e-7,8.386816667021323e-7,8.416506458248541e-7,8.446196249475758e-7,8.475886040702975e-7,8.505575831930193e-7,8.53526562315741e-7,8.564955414384628e-7,8.594645205611846e-7,8.624334996839063e-7,8.654024788066281e-7,8.683714579293499e-7,8.713404370520715e-7,8.743094161747933e-7,8.772783952975151e-7,8.802473744202368e-7,8.832163535429585e-7,8.861853326656803e-7,8.89154311788402e-7,8.921232909111238e-7,8.950922700338456e-7,8.980612491565673e-7,9.010302282792891e-7,9.039992074020109e-7,9.069681865247326e-7,9.099371656474543e-7,9.129061447701761e-7,9.158751238928978e-7,9.188441030156196e-7,9.218130821383413e-7,9.24782061261063e-7,9.277510403837848e-7,9.307200195065066e-7,9.336889986292283e-7,9.366579777519501e-7,9.396269568746719e-7,9.425959359973936e-7,9.455649151201154e-7,9.485338942428371e-7,9.515028733655588e-7,9.544718524882805e-7,9.574408316110023e-7,9.60409810733724e-7,9.633787898564458e-7,9.663477689791676e-7,9.693167481018893e-7,9.72285727224611e-7,9.752547063473329e-7,9.782236854700546e-7,9.811926645927764e-7,9.841616437154982e-7,9.871306228382197e-7,9.900996019609417e-7,9.930685810836633e-7,9.96037560206385e-7,9.990065393291068e-7,1.0019755184518286e-6,1.0049444975745503e-6,1.0079134766972721e-6,1.0108824558199939e-6,1.0138514349427156e-6,1.0168204140654374e-6,1.0197893931881592e-6,1.022758372310881e-6,1.0257273514336025e-6,1.0286963305563245e-6,1.031665309679046e-6,1.0346342888017678e-6,1.0376032679244896e-6,1.0405722470472113e-6,1.0435412261699331e-6,1.0465102052926549e-6,1.0494791844153766e-6,1.0524481635380984e-6,1.0554171426608202e-6,1.058386121783542e-6,1.0613551009062637e-6,1.0643240800289853e-6,1.0672930591517073e-6,1.0702620382744288e-6,1.0732310173971506e-6,1.0761999965198723e-6,1.0791689756425941e-6,1.0821379547653159e-6,],- [758.5777655574481,-2321.1543988419735,4023.8526593647907,-5969.678542596276,8255.893134287526,-10877.816387636318,13258.80288387981,-11970.022679779135,24826.628201773277,2774079.488057585,1.8392530774752047e7,3.0574590555598773e7,1.166133699927089e7,3424377.4396439414,9419088.099925276,5266617.565528951,3303589.194399796,3444690.118635301,3356348.4342334606,4576983.544176456,9043075.693981845,9515712.770944044,8695237.7182705,1.0480362363947053e7,5885761.981161242,6681154.940234727,9068443.372149916,7364147.085546517,6210306.4263969585,5087047.293373542,8068714.210483239,4030545.48537255,1.4096350241745548e7,4.158830423471533e7,1.856283193052455e7,4022524.145650863,3058627.2059520385,1046745.9854679189,2885952.338313088,2754349.838309664,633203.5471903565,-32443.074595815022,-2892.8348111516193,613232.1023437271,2186689.9788602497,628013.1101309155,-37259.02799370251,30683.043841366227,-40132.36536944665,633274.7690757504,2181052.447994885,618052.036967569,559953.6610857417,2828804.3071846734,2794814.1208680714,611984.9976885823,-37952.53555504595,607708.5440600157,2805021.8220361387,2807611.00441047,600673.0092721324,-22393.516850557255,15594.775105656468,-12514.358399110733,13580.063055919636,-18041.720945391364,28496.47661754441,-48196.121006611495,648924.9514914048,2154454.239780577,663194.9459344556,-83047.98257751309,662710.8157463135,2155443.4580729404,647384.1690745661,-46020.353198678305,25540.42564572161,-14041.97425042219,8015.587893601925,-4209.983934851987,1389.5930476172514,1032.012867786423,-3414.4471353313584,6060.772277407805,-9324.918609720504,13737.770503412698,-20242.656341206915,30756.29517690236,-49755.20455689963,89606.38432658189,-163282.43154387147,2556302.0968688834,8676430.99336962,2552676.1540422146,-153346.24003292026,70187.68487903339,550706.6880764095,2835023.043062306,2793767.894278938,601441.349991305,-7358.0746787718135,-22601.713682561975,628534.8753184661,2175226.4818469835,635769.7545593386,-40844.985396975695,28492.276904797232,-27601.819376742715,603126.5719205893,2805649.895153476,2808350.2124900045,599705.4735676054,-22401.159074643827,19442.064228567484,-22896.497319230042,600793.1421781109,2806440.6076827333,2808839.606545121,597734.2727886875,-17990.256325380145,9593.667662473541,-4416.832169552694,2313.513256760389,-1313.237756383254,775.6472484615549,-454.3276910014735,239.5804212662041,-74.92986615808515,]);- mangulate(1, "fib/fib 20",- 9.511279240520537e-5,- [8.981917432738818e-5,9.972909439787052e-5,9.512657921869252e-5,8.92490429425801e-5,8.938380126989837e-5,8.920757884186679e-5,9.50436510172659e-5,8.947709549650333e-5,9.104236529843098e-5,1.0239316286870102e-4,1.0374074614188377e-4,9.282532162910354e-5,9.074175056825944e-5,8.951855959721665e-5,9.365460364336984e-5,9.06899204423678e-5,9.595586123295884e-5,9.090760697111271e-5,9.23070203701871e-5,8.93941672950767e-5,9.560341637689565e-5,9.365460364336984e-5,9.008869098202473e-5,9.38204600462231e-5,9.160213065806074e-5,9.304300815784844e-5,9.27423934276769e-5,9.31363023844534e-5,9.704429387668335e-5,9.44320555317445e-5,9.056552814022785e-5,1.0169863918175299e-4,9.117712362574926e-5,9.052406403951454e-5,8.969478202524824e-5,9.255580497446699e-5,9.978092452376216e-5,9.165396078395238e-5,8.999539675541977e-5,8.921794486704512e-5,9.330215878730666e-5,9.617354776170374e-5,9.104236529843098e-5,8.921794486704512e-5,9.264909920107194e-5,9.27734915032119e-5,1.186885544490339e-4,9.838151112468777e-5,9.730344450614158e-5,9.782174576505802e-5,1.0255901927155429e-4,9.377899594550979e-5,9.416253887710795e-5,9.326069468659335e-5,1.004754482107102e-4,9.643269839116196e-5,9.264909920107194e-5,8.951855959721665e-5,9.647416249187527e-5,1.0574138900130123e-4,1.249910977574578e-4,1.295210507603875e-4,1.2008796784810829e-4,9.786320986577134e-5,1.0939022986407296e-4,9.213079794215551e-5,8.947709549650333e-5,9.686807144865177e-5,9.673331312133349e-5,9.290824983053016e-5,9.417290490228627e-5,9.238994857161373e-5,1.0104557959551827e-4,9.595586123295884e-5,9.42143690029996e-5,8.92490429425801e-5,9.403814657496801e-5,9.19131114134106e-5,9.334362288801998e-5,9.751076500970815e-5,9.48674285892343e-5,9.577963880492724e-5,8.951855959721665e-5,8.969478202524824e-5,9.629794006384368e-5,8.94252653706117e-5,9.391375427282805e-5,9.27734915032119e-5,9.055516211504952e-5,9.825711882254783e-5,8.973624612596155e-5,9.364423761819151e-5,9.391375427282805e-5,9.156066655734741e-5,9.721015027953662e-5,9.38204600462231e-5,9.264909920107194e-5,8.947709549650333e-5,9.308447225856176e-5,9.665038491990687e-5,],- [8.517623165001472e-5,8.555714634530783e-5,8.593806104060093e-5,8.631897573589404e-5,8.669989043118716e-5,8.708080512648027e-5,8.746171982177338e-5,8.784263451706648e-5,8.822354921235959e-5,8.86044639076527e-5,8.898537860294582e-5,8.936629329823892e-5,8.974720799353203e-5,9.012812268882514e-5,9.050903738411825e-5,9.088995207941135e-5,9.127086677470446e-5,9.165178146999758e-5,9.203269616529069e-5,9.24136108605838e-5,9.27945255558769e-5,9.317544025117001e-5,9.355635494646313e-5,9.393726964175623e-5,9.431818433704934e-5,9.469909903234245e-5,9.508001372763556e-5,9.546092842292866e-5,9.584184311822177e-5,9.622275781351488e-5,9.6603672508808e-5,9.69845872041011e-5,9.736550189939421e-5,9.774641659468732e-5,9.812733128998042e-5,9.850824598527355e-5,9.888916068056665e-5,9.927007537585976e-5,9.965099007115287e-5,1.0003190476644597e-4,1.0041281946173908e-4,1.0079373415703219e-4,1.011746488523253e-4,1.0155556354761841e-4,1.0193647824291152e-4,1.0231739293820463e-4,1.0269830763349774e-4,1.0307922232879084e-4,1.0346013702408396e-4,1.0384105171937707e-4,1.0422196641467018e-4,1.0460288110996328e-4,1.0498379580525639e-4,1.053647105005495e-4,1.057456251958426e-4,1.0612653989113571e-4,1.0650745458642883e-4,1.0688836928172194e-4,1.0726928397701505e-4,1.0765019867230815e-4,1.0803111336760127e-4,1.0841202806289438e-4,1.0879294275818749e-4,1.091738574534806e-4,1.095547721487737e-4,1.0993568684406681e-4,1.1031660153935991e-4,1.1069751623465302e-4,1.1107843092994613e-4,1.1145934562523925e-4,1.1184026032053236e-4,1.1222117501582546e-4,1.1260208971111857e-4,1.1298300440641169e-4,1.133639191017048e-4,1.137448337969979e-4,1.1412574849229101e-4,1.1450666318758412e-4,1.1488757788287722e-4,1.1526849257817033e-4,1.1564940727346344e-4,1.1603032196875655e-4,1.1641123666404967e-4,1.1679215135934277e-4,1.1717306605463588e-4,1.17553980749929e-4,1.1793489544522211e-4,1.1831581014051521e-4,1.1869672483580832e-4,1.1907763953110143e-4,1.1945855422639454e-4,1.1983946892168764e-4,1.2022038361698075e-4,1.2060129831227386e-4,1.2098221300756696e-4,1.2136312770286008e-4,1.2174404239815319e-4,1.221249570934463e-4,1.2250587178873942e-4,1.2288678648403252e-4,1.2326770117932563e-4,1.2364861587461874e-4,1.2402953056991185e-4,1.2441044526520495e-4,1.2479135996049806e-4,1.2517227465579117e-4,1.2555318935108427e-4,1.2593410404637738e-4,1.263150187416705e-4,1.266959334369636e-4,1.270768481322567e-4,1.2745776282754983e-4,1.2783867752284294e-4,1.2821959221813605e-4,1.2860050691342916e-4,1.2898142160872226e-4,1.2936233630401537e-4,1.2974325099930848e-4,1.3012416569460158e-4,1.305050803898947e-4,1.3088599508518782e-4,1.3126690978048093e-4,1.3164782447577404e-4,1.3202873917106715e-4,1.3240965386636025e-4,1.3279056856165336e-4,1.3317148325694647e-4,1.3355239795223957e-4,],- [4.300931240704569e-4,-3.549578682618365e-4,3.8520369098528795e-2,0.9520446036583423,16.529845295457218,189.4624968597879,1451.3210278942822,7500.4679916295745,26436.418129206275,64257.59492108207,109099.846066102,132507.55103589315,122775.89368333074,100867.71897254158,87284.17420647093,79914.94543494808,74415.07728246463,77058.50020983275,92547.93132884815,114802.2447981375,131821.6543787473,136553.23736239152,127893.71833138197,105807.55476892975,76914.60048381802,55201.69368014875,48869.7804489285,55503.112038008185,67295.59137533768,74805.88674794715,72865.16604932163,64621.733373578136,55529.27138350215,46099.52421352893,34122.45187277227,21579.408593770975,14443.621625478869,14888.352602351608,18331.31637026973,19988.055598288185,19438.209054332106,17876.53398426213,16528.67237038494,16769.077529376736,18019.426662606194,17269.312323300233,13200.6259294074,8994.846519843559,7610.732311618474,7409.927362211231,5871.9003496641635,3923.1434054001206,3917.679639793975,5809.032017967959,6969.089635398829,5592.969407914455,2924.3896552781516,993.2986148034079,221.87274392728014,62.698229648134934,221.87013326255817,993.2966600315895,2924.2063675896325,5590.066743432221,6937.731731488198,5590.066658290188,2924.199292604475,993.121226732226,218.9566750251127,31.354700306826683,2.9033766093324442,0.18464610593290295,-1.4697545828838794e-3,8.145081382190547e-3,-7.7425519715678265e-3,7.681428107316558e-3,-7.778976363884425e-3,8.041643250469075e-3,-8.472926130846721e-3,9.265759606300312e-3,-3.011524722577509e-3,0.18665087368621527,2.9008587490301427,31.357975447153052,218.95980950815522,993.3014504412324,2927.1069911239524,5621.417056095799,7156.692768772124,6583.1832841619935,5848.403513853245,6583.182527729184,7156.6942994817755,5621.414715034091,2927.110197510748,993.2973073264817,218.96516383852077,31.358536461862847,3.084201931837604,3.0906192265999604,31.351806483251607,218.9651004006971,993.1143457379385,2924.2049449477495,5590.062130831868,6937.735209224498,5590.064086122645,2924.2009857445883,993.1205884020951,218.9634833356266,31.531441154321573,5.814408043697522,31.531825748502463,218.96270583767705,993.1217757465075,2924.199362328002,5590.066182097465,6937.73259265773,5590.065329106023,2924.2010891158143,993.118948056959,218.95946232583887,31.35136609776941,2.907308767600331,0.18005063205360966,3.8708427773068536e-3,1.958526060830285e-3,-5.872457912759309e-4,]);- mangulate(2, "fib/fib 30",- 1.1464177420052388e-2,- [1.1321011831673482e-2,1.1604968359383443e-2,1.1342946340950826e-2,1.1461917211922506e-2,1.1230889608773092e-2,1.1280003836068014e-2,1.1742774298104146e-2,1.1267844488533834e-2,1.1331979086312154e-2,1.164096956482778e-2,1.1098805715950826e-2,1.1681977560433248e-2,1.1676017095955709e-2,1.1440936376961568e-2,1.146406297913442e-2,1.135582094422231e-2,1.113289957276235e-2,1.1607829382332662e-2,1.159686212769399e-2,1.1468831350716451e-2,1.15219986938561e-2,1.1300030996712545e-2,1.131004457703481e-2,1.1358920385750631e-2,1.1293832113655904e-2,1.1419955542000631e-2,1.1439982702645162e-2,1.140302782288442e-2,1.1270943930062154e-2,1.1200848867806295e-2,1.1300984671028951e-2,1.15677750610436e-2,1.1369887640389303e-2,1.1671963980110982e-2,1.1352006246956686e-2,1.1527005484017232e-2,1.1497918417366842e-2,1.1558953573616842e-2,1.1691991140755514e-2,1.1405888845833639e-2,1.1461917211922506e-2,1.1469785025032857e-2,1.1672917654427389e-2,1.1408034613045553e-2,1.1404935171517232e-2,1.1380854895027975e-2,1.1122885992440084e-2,1.1273089697274068e-2,1.1266890814217428e-2,1.1796895315560201e-2,1.1602107336434225e-2,1.135105257264028e-2,1.1493865301522115e-2,1.1412802984627584e-2,1.1310998251351217e-2,1.1311951925667623e-2,1.1326018621834615e-2,1.1464778234871725e-2,1.1487904837044576e-2,1.1543933203133443e-2,1.1300030996712545e-2,1.1239949514778951e-2,1.1408988287361959e-2,1.1796895315560201e-2,1.182884340515981e-2,1.1199895193489889e-2,1.1467877676400045e-2,1.128095751038442e-2,1.1643830587776998e-2,1.1377755453499654e-2,1.1514130880745748e-2,1.1376801779183248e-2,1.1263076116951803e-2,1.1276904394539693e-2,1.1238042166146139e-2,1.1408988287361959e-2,1.1411849310311178e-2,1.1334840109261373e-2,1.1578980734261373e-2,1.1583987524422506e-2,1.1411849310311178e-2,1.1327925970467428e-2,1.1363927175911764e-2,1.1098805715950826e-2,1.1388007452401021e-2,1.6171876242073873e-2,1.1288825323494771e-2,1.1370126058968404e-2,1.1286917974861959e-2,1.1690799047860006e-2,1.1645976354988912e-2,1.1208001425179342e-2,1.1666003515633443e-2,1.1192027380379537e-2,1.1501971533211568e-2,1.13541520141686e-2,1.145786409607778e-2,1.1279050161751607e-2,1.1248055746468404e-2,1.1156026174935201e-2,],- [1.059149866333852e-2,1.0639433187994802e-2,1.0687367712651082e-2,1.0735302237307363e-2,1.0783236761963643e-2,1.0831171286619925e-2,1.0879105811276206e-2,1.0927040335932486e-2,1.0974974860588767e-2,1.1022909385245049e-2,1.1070843909901328e-2,1.111877843455761e-2,1.116671295921389e-2,1.121464748387017e-2,1.1262582008526452e-2,1.1310516533182732e-2,1.1358451057839013e-2,1.1406385582495293e-2,1.1454320107151575e-2,1.1502254631807856e-2,1.1550189156464136e-2,1.1598123681120417e-2,1.1646058205776699e-2,1.1693992730432978e-2,1.174192725508926e-2,1.178986177974554e-2,1.183779630440182e-2,1.18857308290581e-2,1.1933665353714382e-2,1.1981599878370663e-2,1.2029534403026943e-2,1.2077468927683225e-2,1.2125403452339506e-2,1.2173337976995786e-2,1.2221272501652067e-2,1.2269207026308349e-2,1.2317141550964628e-2,1.236507607562091e-2,1.241301060027719e-2,1.2460945124933471e-2,1.250887964958975e-2,1.2556814174246032e-2,1.2604748698902313e-2,1.2652683223558593e-2,1.2700617748214875e-2,1.2748552272871156e-2,1.2796486797527436e-2,1.2844421322183717e-2,1.2892355846839999e-2,1.2940290371496278e-2,1.298822489615256e-2,1.303615942080884e-2,1.3084093945465121e-2,1.31320284701214e-2,1.3179962994777682e-2,1.3227897519433963e-2,1.3275832044090243e-2,1.3323766568746525e-2,1.3371701093402806e-2,1.3419635618059086e-2,1.3467570142715367e-2,1.3515504667371649e-2,1.3563439192027928e-2,1.361137371668421e-2,1.365930824134049e-2,1.3707242765996771e-2,1.375517729065305e-2,1.3803111815309332e-2,1.3851046339965613e-2,1.3898980864621893e-2,1.3946915389278175e-2,1.3994849913934456e-2,1.4042784438590736e-2,1.4090718963247017e-2,1.4138653487903299e-2,1.4186588012559578e-2,1.4234522537215858e-2,1.428245706187214e-2,1.4330391586528421e-2,1.43783261111847e-2,1.4426260635840982e-2,1.4474195160497264e-2,1.4522129685153543e-2,1.4570064209809825e-2,1.4617998734466106e-2,1.4665933259122386e-2,1.4713867783778665e-2,1.4761802308434949e-2,1.4809736833091228e-2,1.4857671357747508e-2,1.490560588240379e-2,1.4953540407060071e-2,1.500147493171635e-2,1.5049409456372632e-2,1.5097343981028914e-2,1.5145278505685193e-2,1.5193213030341475e-2,1.5241147554997756e-2,1.5289082079654036e-2,1.5337016604310316e-2,1.5384951128966599e-2,1.5432885653622878e-2,1.5480820178279158e-2,1.552875470293544e-2,1.5576689227591721e-2,1.5624623752248e-2,1.567255827690428e-2,1.5720492801560564e-2,1.5768427326216843e-2,1.5816361850873123e-2,1.5864296375529406e-2,1.5912230900185686e-2,1.5960165424841966e-2,1.600809994949825e-2,1.605603447415453e-2,1.6103968998810808e-2,1.615190352346709e-2,1.619983804812337e-2,1.624777257277965e-2,1.6295707097435934e-2,1.6343641622092214e-2,1.6391576146748493e-2,1.6439510671404776e-2,1.6487445196061056e-2,1.6535379720717336e-2,1.6583314245373616e-2,1.66312487700299e-2,1.667918329468618e-2,],- [1.5067393424728645e-6,8.62607601344067e-5,1.5910388716289035e-3,2.2359461225032688e-2,0.22389127382472598,1.6180275348192565,8.511768163087446,33.056836908354605,96.8628371994017,221.70142102555153,417.94088105965636,693.2159892859798,1061.5905949112644,1500.8915224853342,1906.2539720837385,2151.984505925835,2193.374133918425,2059.089385023018,1801.350084880522,1502.6766857697958,1254.1618628330045,1075.918331100701,907.9521102123229,706.1247039871992,498.87613231450484,330.3040614955097,205.62828913677973,113.00960289955205,50.57119596368357,17.424731765605493,4.482849750722098,0.8467586406709887,0.11619141498507161,1.1519756454105766e-2,8.039279295825564e-4,5.3542086439195716e-5,-9.395795766975361e-6,9.916163538161706e-6,-8.976167115681441e-6,8.179240316401413e-6,-7.471281602496892e-6,6.841369628685418e-6,-6.279409450018718e-6,5.7767031090578865e-6,-5.325764163582279e-6,4.920152530535622e-6,-4.554325615788818e-6,4.223506623342113e-6,-3.923571320570379e-6,3.650955083231211e-6,-3.402560724672476e-6,3.175704449899703e-6,-2.968037791255329e-6,2.777516513998219e-6,-2.6023425946621576e-6,2.4409408227324004e-6,-2.2919204159057845e-6,2.154053833027385e-6,-2.0262523727212477e-6,1.907550678612085e-6,-1.7970869314499403e-6,1.69409205382953e-6,-1.5978777874803784e-6,1.507824005442586e-6,-1.4233749150533707e-6,1.3440256175256121e-6,-1.2693193481470597e-6,1.1988418026947988e-6,-1.1322128266597943e-6,1.0690858848078989e-6,-1.0091408664632536e-6,9.520826641467624e-7,-8.97636356676499e-7,8.455460077923685e-7,-7.955698606547608e-7,7.474803606410459e-7,-7.010582966461137e-7,6.560946248020503e-7,-6.123859912463326e-7,5.697301181110461e-7,-5.279312838005137e-7,4.867864536031556e-7,-4.4609603963758e-7,4.0564787035662817e-7,-3.65226765075675e-7,3.2460018129877547e-7,-2.8352490776987724e-7,2.417324017666222e-7,-1.9893477090088483e-7,1.5480866967402934e-7,-1.089980168192276e-7,6.109922317207973e-8,-1.0656858056733018e-8,-4.285020528453524e-8,1.0001854758893345e-7,-1.6153799944400636e-7,2.282046193327827e-7,-3.0094514422922963e-7,3.808339699956995e-7,-4.691189047981285e-7,5.672446708685856e-7,-6.768710229465412e-7,7.99886039775834e-7,-9.383964184965184e-7,1.0946964166987734e-6,-1.2704324520321107e-6,1.507136384483626e-6,-2.672633465308161e-7,4.054216072922732e-5,7.363660043939374e-4,9.98850979902326e-3,9.540577334715034e-2,0.6441483196222084,3.0731255080436286,10.360449489507818,24.681793273046946,41.55045836140686,49.42826996112889,41.55045825160409,24.681793494680175,10.360449151940749,3.0731259678112877,0.644147729092882,9.540650564790562e-2,9.98762210492744e-3,7.374254667425369e-4,3.9292479660887163e-5,1.2330192623251278e-6,]);- mangulate(3, "intmap/intmap 25k",- 5.067442705544335e-3,- [5.340758612068991e-3,4.925910284432272e-3,5.171958258065085e-3,4.924956610115866e-3,4.933062841805319e-3,4.967871954354147e-3,5.077067663582663e-3,4.929009725960593e-3,4.899922659310202e-3,5.186024954232077e-3,5.714837362679343e-3,5.070868780526022e-3,4.852000524910788e-3,5.018893530281882e-3,4.88585596314321e-3,4.958812048348288e-3,5.096856405648093e-3,4.989806463631491e-3,5.088988592537741e-3,5.142871191414694e-3,4.957858374031882e-3,4.939023306282858e-3,5.051795294197897e-3,4.797879507454733e-3,4.98503809204946e-3,4.828873922737936e-3,5.634967138680319e-3,5.024138739022116e-3,4.796925833138327e-3,5.340043356331686e-3,5.188885977181296e-3,5.277816107186179e-3,4.908982565316061e-3,4.970971395882468e-3,4.90874414673696e-3,5.086842825325827e-3,4.9590504669273896e-3,5.004111578377585e-3,5.230132391365866e-3,4.930917074593405e-3,5.999985983284811e-3,5.257788946541647e-3,5.5939591430748505e-3,5.002919485482077e-3,5.155030538948874e-3,4.954997351082663e-3,4.979077627571921e-3,4.813853552254538e-3,5.193892767342429e-3,4.932824423226218e-3,4.970017721566061e-3,5.044881155403952e-3,4.874888708504538e-3,4.990760137947897e-3,5.087081243904929e-3,5.3710377716148896e-3,4.852954199227194e-3,5.110923101815085e-3,5.335036566170554e-3,4.994097998055319e-3,5.1438248657311005e-3,4.871789266976218e-3,5.083028128060202e-3,4.844847967537741e-3,5.076113989266257e-3,4.909936239632468e-3,5.2048600219811005e-3,5.096141149910788e-3,4.986945440682272e-3,4.9437916778648896e-3,4.876080801400046e-3,4.903737356575827e-3,4.865828802498679e-3,5.092803289803366e-3,5.294982244881491e-3,5.0599015258873505e-3,4.8369801544273896e-3,5.153838446053366e-3,5.067054083260397e-3,5.158845236214499e-3,4.848901083382468e-3,4.8729813598717255e-3,5.102816870125632e-3,4.915896704110007e-3,5.27495508423696e-3,4.808846762093405e-3,4.930917074593405e-3,4.932824423226218e-3,5.0408280395592255e-3,4.846993734749655e-3,5.286876013192038e-3,5.021039297493796e-3,4.965964605721335e-3,5.518857290657858e-3,5.275908758553366e-3,5.303088476570944e-3,5.109969427498679e-3,5.583945562752585e-3,4.867020895394186e-3,5.2489674591148896e-3,],- [4.676619818123679e-3,4.687987315605378e-3,4.699354813087077e-3,4.710722310568776e-3,4.722089808050475e-3,4.733457305532174e-3,4.744824803013873e-3,4.756192300495572e-3,4.767559797977271e-3,4.77892729545897e-3,4.790294792940669e-3,4.801662290422368e-3,4.813029787904067e-3,4.8243972853857665e-3,4.8357647828674655e-3,4.8471322803491645e-3,4.858499777830864e-3,4.869867275312563e-3,4.881234772794262e-3,4.892602270275961e-3,4.90396976775766e-3,4.915337265239359e-3,4.926704762721059e-3,4.938072260202758e-3,4.949439757684457e-3,4.960807255166156e-3,4.972174752647855e-3,4.983542250129554e-3,4.994909747611253e-3,5.006277245092952e-3,5.017644742574651e-3,5.02901224005635e-3,5.040379737538049e-3,5.051747235019748e-3,5.063114732501447e-3,5.074482229983146e-3,5.085849727464845e-3,5.097217224946544e-3,5.108584722428243e-3,5.119952219909942e-3,5.131319717391641e-3,5.14268721487334e-3,5.1540547123550395e-3,5.1654222098367385e-3,5.1767897073184375e-3,5.188157204800137e-3,5.199524702281836e-3,5.210892199763535e-3,5.222259697245234e-3,5.233627194726933e-3,5.244994692208632e-3,5.256362189690331e-3,5.26772968717203e-3,5.279097184653729e-3,5.290464682135428e-3,5.301832179617127e-3,5.313199677098826e-3,5.324567174580525e-3,5.335934672062224e-3,5.347302169543923e-3,5.358669667025622e-3,5.370037164507321e-3,5.38140466198902e-3,5.39277215947072e-3,5.404139656952418e-3,5.415507154434118e-3,5.426874651915816e-3,5.438242149397516e-3,5.449609646879215e-3,5.460977144360914e-3,5.472344641842613e-3,5.4837121393243125e-3,5.4950796368060115e-3,5.5064471342877105e-3,5.51781463176941e-3,5.529182129251109e-3,5.540549626732808e-3,5.551917124214507e-3,5.563284621696206e-3,5.574652119177905e-3,5.586019616659604e-3,5.597387114141303e-3,5.608754611623002e-3,5.620122109104701e-3,5.6314896065864e-3,5.642857104068099e-3,5.654224601549798e-3,5.665592099031497e-3,5.676959596513196e-3,5.688327093994895e-3,5.699694591476594e-3,5.711062088958293e-3,5.722429586439992e-3,5.733797083921691e-3,5.74516458140339e-3,5.756532078885089e-3,5.7678995763667884e-3,5.7792670738484875e-3,5.7906345713301865e-3,5.8020020688118856e-3,5.813369566293585e-3,5.824737063775284e-3,5.8361045612569835e-3,5.847472058738682e-3,5.858839556220382e-3,5.87020705370208e-3,5.88157455118378e-3,5.892942048665478e-3,5.904309546147178e-3,5.915677043628876e-3,5.927044541110576e-3,5.938412038592274e-3,5.949779536073974e-3,5.961147033555673e-3,5.972514531037372e-3,5.983882028519071e-3,5.99524952600077e-3,6.006617023482469e-3,6.017984520964168e-3,6.029352018445867e-3,6.040719515927566e-3,6.052087013409265e-3,6.063454510890964e-3,6.074822008372663e-3,6.086189505854362e-3,6.0975570033360614e-3,6.1089245008177605e-3,6.1202919982994595e-3,],- [120.40626011580319,134.79094214130544,163.81785360780302,207.92946872195603,267.619412470169,343.2588336345364,434.91093596055737,542.1640232842949,664.0106985820831,798.7931587056509,944.2229178989038,1097.4698646033914,1255.3031557089914,1414.258100301859,1570.8012462824427,1721.4712194215529,1862.984271311001,1992.3077197231087,2106.7169584169806,2203.857967315519,2281.8343784085214,2339.326107175012,2375.7285376967457,2391.2829651721786,2387.1570066640484,2365.433249971276,2328.9775992688997,2281.1835031865016,2225.618550771366,2165.627507617751,2103.9625230499596,2042.511349980418,1982.1768340353053,1922.9295630324095,1864.0184307825639,1804.2907461291459,1742.5529994535555,1677.900232955811,1609.9556684452775,1538.9875152195953,1465.8986056560113,1392.1086911792522,1319.363628233027,1249.5091662563839,1184.262271208891,1125.0045468555606,1072.6147198767592,1027.3525865941053,988.8048366940559,955.9014102568489,927.0068459349659,900.0830976213938,872.9093663148886,843.3333674943664,809.5206485199151,770.1668857871983,724.6434894394662,673.0581244568833,616.2260831176908,555.5623971524163,492.91526746512403,430.36718888546386,370.03087274177454,313.86366438221313,263.51812154543666,220.2392840491194,184.81211826605892,157.55642915938222,138.36162856112423,126.75037825021431,121.95847079544679,123.0185029034322,128.83694018812423,138.25781428468986,150.11091363960105,163.2469482650722,176.5656136002667,189.0437050952394,199.76891282437194,207.98093768747214,213.11627440702594,214.84816730358384,213.11069104425974,208.0968775493118,200.225434964074,190.07775993730036,178.3145462656805,165.5869672608538,152.45929745392888,139.35724499281528,126.54990276546408,114.16497625536283,102.22922334509414,90.72099408219631,79.62059877321673,68.94691829125789,58.77402460680266,49.22777153486429,40.46750064169651,32.6608908067588,25.960128103872275,20.48540305321012,16.3182551132849,13.50367123979443,12.057126963242787,11.971553540165223,13.219671614402367,15.748987127997722,19.469448108904384,24.236610108423395,29.835429496092722,35.970874019194184,42.27101278335131,48.3060739634601,53.62351018209745,57.79515888507249,60.46914306129024,61.41721619428076,60.56846699600331,58.02273551231475,54.041170883189615,49.015996487904005,43.42548285996627,37.78233678527546,32.58373076656188,28.269249360142126,25.18993557161973,23.588487089845888,]);- mangulate(4, "intmap/intmap 50k",- 1.3085197260292869e-2,- [1.2671891500862936e-2,1.2530986120613912e-2,1.331180696717153e-2,1.2922946264656881e-2,1.3363066961678365e-2,1.2693110754402975e-2,1.3326827337654928e-2,1.2479964544686178e-2,1.3017836859139303e-2,1.365989809265981e-2,1.302498941651235e-2,1.2518111517342428e-2,1.3585988333138326e-2,1.3022843649300436e-2,1.3281766226204732e-2,1.2613955786141256e-2,1.385516290894399e-2,1.3940755178841451e-2,1.352399950257192e-2,1.3097945501717428e-2,1.3506118109139303e-2,1.3110820104988912e-2,1.3454858114632467e-2,1.2654963781746725e-2,1.341098909607778e-2,1.301902895203481e-2,1.3174954702767232e-2,1.2730065634163717e-2,1.4521066000374654e-2,1.2897912313851217e-2,1.3276044180306295e-2,1.2595120718392232e-2,1.331180696717153e-2,1.2639943411263326e-2,1.4387074758919576e-2,1.2972060491951803e-2,1.3904753973397115e-2,1.2422028829964498e-2,1.2901011755379537e-2,1.2640897085579732e-2,1.3360921194466451e-2,1.2840930273445943e-2,1.3758841802986959e-2,1.3076010992440084e-2,1.2791816046151021e-2,1.2526933004769186e-2,1.3231936743172506e-2,1.2719098379525045e-2,1.3115826895150045e-2,1.3031903555306295e-2,1.278394823304067e-2,1.2812081625374654e-2,1.2894097616585592e-2,1.355594759217153e-2,1.3280097296151021e-2,1.2547913839730123e-2,1.3145867636116842e-2,1.2866917898568014e-2,1.3199750234993795e-2,1.3061944296273092e-2,1.318687563172231e-2,1.2741032888802389e-2,1.3162795355233053e-2,1.2489978125008443e-2,1.3220969488533834e-2,1.3532820989998678e-2,1.4222089102181295e-2,1.3004962255867818e-2,1.3394776632698873e-2,1.2651864340218404e-2,1.3076010992440084e-2,1.2789908697518209e-2,1.3344947149666646e-2,1.3137046148690084e-2,1.3185921957405904e-2,1.2434903433235982e-2,1.2854996969612936e-2,1.2616816809090475e-2,1.3529959967049459e-2,1.2469950964363912e-2,1.3272944738777975e-2,1.2852851202401021e-2,1.310295229187856e-2,1.2664023687752584e-2,1.3544026663216451e-2,1.2381736090096334e-2,1.383990411988149e-2,1.3158980657967428e-2,1.3267937948616842e-2,1.2599889089974264e-2,1.3734999945076803e-2,1.3194028189095357e-2,1.32920182251061e-2,1.2640897085579732e-2,1.2952987005623678e-2,1.25748551391686e-2,1.3215962698372701e-2,1.264208917847524e-2,1.3268891622933248e-2,1.269096498719106e-2,],- [1.2167803099068501e-2,1.2188017239953022e-2,1.220823138083754e-2,1.222844552172206e-2,1.224865966260658e-2,1.22688738034911e-2,1.2289087944375618e-2,1.2309302085260139e-2,1.2329516226144657e-2,1.2349730367029178e-2,1.2369944507913696e-2,1.2390158648798217e-2,1.2410372789682737e-2,1.2430586930567256e-2,1.2450801071451776e-2,1.2471015212336295e-2,1.2491229353220815e-2,1.2511443494105334e-2,1.2531657634989854e-2,1.2551871775874373e-2,1.2572085916758893e-2,1.2592300057643412e-2,1.2612514198527932e-2,1.2632728339412452e-2,1.2652942480296971e-2,1.2673156621181491e-2,1.269337076206601e-2,1.271358490295053e-2,1.2733799043835049e-2,1.275401318471957e-2,1.2774227325604088e-2,1.2794441466488608e-2,1.2814655607373127e-2,1.2834869748257647e-2,1.2855083889142166e-2,1.2875298030026686e-2,1.2895512170911207e-2,1.2915726311795725e-2,1.2935940452680246e-2,1.2956154593564764e-2,1.2976368734449285e-2,1.2996582875333803e-2,1.3016797016218324e-2,1.3037011157102842e-2,1.3057225297987363e-2,1.3077439438871881e-2,1.3097653579756402e-2,1.311786772064092e-2,1.313808186152544e-2,1.3158296002409961e-2,1.317851014329448e-2,1.3198724284179e-2,1.3218938425063519e-2,1.3239152565948039e-2,1.3259366706832558e-2,1.3279580847717078e-2,1.3299794988601597e-2,1.3320009129486117e-2,1.3340223270370637e-2,1.3360437411255156e-2,1.3380651552139676e-2,1.3400865693024195e-2,1.3421079833908715e-2,1.3441293974793234e-2,1.3461508115677754e-2,1.3481722256562273e-2,1.3501936397446793e-2,1.3522150538331312e-2,1.3542364679215832e-2,1.3562578820100351e-2,1.3582792960984871e-2,1.3603007101869392e-2,1.362322124275391e-2,1.364343538363843e-2,1.366364952452295e-2,1.368386366540747e-2,1.3704077806291988e-2,1.3724291947176509e-2,1.3744506088061027e-2,1.3764720228945548e-2,1.3784934369830068e-2,1.3805148510714587e-2,1.3825362651599105e-2,1.3845576792483626e-2,1.3865790933368146e-2,1.3886005074252665e-2,1.3906219215137185e-2,1.3926433356021704e-2,1.3946647496906224e-2,1.3966861637790743e-2,1.3987075778675263e-2,1.4007289919559782e-2,1.4027504060444302e-2,1.4047718201328822e-2,1.4067932342213341e-2,1.4088146483097861e-2,1.410836062398238e-2,1.41285747648669e-2,1.4148788905751419e-2,1.416900304663594e-2,1.4189217187520458e-2,1.4209431328404978e-2,1.4229645469289499e-2,1.4249859610174017e-2,1.4270073751058536e-2,1.4290287891943056e-2,1.4310502032827577e-2,1.4330716173712095e-2,1.4350930314596616e-2,1.4371144455481134e-2,1.4391358596365655e-2,1.4411572737250173e-2,1.4431786878134694e-2,1.4452001019019212e-2,1.4472215159903733e-2,1.4492429300788253e-2,1.4512643441672772e-2,1.453285758255729e-2,1.455307172344181e-2,1.4573285864326331e-2,1.459350000521085e-2,1.461371414609537e-2,1.4633928286979889e-2,1.4654142427864409e-2,1.4674356568748928e-2,1.4694570709633448e-2,1.4714784850517967e-2,1.4734998991402487e-2,],- [103.23384805393238,107.3752914677975,115.62757324750896,127.92730622276207,144.17422922035547,164.22570061823546,187.89046994668956,214.9225509805089,245.01607980785485,277.80202813715005,312.84755889540276,349.6586653358409,387.68653606501005,426.3378472910014,464.9889114723179,503.0033208615244,539.7524299937965,574.6377413388791,607.1140155301579,636.7117473408694,663.0575569077963,685.8910649273824,705.0769643359672,720.6112697542422,732.6211039638166,741.3578357538271,747.183870192453,750.5538581101829,751.9914846016084,752.0632743245319,751.3509884113067,750.4241785264625,749.8143232872203,749.9917330901451,751.346113655101,754.1713704717274,758.654953954549,764.8718146840549,772.7828710084405,782.2377844405181,792.9817773611506,804.666191776358,816.8624554126002,829.0790739463846,840.7811940645797,851.4121780486358,860.4165017468949,867.2631466135408,871.4685212144883,872.6178403472804,870.3838344248719,864.5416807240634,854.9791599702043,841.7012571436591,824.8287434534138,804.5906817547868,781.3112591537147,755.39182253342,727.2894195854574,697.4934712671561,666.5023698466989,634.8017748961096,602.8461577421625,571.0447425606752,539.7524582172168,509.2659209570764,479.823898198806,451.6112403749668,424.7649773819395,399.3811972990175,375.52146137047225,353.2178291729213,332.4760102689458,313.27664402070417,295.5751540705569,279.3009551651073,264.3569567966358,250.62028972509458,237.94498868723457,226.16703635906114,215.11176864557885,204.60322748195753,194.47469020897543,184.5793577556953,174.8000815282204,165.0570623480132,155.31265244628065,145.5727023154178,135.8842732397759,126.3299319204459,117.01920471911774,108.07805190518104,99.63739564601549,91.82178385502823,84.73919671523653,78.47282060833221,73.07535457528495,68.56611435886083,64.93089794635813,62.124310727988636,60.074046613025786,58.68650143256997,57.85306195243451,57.45646096686773,57.376699379389564,57.49618640235938,57.70391293348565,57.89862615740994,57.991095703013116,57.90564068524497,57.58111828092576,56.97156156687562,56.04660695832037,54.791783567068784,53.208663459476035,51.31480740409522,49.143396455095484,46.74242241855831,44.17332178797506,41.50897538202859,38.83105324089572,36.22675254751814,33.78504579162512,31.592617995872008,29.729718160576247,28.266176126642666,27.2578394261955,26.74366553476359,]);- mangulate(5, "intmap/intmap 75k",- 1.782442693940053e-2,- [1.749295358887563e-2,1.7258826544197896e-2,1.7368022253426412e-2,1.8662873556526998e-2,1.7566863348397115e-2,1.7872039129647115e-2,1.7835799505623678e-2,1.8371049215706686e-2,1.8445912649544576e-2,1.730674867859731e-2,1.7462912847908834e-2,1.7838898947151998e-2,1.7818871786507467e-2,1.78241169952477e-2,1.738590364685903e-2,1.7644826223763326e-2,1.727599268189321e-2,1.8683854391487936e-2,1.7210904409798482e-2,1.7943803121956686e-2,1.73358357452477e-2,1.80529988311852e-2,1.8007937719735006e-2,1.8245879461678365e-2,1.7191830923470357e-2,1.8243972113045553e-2,1.7829123785408834e-2,1.8160048773201803e-2,1.779502992859731e-2,1.8102828314217428e-2,1.717085008850942e-2,1.8603984167488912e-2,1.746982698670278e-2,1.810187463990102e-2,1.7732802679451803e-2,1.7922107031258443e-2,1.8269959738167623e-2,1.75799763702477e-2,1.7178956320198873e-2,1.9241992285164693e-2,1.832288866272817e-2,1.798886423340688e-2,1.7413798620613912e-2,1.774901514283071e-2,1.767582063904653e-2,1.7769757559212545e-2,1.7350140859993795e-2,1.7886821081551412e-2,1.7167035391243795e-2,1.884907846680532e-2,1.7287913610848287e-2,1.791686182251821e-2,1.7867032339485982e-2,1.819795732727895e-2,1.7615739157112936e-2,1.7959061911019186e-2,1.7609063436898092e-2,1.7425004293831686e-2,1.813978319397817e-2,1.778716211548696e-2,1.7445031454476217e-2,1.8166962911995748e-2,1.7095748236092428e-2,1.835197572937856e-2,1.718610887757192e-2,1.774901514283071e-2,1.7853919317635396e-2,1.8454972555550436e-2,1.7885867407235006e-2,1.8212024023445943e-2,1.7335120489510396e-2,1.797217493286977e-2,1.84039509796227e-2,1.8130008032235006e-2,1.7295066168221334e-2,1.718896990052114e-2,1.7470780661019186e-2,1.8232051184090475e-2,1.7176095297249654e-2,1.7421904852303365e-2,1.7430964758309225e-2,1.73510945343102e-2,1.7648164083870748e-2,2.055210237732778e-2,1.9183818151863912e-2,1.781481867066274e-2,1.7480078985604146e-2,1.763791208496938e-2,1.7991010000618795e-2,1.7378989508065084e-2,1.8564883520516256e-2,1.6936961462410787e-2,1.801294450989614e-2,1.7384949972542623e-2,1.8936816503914693e-2,1.7874900152596334e-2,1.7111960699471334e-2,1.766389971009145e-2,1.7120782186898092e-2,1.785010462036977e-2,],- [1.6575447370919087e-2,1.660960618271358e-2,1.6643764994508068e-2,1.667792380630256e-2,1.6712082618097052e-2,1.6746241429891544e-2,1.6780400241686033e-2,1.6814559053480525e-2,1.6848717865275017e-2,1.688287667706951e-2,1.6917035488864e-2,1.695119430065849e-2,1.6985353112452983e-2,1.7019511924247475e-2,1.7053670736041963e-2,1.7087829547836456e-2,1.7121988359630948e-2,1.715614717142544e-2,1.719030598321993e-2,1.722446479501442e-2,1.7258623606808913e-2,1.7292782418603405e-2,1.7326941230397894e-2,1.7361100042192386e-2,1.7395258853986878e-2,1.742941766578137e-2,1.746357647757586e-2,1.749773528937035e-2,1.7531894101164843e-2,1.7566052912959335e-2,1.7600211724753824e-2,1.7634370536548316e-2,1.7668529348342808e-2,1.77026881601373e-2,1.773684697193179e-2,1.777100578372628e-2,1.7805164595520773e-2,1.7839323407315266e-2,1.7873482219109754e-2,1.7907641030904246e-2,1.794179984269874e-2,1.797595865449323e-2,1.801011746628772e-2,1.804427627808221e-2,1.8078435089876704e-2,1.8112593901671196e-2,1.8146752713465684e-2,1.8180911525260177e-2,1.821507033705467e-2,1.824922914884916e-2,1.828338796064365e-2,1.8317546772438142e-2,1.8351705584232634e-2,1.8385864396027126e-2,1.8420023207821615e-2,1.8454182019616107e-2,1.84883408314106e-2,1.852249964320509e-2,1.855665845499958e-2,1.8590817266794072e-2,1.8624976078588564e-2,1.8659134890383056e-2,1.8693293702177545e-2,1.8727452513972037e-2,1.876161132576653e-2,1.879577013756102e-2,1.882992894935551e-2,1.8864087761150002e-2,1.8898246572944494e-2,1.8932405384738987e-2,1.8966564196533475e-2,1.9000723008327967e-2,1.903488182012246e-2,1.906904063191695e-2,1.910319944371144e-2,1.9137358255505933e-2,1.9171517067300425e-2,1.9205675879094917e-2,1.9239834690889406e-2,1.9273993502683898e-2,1.930815231447839e-2,1.9342311126272882e-2,1.937646993806737e-2,1.9410628749861863e-2,1.9444787561656355e-2,1.9478946373450847e-2,1.9513105185245336e-2,1.9547263997039828e-2,1.958142280883432e-2,1.9615581620628812e-2,1.96497404324233e-2,1.9683899244217793e-2,1.9718058056012285e-2,1.9752216867806777e-2,1.9786375679601266e-2,1.9820534491395758e-2,1.985469330319025e-2,1.9888852114984742e-2,1.992301092677923e-2,1.9957169738573723e-2,1.9991328550368215e-2,2.0025487362162704e-2,2.0059646173957196e-2,2.009380498575169e-2,2.012796379754618e-2,2.0162122609340673e-2,2.019628142113516e-2,2.0230440232929654e-2,2.0264599044724146e-2,2.0298757856518634e-2,2.0332916668313127e-2,2.036707548010762e-2,2.040123429190211e-2,2.0435393103696603e-2,2.046955191549109e-2,2.0503710727285584e-2,2.0537869539080076e-2,2.0572028350874565e-2,2.0606187162669057e-2,2.064034597446355e-2,2.067450478625804e-2,2.0708663598052533e-2,2.0742822409847022e-2,2.0776981221641514e-2,2.0811140033436006e-2,2.0845298845230495e-2,2.0879457657024987e-2,2.091361646881948e-2,],- [21.93696057324332,24.323735524953364,29.197465686411057,36.75008750960917,47.248277626418485,61.007705134983176,78.35878632902248,99.60495891767276,124.97563466621021,154.5773214493261,188.34766234011738,226.01800790081552,267.0903280285252,310.8335864909691,356.30310088076294,402.38402294292166,447.8571842398891,491.482547822521,532.0928088563512,568.6876833767396,600.5184203373826,627.1522664598195,648.5080867703326,664.8570509451873,676.7860520244654,685.1259888700641,690.8517144497637,694.9646902102361,698.3724901820792,701.7806196819816,705.6112064695835,709.9598805326355,714.5969034794213,719.0120904505084,722.4963654621741,724.2471177814522,723.48097725776,719.5369266930733,711.954989993026,700.5206229119342,685.2713900030592,666.469207695621,644.5470131490156,620.0421145336287,593.529156572744,565.563700677379,536.6435566426949,507.19027225134886,477.5487341742802,447.9996022176686,418.77782180289967,390.0907773898615,362.13136841350666,335.0837430392383,309.1218853193872,284.40312149134456,261.0595539944422,239.1904075297476,218.85749096682912,200.0847993889323,182.86208294073515,167.15129342624252,152.89434445180126,140.02059566447338,128.45279270387934,118.11070564611964,108.91226081461306,100.7724507010389,93.60068621341667,87.2975145400551,81.75176443963267,76.83918639468442,72.42350021276238,68.36042245038495,64.50472756111803,60.719762896263845,56.888210439146604,52.92242352488722,48.77250900225098,44.430555664609024,39.93001125126254,35.34006272821711,30.755784337782483,26.285572702609148,22.037817602200025,18.108778586462353,14.573274687076877,11.479161383345508,8.845831510154438,6.666303326330748,4.911977577921341,3.5389188883712333,2.494539495813015,1.7237762860966004,1.1741684743099787,0.7995749403683968,0.5625474529992474,0.43555794509438145,0.4013533830075499,0.45269331548320124,0.5916411256085017,0.828465891657938,1.180104015328516,1.6680610106593938,2.315629031373574,3.1443682916201947,4.169948369871807,5.39764755359036,6.818024735941304,8.403453934332482,10.1062867001933,11.859333517944679,13.579109923623305,15.17189480676388,16.54215940440886,17.602443088285202,18.28338710822338,18.542485590936373,18.370226260684653,17.79266157209302,16.870001092881687,15.691429395854753,14.366898199321922,13.01700778896602,11.762224038372791,10.712582038139441,9.958771303703996,9.565178629521867,]);- - var benches = ["fib/fib 10","fib/fib 20","fib/fib 30","intmap/intmap 25k","intmap/intmap 50k","intmap/intmap 75k",];- var ylabels = [[-0,'<a href="#b0">fib/fib 10</a>'],[-1,'<a href="#b1">fib/fib 20</a>'],[-2,'<a href="#b2">fib/fib 30</a>'],[-3,'<a href="#b3">intmap/intmap 25k</a>'],[-4,'<a href="#b4">intmap/intmap 50k</a>'],[-5,'<a href="#b5">intmap/intmap 75k</a>'],];- var means = $.scaleTimes([8.087233523139602e-7,9.511279240520537e-5,1.1464177420052388e-2,5.067442705544335e-3,1.3085197260292869e-2,1.782442693940053e-2,]);- var xs = [];- var prev = null;- for (var i = 0; i < means[0].length; i++) {- var name = benches[i].split(/\//);- name.pop();- name = name.join('/');- if (name != prev) {- xs.push({ label: name, data: [[means[0][i], -i]]});- prev = name;- }- else- xs[xs.length-1].data.push([means[0][i],-i]);- }- var oq = $("#overview");- o = $.plot(oq, xs, { bars: { show: true, horizontal: true,- barWidth: 0.75, align: "center" },- grid: { borderColor: "#777", hoverable: true },- legend: { show: xs.length > 1 },- xaxis: { max: Math.max.apply(undefined,means[0]) * 1.02 },- yaxis: { ticks: ylabels, tickColor: '#ffffff' } });- if (benches.length > 3)- o.getPlaceholder().height(28*benches.length);- o.resize();- o.setupGrid();- o.draw();- $.addTooltip("#overview", function(x,y) { return x + ' ' + means[1]; });-});-$(document).ready(function () {- $(".time").text(function(_, text) {- return $.renderTime(text);- });- $(".citime").text(function(_, text) {- return $.renderTime(text);- });- $(".percent").text(function(_, text) {- return (text*100).toFixed(1);- });- });-</script>-- </div>- </div>- <div id="footer">- <div class="body">- <div class="footfirst">- <h2>colophon</h2>- <p>This report was created using the- <a href="http://hackage.haskell.org/package/criterion">criterion</a>- benchmark execution and performance analysis tool.</p>- <p>Criterion is developed and maintained- by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>- </div>- </div>- </div>- </body>-</html>
templates/criterion.css view
@@ -1,102 +1,143 @@-html, body {- height: 100%;- margin: 0;+html,body {+ padding: 0; margin: 0;+ font-family: sans-serif; }--#wrap {- min-height: 100%;+* {+ -webkit-tap-highlight-color: transparent; }--#main {- overflow: auto;- padding-bottom: 180px; /* must be same height as the footer */+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em; }+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+} -#footer {- position: relative;- margin-top: -180px; /* negative value of footer height */- height: 180px;- clear: both;- background: #888;- margin: 40px 0 0;- color: white;- font-size: larger;- font-weight: 300;+#legend-toggle {+ cursor: pointer; } -body:before {- /* Opera fix */- content: "";- height: 100%;- float: left;- width: 0;- margin-top: -32767px;+.overview-info {+ float:right; } -body {- font: 14px Helvetica Neue;- text-rendering: optimizeLegibility;- margin-top: 1em;+.overview-info a {+ display: inline-block;+ margin-left: 10px; }+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+} -a:link {- color: steelblue;- text-decoration: none;+select {+ outline: none;+ border:none;+ background: transparent; } -a:visited {- color: #4a743b;- text-decoration: none;+footer .content {+ padding: 0; } -#footer a {- color: white;- text-decoration: underline;+span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em; } -.hover {- color: steelblue;+@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active { text-decoration: none;+ color: #309ef2; }--.body {- width: 960px;- margin: auto;+h1.title {+ font-weight: 600; }--.footfirst {- position: relative;- top: 30px;+h1 {+ font-weight: 400; }--th {- font-weight: 500;- opacity: 0.8;+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */ }+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+} -th.cibound {- opacity: 0.4;+.explanation {+ margin-top: 3em; } -.confinterval {- opacity: 0.5;+.explanation h1 {+ font-size: 2.6em; } -h1 {- font-size: 36px;- font-weight: 300;- margin-bottom: .3em;+#grokularation.explanation li {+ margin: 1em 0; } -h2 {- font-size: 30px;- font-weight: 300;- margin-bottom: .3em;+#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal; } -.meanlegend {- color: #404040;- background-color: #ffffff;- opacity: 0.6;- font-size: smaller;+@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ } }
+ templates/criterion.js view
@@ -0,0 +1,870 @@+(function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b, j) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[j];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = sortedReports.map(function(report) {+ var est = report.reportAnalysis.anMean;+ return {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ onResize: function(chart, size) {+ if (size.width < 800) {+ chart.options.scales.yAxes[0].ticks.mirror = true;+ chart.options.scales.yAxes[0].ticks.padding = -10;+ chart.options.scales.yAxes[0].ticks.fontColor = '#000';+ } else {+ chart.options.scales.yAxes[0].ticks.fontColor = '#666';+ chart.options.scales.yAxes[0].ticks.mirror = false;+ chart.options.scales.yAxes[0].ticks.padding = 0;+ }+ },+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {+ // make sure we draw the ticks above the error bars+ z: 2,+ }+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function() {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function() {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(_event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ }+ document.addEventListener('DOMContentLoaded', function() {+ var rawJSON = document.getElementById('report-data').text;+ var reportData = JSON.parse(rawJSON)+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();
templates/default.tpl view
@@ -1,361 +1,139 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">+<!doctype html> <html>- <head>- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">- <title>criterion report</title>- <script language="javascript" type="text/javascript">- {{{js-jquery}}}- </script>- <script language="javascript" type="text/javascript">- {{{js-flot}}}- </script>- <script language="javascript" type="text/javascript">- {{{js-flot-errorbars}}}- </script>- <script language="javascript" type="text/javascript">- {{{js-flot-navigate}}}- </script>- <script language="javascript" type="text/javascript">- {{{jquery-criterion-js}}}- </script>- <style type="text/css">- {{{criterion-css}}}- </style>- <!--[if !IE 7]>- <style type="text/css">- #wrap {display:table;height:100%}- </style>- <![endif]-->- </head>- <body>- <div id="wrap">- <div id="main" class="body">- <h1>criterion performance measurements</h1>--<h2>overview</h2>--<p><a href="#grokularation">want to understand this report?</a></p>--<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ {{{js-chart}}}+ {{{js-criterion}}}+ </script>+ <style>+ {{{criterion-css}}}+ </style>+ <script type="application/json" id="report-data">+ {{{json}}}+ </script>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>+ </div> -{{#report}}-<h2><a name="b{{number}}">{{name}}</a></h2>- <table width="100%">- <tbody>- <tr>- <td><div id="kde{{number}}" class="kdechart"- style="width:450px;height:278px;"></div></td>- <td><div id="time{{number}}" class="timechart"- style="width:450px;height:278px;"></div></td>-<!--- <td><div id="cycle{{number}}" class="cyclechart"- style="width:300px;height:278px;"></div></td>--->- </tr>- </tbody>- </table>+ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1> - <table>- <thead class="analysis">- <th></th>- <th class="cibound"- title="{{anMeanConfidenceLevel}} confidence level">lower bound</th>- <th>estimate</th>- <th class="cibound"- title="{{anMeanConfidenceLevel}} confidence level">upper bound</th>- </thead>- <tbody>- <tr>- <td>OLS regression</td>- <td><span class="confinterval olstimelb{{number}}">xxx</span></td>- <td><span class="olstimept{{number}}">xxx</span></td>- <td><span class="confinterval olstimeub{{number}}">xxx</span></td>- </tr>- <tr>- <td>R² goodness-of-fit</td>- <td><span class="confinterval olsr2lb{{number}}">xxx</span></td>- <td><span class="olsr2pt{{number}}">xxx</span></td>- <td><span class="confinterval olsr2ub{{number}}">xxx</span></td>- </tr>- <tr>- <td>Mean execution time</td>- <td><span class="confinterval citime">{{anMeanLowerBound}}</span></td>- <td><span class="time">{{anMean.estPoint}}</span></td>- <td><span class="confinterval citime">{{anMeanUpperBound}}</span></td>- </tr>- <tr>- <td>Standard deviation</td>- <td><span class="confinterval citime">{{anStdDevLowerBound}}</span></td>- <td><span class="time">{{anStdDev.estPoint}}</span></td>- <td><span class="confinterval citime">{{anStdDevUpperBound}}</span></td>- </tr>- </tbody>- </table>+ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p> - <span class="outliers">- <p>Outlying measurements have {{anOutlierVar.ovDesc}}- (<span class="percent">{{anOutlierVar.ovFraction}}</span>%)- effect on estimated standard deviation.</p>- </span>-{{/report}}+ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li>+ <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p> - <h2><a name="grokularation">understanding this report</a></h2>+ </aside> - <p>In this report, each function benchmarked by criterion is assigned- a section of its own. The charts in each section are active; if- you hover your mouse over data points and annotations, you will see- more details.</p>+ <aside id="grokularation" class="explanation"> - <ul>- <li>The chart on the left is a- <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel- density estimate</a> (also known as a KDE) of time- measurements. This graphs the probability of any given time- measurement occurring. A spike indicates that a measurement of a- particular time occurred; its height indicates how often that- measurement was repeated.</li>+ <h1><a>understanding this report</a></h1> - <li>The chart on the right is the raw data from which the kernel- density estimate is built. The <i>x</i> axis indicates the- number of loop iterations, while the <i>y</i> axis shows measured- execution time for the given number of loop iterations. The- line behind the values is the linear regression prediction of- execution time for a given number of iterations. Ideally, all- measurements will be on (or very near) this line.</li>- </ul>+ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p> - <p>Under the charts is a small table.- The first two rows are the results of a linear regression run- on the measurements displayed in the right-hand chart.</p>+ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li> - <ul>- <li><i>OLS regression</i> indicates the- time estimated for a single loop iteration using an ordinary- least-squares regression model. This number is more accurate- than the <i>mean</i> estimate below it, as it more effectively- eliminates measurement overhead and other constant factors.</li>- <li><i>R² goodness-of-fit</i> is a measure of how- accurately the linear regression model fits the observed- measurements. If the measurements are not too noisy, R²- should lie between 0.99 and 1, indicating an excellent fit. If- the number is below 0.99, something is confounding the accuracy- of the linear model.</li>- <li><i>Mean execution time</i> and <i>standard deviation</i> are- statistics calculated from execution time- divided by number of iterations.</li>- </ul>+ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul> - <p>We use a statistical technique called- the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>- to provide confidence intervals on our estimates. The- bootstrap-derived upper and lower bounds on estimates let you see- how accurate we believe those estimates to be. (Hover the mouse- over the table headers to see the confidence levels.)</p>+ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p> - <p>A noisy benchmarking environment can cause some or many- measurements to fall far from the mean. These outlying- measurements can have a significant inflationary effect on the- estimate of the standard deviation. We calculate and display an- estimate of the extent to which the standard deviation has been- inflated by outliers.</p>+ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul> -<script type="text/javascript">-$(function () {- function mangulate(rpt) {- var measured = function(key) {- var idx = rpt.reportKeys.indexOf(key);- return rpt.reportMeasured.map(function(r) { return r[idx]; });- };- var lowerBound = function(est) {- return est.estPoint - est.estError.confIntLDX;- };- var upperBound = function(est) {- return est.estPoint + est.estError.confIntUDX;- };- var number = rpt.reportNumber;- var name = rpt.reportName;- var mean = rpt.reportAnalysis.anMean.estPoint;- var iters = measured("iters");- var times = measured("time");- var kdetimes = rpt.reportKDEs[0].kdeValues;- var kdepdf = rpt.reportKDEs[0].kdePDF;+ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p> - var meanSecs = mean;- var units = $.timeUnits(mean);- var rgrs = rpt.reportAnalysis.anRegress[0];- var scale = units[0];- var olsTime = rgrs.regCoeffs.iters;- $(".olstimept" + number).text(function() {- return $.renderTime(olsTime.estPoint);- });- $(".olstimelb" + number).text(function() {- return $.renderTime(lowerBound(olsTime));- });- $(".olstimeub" + number).text(function() {- return $.renderTime(upperBound(olsTime));- });- $(".olsr2pt" + number).text(function() {- return rgrs.regRSquare.estPoint.toFixed(3);- });- $(".olsr2lb" + number).text(function() {- return lowerBound(rgrs.regRSquare).toFixed(3);- });- $(".olsr2ub" + number).text(function() {- return upperBound(rgrs.regRSquare).toFixed(3);- });- mean *= scale;- kdetimes = $.scaleBy(scale, kdetimes);- var kq = $("#kde" + number);- var k = $.plot(kq,- [{ label: name + " time densities",- data: $.zip(kdetimes, kdepdf),- }],- { xaxis: { tickFormatter: $.unitFormatter(scale) },- yaxis: { ticks: false },- grid: { borderColor: "#777",- hoverable: true, markings: [ { color: '#6fd3fb',- lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },- });- var o = k.pointOffset({ x: mean, y: 0});- kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +- '" style="position:absolute;left:' + (o.left + 4) +- 'px;bottom:139px;">mean</div>');- $.addTooltip("#kde" + number,- function(secs) { return $.renderTime(secs / scale); });- var timepairs = new Array(times.length);- var lastiter = iters[iters.length-1];- var olspairs = [[0,0], [lastiter, lastiter * scale * olsTime.estPoint]];- for (var i = 0; i < times.length; i++)- timepairs[i] = [iters[i],times[i]*scale];- iterFormatter = function() {- var denom = 0;- return function(iters) {- if (iters == 0)- return '';- if (denom > 0)- return (iters / denom).toFixed();- var power;- if (iters >= 1e9) {- denom = '1e9'; power = '⁹';- }- if (iters >= 1e6) {- denom = '1e6'; power = '⁶';- }- else if (iters >= 1e3) {- denom = '1e3'; power = '³';- }- else denom = 1;- if (denom > 1) {- iters = (iters / denom).toFixed();- iters += '×10' + power + ' iters';- } else {- iters += ' iters';- }- return iters;- };- };- $.plot($("#time" + number),- [{ label: "regression", data: olspairs,- lines: { show: true } },- { label: name + " times", data: timepairs,- points: { show: true } }],- { grid: { borderColor: "#777", hoverable: true },- xaxis: { tickFormatter: iterFormatter() },- yaxis: { tickFormatter: $.unitFormatter(scale) } });- $.addTooltip("#time" + number,- function(iters,secs) {- return ($.renderTime(secs / scale) + ' / ' +- iters.toLocaleString() + ' iters');- });- if (0) {- var cyclepairs = new Array(cycles.length);- for (var i = 0; i < cycles.length; i++)- cyclepairs[i] = [cycles[i],i];- $.plot($("#cycle" + number),- [{ label: name + " cycles",- data: cyclepairs }],- { points: { show: true },- grid: { borderColor: "#777", hoverable: true },- xaxis: { tickFormatter:- function(cycles,axis) { return cycles + ' cycles'; }},- yaxis: { ticks: false },- });- $.addTooltip("#cycles" + number, function(x,y) { return x + ' cycles'; });- }- };- var reports = {{{json}}};- reports.map(mangulate);+ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p> - var benches = [{{#report}}"{{name}}",{{/report}}];- var ylabels = [{{#report}}[-{{number}},'<a href="#b{{number}}">{{name}}</a>'],{{/report}}];- var means = $.scaleTimes([{{#report}}{{anMean.estPoint}},{{/report}}]);- var stddevs = [{{#report}}{{anStdDev.estPoint}},{{/report}}];- stddevs = $.scaleBy(means[1], stddevs);- var xs = [];- var prev = null;- var colors = ["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"];- var max_time = 0;- for (var i = 0; i < means[0].length; i++) {- var name = benches[i].split(/\//);- name.pop();- name = name.join('/');- if (name != prev) {- var color = colors[xs.length / 2 % colors.length];- xs.push({ data: [[means[0][i], -i]], label: name, color: color,- bars: { show: true, horizontal: true, barWidth: 0.75,- align: "center" } });- xs.push({ data: [[means[0][i], -i, stddevs[i]]], color: color,- lines: { show: false },- points: { radius: 0, errorbars: "x",- xerr: { show: true, radius: 5,- lowerCap: "-", upperCap: "-" } } });- prev = name;- } else {- xs[xs.length - 2].data.push([means[0][i], -i]);- xs[xs.length - 1].data.push([means[0][i], -i, stddevs[i]]);- }- max_time = Math.max(max_time, means[0][i] + stddevs[i]);- }- var oq = $("#overview");- o = $.plot(oq, xs, { grid: { borderColor: "#777", hoverable: true },- legend: { show: xs.length > 1 },- xaxis: { max: max_time * 1.02 },- yaxis: { ticks: ylabels, tickColor: '#ffffff' },- zoom: { interactive: true, amount: 1.05 },- pan: { interactive: true } });- if (benches.length > 3)- o.getPlaceholder().height(28*benches.length);- o.resize();- o.setupGrid();- o.draw();- $.addTooltip("#overview", function(x,y) { return $.renderTime(x / means[1]); });-});-$(document).ready(function () {- $(".time").text(function(_, text) {- return $.renderTime(text);- });- $(".citime").text(function(_, text) {- return $.renderTime(text);- });- $(".percent").text(function(_, text) {- return (text*100).toFixed(1);- });- });-</script>+ </aside> - </div>- </div>- <div id="footer">- <div class="body">- <div class="footfirst">- <h2>colophon</h2>- <p>This report was created using the- <a href="http://hackage.haskell.org/package/criterion">criterion</a>- benchmark execution and performance analysis tool.</p>- <p>Criterion is developed and maintained- by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>- </div>+ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p> </div>- </div>- </body>+ </footer>+</body> </html>
− templates/js/jquery.criterion.js
@@ -1,106 +0,0 @@-(function ($) {- $.zip = function(a,b) {- var x = Math.min(a.length,b.length);- var c = new Array(x);- for (var i = 0; i < x; i++)- c[i] = [a[i],b[i]];- return c;- };-- $.mean = function(ary) {- var m = 0, i = 0;-- while (i < ary.length) {- var j = i++;- m += (ary[j] - m) / i;- }-- return m;- };-- $.timeUnits = function(secs) {- if (secs < 0) return $.timeUnits(-secs);- else if (secs >= 1e9) return [1e-9, "Gs"];- else if (secs >= 1e6) return [1e-6, "Ms"];- else if (secs >= 1) return [1, "s"];- else if (secs >= 1e-3) return [1e3, "ms"];- else if (secs >= 1e-6) return [1e6, "\u03bcs"];- else if (secs >= 1e-9) return [1e9, "ns"];- else if (secs >= 1e-12) return [1e12, "ps"];- return [1, "s"];- };-- $.scaleTimes = function(ary) {- var s = $.timeUnits($.mean(ary));- return [$.scaleBy(s[0], ary), s[0]];- };-- $.prepareTime = function(secs) {- var units = $.timeUnits(secs);- var scaled = secs * units[0];- var s = scaled.toPrecision(3);- var t = scaled.toString();- return [t.length < s.length ? t : s, units[1]];- };-- $.scaleBy = function(x, ary) {- var nary = new Array(ary.length);- for (var i = 0; i < ary.length; i++)- nary[i] = ary[i] * x;- return nary;- };-- $.renderTime = function(secs) {- var x = $.prepareTime(secs);- return x[0] + ' ' + x[1];- };-- $.unitFormatter = function(scale) {- var labelname;- return function(secs,axis) {- var x = $.prepareTime(secs / scale);- if (labelname === x[1])- return x[0];- else {- labelname = x[1];- return x[0] + ' ' + x[1];- }- };- };-- $.addTooltip = function(name, renderText) {- function showTooltip(x, y, contents) {- $('<div id="tooltip">' + contents + '</div>').css( {- position: 'absolute',- display: 'none',- top: y + 5,- left: x + 5,- border: '1px solid #fdd',- padding: '2px',- 'background-color': '#fee',- opacity: 0.80- }).appendTo("body").fadeIn(200);- };- var pp = null;- $(name).bind("plothover", function (event, pos, item) {- $("#x").text(pos.x.toFixed(2));- $("#y").text(pos.y.toFixed(2));-- if (item) {- if (pp != item.dataIndex) {- pp = item.dataIndex;-- $("#tooltip").remove();- var x = item.datapoint[0],- y = item.datapoint[1];-- showTooltip(item.pageX, item.pageY, renderText(x,y));- }- }- else {- $("#tooltip").remove();- pp = null;- }- });- };-})(jQuery);
templates/json.tpl view
@@ -1,1 +1,1 @@-{{json}}+{{{json}}}
tests/Cleanup.hs view
@@ -1,31 +1,36 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE BangPatterns #-}-{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# OPTIONS_GHC -Wno-orphans #-} import Criterion.Main (Benchmark, bench, nfIO) import Criterion.Types (Config(..), Verbosity(Quiet))-import Control.Applicative (pure) import Control.DeepSeq (NFData(..)) import Control.Exception (Exception, try, throwIO) import Control.Monad (when)-import Data.Typeable (Typeable)+import Data.ByteString (ByteString)+import Prelude ()+import Prelude.Compat import System.Directory (doesFileExist, removeFile) import System.Environment (withArgs) import System.IO ( Handle, IOMode(ReadWriteMode), SeekMode(AbsoluteSeek) , hClose, hFileSize, hSeek, openFile)-import Test.Tasty (TestTree, defaultMain, testGroup)+import Test.Tasty (TestTree, defaultMain)+#if MIN_VERSION_tasty(1,5,4)+import Test.Tasty (inOrderTestGroup)+#else+import Test.Tasty (TestName, testGroup)+#endif import Test.Tasty.HUnit (testCase) import Test.HUnit (assertFailure) import qualified Criterion.Main as C-import Data.ByteString (ByteString) import qualified Data.ByteString as BS instance NFData Handle where rnf !_ = () -data CheckResult = ShouldThrow | WrongData deriving (Show, Typeable)+data CheckResult = ShouldThrow | WrongData deriving Show instance Exception CheckResult @@ -101,8 +106,14 @@ testFailure :: String -> BenchmarkWithFile -> TestTree testFailure = testCleanup True +-- before 1.5.4, tasty would not execute tests in parallel without +RTS -N+#if !MIN_VERSION_tasty(1,5,4)+inOrderTestGroup :: TestName -> [TestTree] -> TestTree+inOrderTestGroup = testGroup+#endif+ main :: IO ()-main = defaultMain $ testGroup "cleanup"+main = defaultMain $ inOrderTestGroup "cleanup" [ testSuccess "perRun Success" perRun , testFailure "perRun Failure" perRun , testSuccess "perBatch Success" perBatch
tests/Properties.hs view
@@ -1,26 +1,18 @@ {-# LANGUAGE CPP #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# OPTIONS_GHC -Wno-orphans #-} module Properties (tests) where import Control.Applicative as A ((<$>)) import Criterion.Analysis+import Prelude ()+import Prelude.Compat import Statistics.Types (Sample) import Test.Tasty (TestTree, testGroup) import Test.Tasty.QuickCheck (testProperty) import Test.QuickCheck import qualified Data.Vector.Generic as G import qualified Data.Vector.Unboxed as U--#if __GLASGOW_HASKELL__ >= 704-import Data.Monoid ((<>))-#else-import Data.Monoid--(<>) :: Monoid m => m -> m -> m-(<>) = mappend-infixr 6 <>-#endif instance (Arbitrary a, U.Unbox a) => Arbitrary (U.Vector a) where arbitrary = U.fromList A.<$> arbitrary
tests/Sanity.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} import Criterion.Main (bench, bgroup, env, whnf)@@ -11,10 +10,6 @@ import qualified Control.Exception as E import qualified Data.ByteString as B -#if !MIN_VERSION_bytestring(0,10,0)-import Control.DeepSeq (NFData (..))-#endif- fib :: Int -> Int fib = sum . go where go 0 = [0]@@ -58,8 +53,3 @@ getArgEnv = fmap words (getEnv "ARGS") `E.catch` \(_ :: E.SomeException) -> return []--#if !MIN_VERSION_bytestring(0,10,0)-instance NFData B.ByteString where- rnf bs = bs `seq` ()-#endif
tests/Tests.hs view
@@ -12,10 +12,10 @@ r1 :: Report r1 = Report 0 "" [] v1 s1 (Outliers 0 0 0 0 0) [] where- m1 = Measured 4.613000783137977e-05 3.500000000000378e-05 31432 1 0 0 0 0.0 0.0 0.0 0.0+ m1 = Measured 4.613000783137977e-05 3.500000000000378e-05 31432 1 0 0 0 0 0.0 0.0 0.0 0.0 v1 = V.fromList [m1] est1 = estimateFromErr 0.0 (0.0, 0.0) (mkCL 0.0)- s1 = SampleAnalysis [] 0.0 est1 est1 (OutlierVariance Unaffected "" 0.0)+ s1 = SampleAnalysis [] est1 est1 (OutlierVariance Unaffected "" 0.0) m2 :: Measured m2 = Measured {measTime = 1.1438998626545072e-5@@ -24,6 +24,7 @@ , measIters = 1 , measAllocated = minBound+ , measPeakMbAllocated = minBound , measNumGcs = minBound , measBytesCopied = minBound
+ www/fibber-screenshot.png view
binary file changed (absent → 42451 bytes)
+ www/fibber.html view
@@ -0,0 +1,1159 @@+<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ /*!+ * Chart.js v2.9.4+ * https://www.chartjs.org+ * (c) 2020 Chart.js Contributors+ * Released under the MIT License+ */+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei}));++ (function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b, j) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[j];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = sortedReports.map(function(report) {+ var est = report.reportAnalysis.anMean;+ return {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].errorBars = data.datasets[0].errorBars;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ onResize: function(chart, size) {+ if (size.width < 800) {+ chart.options.scales.yAxes[0].ticks.mirror = true;+ chart.options.scales.yAxes[0].ticks.padding = -10;+ chart.options.scales.yAxes[0].ticks.fontColor = '#000';+ } else {+ chart.options.scales.yAxes[0].ticks.fontColor = '#666';+ chart.options.scales.yAxes[0].ticks.mirror = false;+ chart.options.scales.yAxes[0].ticks.padding = 0;+ }+ },+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {+ // make sure we draw the ticks above the error bars+ z: 2,+ }+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function() {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function() {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(_event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ }+ document.addEventListener('DOMContentLoaded', function() {+ var rawJSON = document.getElementById('report-data').text;+ var reportData = JSON.parse(rawJSON)+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();++ </script>+ <style>+ html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}++ </style>+ <script type="application/json" id="report-data">+ [{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.5918709355982327e-11,"confIntUDX":2.9607390233713285e-11},"estPoint":9.106360888572829e-9},"anOutlierVar":{"ovDesc":"a slight","ovEffect":"Slight","ovFraction":6.737143023159825e-2},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.6763788761244487e-11,"confIntUDX":1.6468105142732684e-11},"estPoint":9.096614263095112e-9},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.7868969216318594e-5,"confIntUDX":5.3873819469498e-5},"estPoint":-1.89965930799961e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.1530397141645832e-4,"confIntUDX":6.189785882004806e-5},"estPoint":0.9998424977692931},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":3.1940524528690886e-11,"confIntUDX":6.843837978395988e-11},"estPoint":7.27346604075967e-11}},"reportKDEs":[{"kdePDF":[9.931606075488966e8,1.0446311483745661e9,1.1464845639902506e9,1.2965437618608782e9,1.491547637557964e9,1.727179362628494e9,1.998136110213061e9,2.2982568299065623e9,2.620717970608426e9,2.9582966052431026e9,3.303688038174394e9,3.649852937184193e9,3.9903596668450484e9,4.31968283935058e9,4.633420512813919e9,4.928400385004462e9,5.202659063138075e9,5.455296200087194e9,5.686224155673746e9,5.895850465898425e9,6.084741408592668e9,6.253317736089339e9,6.401627077830508e9,6.52922242308152e9,6.635155299567513e9,6.718070115960201e9,6.7763675603010025e9,6.808394233799898e9,6.812615352872726e9,6.787737335532024e9,6.732764732156293e9,6.646996596909848e9,6.529985569037385e9,6.381493856597582e9,6.201481156386637e9,5.990150166223097e9,5.748058301478973e9,5.476284019000945e9,5.176617992812801e9,4.85173783236445e9,4.505322859430657e9,4.142073069456993e9,3.7676118941272745e9,3.3882721733002987e9,3.010784556149582e9,2.641903442299702e9,2.2880147745562897e9,1.954771361231472e9,1.6467954437233305e9,1.3674767504643753e9,1.1188798578844686e9,9.017600120116296e8,7.15673955964767e8,5.591633247823689e8,4.299835043065657e8,3.253503869132641e8,2.4218045502268296e8,1.7730498138150364e8,1.2764564554527739e8,9.034542869571006e7,6.285441349903045e7,4.29745477478034e7,2.8870311074783392e7,1.9053600175646566e7,1.2351255644524533e7,7862832.293523749,4914830.48186121,3015990.9532654574,1816671.7589945681,1073948.7195011273,623002.4922210469,354598.2259269887,198001.38800569507,108450.78055980211,58261.76645420628,30696.71066565336,15863.40139928159,8047.139692022314,4023.107564696037,2018.721815444101,1095.546339864918,797.0964160039194,965.7646637602897,1673.7654005465572,3244.3449793213904,6365.1275956224035,12319.268362039442,23385.05350289781,43482.41151544118,79175.31160885778,141169.37035284,246467.67007506167,421353.8574208979,705344.4473682788,1156172.7788911723,1855715.6798094162,2916536.115642558,4488389.43567646,6763648.023156671,9980190.449160652,1.4419962338167649e7,2.0401262981384832e7,2.826297453225845e7,3.833954552916834e7,5.092663124875632e7,6.6238850702506244e7,8.436299044722326e7,1.0521188300608647e8,1.2848572100459903e8,1.5364830502573544e8,1.7992528832738453e8,2.0632966605884564e8,2.3171661122398487e8,2.5486563990265465e8,2.7458362770757973e8,2.898182045255506e8,2.9976833755220944e8,3.0397810114449865e8,3.024010060477763e8,2.954256653350271e8,2.8385843975927883e8,2.688641717828093e8,2.5187123788457197e8,2.3445110785056865e8,2.1818489202187002e8,2.045298706102621e8,1.9469798460383764e8,1.8955621319835737e8],"kdeType":"time","kdeValues":[8.978554056224653e-9,8.982955739396322e-9,8.987357422567991e-9,8.991759105739662e-9,8.996160788911331e-9,9.000562472083e-9,9.00496415525467e-9,9.00936583842634e-9,9.01376752159801e-9,9.018169204769678e-9,9.022570887941347e-9,9.026972571113017e-9,9.031374254284687e-9,9.035775937456356e-9,9.040177620628026e-9,9.044579303799695e-9,9.048980986971365e-9,9.053382670143035e-9,9.057784353314704e-9,9.062186036486373e-9,9.066587719658042e-9,9.070989402829713e-9,9.075391086001382e-9,9.079792769173051e-9,9.08419445234472e-9,9.08859613551639e-9,9.09299781868806e-9,9.097399501859729e-9,9.101801185031398e-9,9.106202868203067e-9,9.110604551374738e-9,9.115006234546407e-9,9.119407917718076e-9,9.123809600889745e-9,9.128211284061414e-9,9.132612967233085e-9,9.137014650404754e-9,9.141416333576423e-9,9.145818016748092e-9,9.150219699919763e-9,9.154621383091432e-9,9.159023066263101e-9,9.16342474943477e-9,9.16782643260644e-9,9.17222811577811e-9,9.17662979894978e-9,9.181031482121449e-9,9.185433165293118e-9,9.189834848464789e-9,9.194236531636458e-9,9.198638214808127e-9,9.203039897979796e-9,9.207441581151465e-9,9.211843264323136e-9,9.216244947494805e-9,9.220646630666474e-9,9.225048313838143e-9,9.229449997009814e-9,9.233851680181483e-9,9.238253363353152e-9,9.242655046524821e-9,9.24705672969649e-9,9.251458412868161e-9,9.25586009603983e-9,9.2602617792115e-9,9.264663462383168e-9,9.269065145554839e-9,9.273466828726508e-9,9.277868511898177e-9,9.282270195069846e-9,9.286671878241516e-9,9.291073561413186e-9,9.295475244584855e-9,9.299876927756525e-9,9.304278610928194e-9,9.308680294099864e-9,9.313081977271534e-9,9.317483660443203e-9,9.321885343614872e-9,9.326287026786541e-9,9.330688709958212e-9,9.33509039312988e-9,9.33949207630155e-9,9.343893759473219e-9,9.34829544264489e-9,9.352697125816559e-9,9.357098808988228e-9,9.361500492159897e-9,9.365902175331566e-9,9.370303858503237e-9,9.374705541674906e-9,9.379107224846575e-9,9.383508908018244e-9,9.387910591189915e-9,9.392312274361584e-9,9.396713957533253e-9,9.401115640704922e-9,9.405517323876592e-9,9.409919007048262e-9,9.414320690219931e-9,9.4187223733916e-9,9.42312405656327e-9,9.42752573973494e-9,9.43192742290661e-9,9.436329106078279e-9,9.440730789249948e-9,9.445132472421617e-9,9.449534155593288e-9,9.453935838764957e-9,9.458337521936626e-9,9.462739205108295e-9,9.467140888279964e-9,9.471542571451635e-9,9.475944254623304e-9,9.480345937794973e-9,9.484747620966642e-9,9.489149304138313e-9,9.493550987309982e-9,9.497952670481651e-9,9.50235435365332e-9,9.506756036824991e-9,9.51115771999666e-9,9.51555940316833e-9,9.519961086339998e-9,9.524362769511667e-9,9.528764452683338e-9,9.533166135855007e-9,9.537567819026676e-9]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[2.9859947971999645e-6,2.184000000000127e-6,5577,1,null,null,null,null,null,null,null,null],[1.3720127753913403e-6,1.2830000000003602e-6,3927,2,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.081999999999906e-6,3366,3,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,9.809999999997251e-7,2970,4,null,null,null,null,null,null,null,null],[1.0119983926415443e-6,9.4199999999987e-7,2970,5,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0209999999999213e-6,3201,6,null,null,null,null,null,null,null,null],[1.1119991540908813e-6,1.0320000000002029e-6,3201,7,null,null,null,null,null,null,null,null],[1.1220108717679977e-6,1.0620000000000247e-6,3267,8,null,null,null,null,null,null,null,null],[1.152046024799347e-6,1.0520000000000841e-6,3234,9,null,null,null,null,null,null,null,null],[1.2020464055240154e-6,1.1419999999999833e-6,3432,10,null,null,null,null,null,null,null,null],[1.2630480341613293e-6,1.1719999999998051e-6,3531,11,null,null,null,null,null,null,null,null],[1.2119999155402184e-6,1.151999999999924e-6,3597,12,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.1819999999997458e-6,3729,13,null,null,null,null,null,null,null,null],[1.201988197863102e-6,1.1820000000001794e-6,3696,14,null,null,null,null,null,null,null,null],[1.2519885785877705e-6,1.2120000000000013e-6,3762,15,null,null,null,null,null,null,null,null],[1.2730015441775322e-6,1.2230000000002829e-6,3795,16,null,null,null,null,null,null,null,null],[1.3629905879497528e-6,1.3020000000003341e-6,3993,17,null,null,null,null,null,null,null,null],[1.3320241123437881e-6,1.313000000000182e-6,4026,18,null,null,null,null,null,null,null,null],[1.3530370779335499e-6,1.313000000000182e-6,4125,19,null,null,null,null,null,null,null,null],[1.402979250997305e-6,1.381999999999859e-6,4257,20,null,null,null,null,null,null,null,null],[1.4030374586582184e-6,1.3620000000004115e-6,4191,21,null,null,null,null,null,null,null,null],[1.4530378393828869e-6,1.4220000000000552e-6,4356,22,null,null,null,null,null,null,null,null],[1.4730030670762062e-6,1.4319999999999958e-6,4455,23,null,null,null,null,null,null,null,null],[1.4829565770924091e-6,1.4229999999999625e-6,4488,25,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5229999999998023e-6,4785,26,null,null,null,null,null,null,null,null],[1.5529803931713104e-6,1.5130000000002954e-6,4686,27,null,null,null,null,null,null,null,null],[1.642969436943531e-6,1.6330000000000164e-6,5016,28,null,null,null,null,null,null,null,null],[1.653039362281561e-6,1.6030000000001945e-6,5049,30,null,null,null,null,null,null,null,null],[1.634005457162857e-6,1.6029999999997609e-6,5082,31,null,null,null,null,null,null,null,null],[1.7039710655808449e-6,1.6629999999998382e-6,5247,33,null,null,null,null,null,null,null,null],[1.7829588614404202e-6,1.7339999999997635e-6,5544,35,null,null,null,null,null,null,null,null],[1.8529826775193214e-6,1.8140000000001558e-6,5544,36,null,null,null,null,null,null,null,null],[1.8430291675031185e-6,1.8039999999997815e-6,5643,38,null,null,null,null,null,null,null,null],[1.924054231494665e-6,1.8829999999998327e-6,5841,40,null,null,null,null,null,null,null,null],[1.9730068743228912e-6,1.9340000000003105e-6,6039,42,null,null,null,null,null,null,null,null],[2.003973349928856e-6,1.9840000000000135e-6,6336,44,null,null,null,null,null,null,null,null],[2.062995918095112e-6,2.0340000000001503e-6,6468,47,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.093999999999794e-6,6666,49,null,null,null,null,null,null,null,null],[2.173997927457094e-6,2.1240000000000495e-6,6798,52,null,null,null,null,null,null,null,null],[2.2840104065835476e-6,2.2139999999999486e-6,6963,54,null,null,null,null,null,null,null,null],[2.4239998310804367e-6,2.305000000000189e-6,7293,57,null,null,null,null,null,null,null,null],[2.394022885710001e-6,2.344000000000044e-6,7524,60,null,null,null,null,null,null,null,null],[2.5150366127490997e-6,2.4640000000001987e-6,7854,63,null,null,null,null,null,null,null,null],[2.574990503489971e-6,2.5150000000002427e-6,8184,66,null,null,null,null,null,null,null,null],[2.6249908842146397e-6,2.5850000000002607e-6,8283,69,null,null,null,null,null,null,null,null],[2.774992026388645e-6,2.745000000000178e-6,8613,73,null,null,null,null,null,null,null,null],[2.8249924071133137e-6,2.785000000000374e-6,8943,76,null,null,null,null,null,null,null,null],[2.94495839625597e-6,2.8949999999997207e-6,9240,80,null,null,null,null,null,null,null,null],[3.075983840972185e-6,3.035999999999664e-6,9735,84,null,null,null,null,null,null,null,null],[3.4259865060448647e-6,3.375999999999813e-6,10956,89,null,null,null,null,null,null,null,null],[3.4159747883677483e-6,3.3860000000001875e-6,10857,93,null,null,null,null,null,null,null,null],[3.5170232877135277e-6,3.4869999999999346e-6,11220,98,null,null,null,null,null,null,null,null],[3.627035766839981e-6,3.585999999999867e-6,11484,103,null,null,null,null,null,null,null,null],[3.7569552659988403e-6,3.706999999999929e-6,11979,108,null,null,null,null,null,null,null,null],[3.867025952786207e-6,3.817999999999617e-6,12309,113,null,null,null,null,null,null,null,null],[4.018016625195742e-6,3.957000000000179e-6,12804,119,null,null,null,null,null,null,null,null],[4.167028237134218e-6,4.127999999999944e-6,13365,125,null,null,null,null,null,null,null,null],[4.347995854914188e-6,4.289000000000202e-6,13959,131,null,null,null,null,null,null,null,null],[4.537985660135746e-6,4.478000000000034e-6,14421,138,null,null,null,null,null,null,null,null],[4.6289642341434956e-6,4.5890000000001555e-6,14883,144,null,null,null,null,null,null,null,null],[4.878966137766838e-6,4.858999999999853e-6,15642,152,null,null,null,null,null,null,null,null],[5.028967279940844e-6,5.0199999999996775e-6,16203,159,null,null,null,null,null,null,null,null],[5.299982149153948e-6,5.280000000000302e-6,17061,167,null,null,null,null,null,null,null,null],[5.540030542761087e-6,5.509999999999803e-6,17820,176,null,null,null,null,null,null,null,null],[5.770998541265726e-6,5.710999999999824e-6,18645,185,null,null,null,null,null,null,null,null],[6.002024747431278e-6,5.961000000000074e-6,19305,194,null,null,null,null,null,null,null,null],[6.27199187874794e-6,6.251999999999994e-6,20229,204,null,null,null,null,null,null,null,null],[6.491958629339933e-6,6.432000000000226e-6,20988,214,null,null,null,null,null,null,null,null],[6.893009413033724e-6,6.782999999999789e-6,21978,224,null,null,null,null,null,null,null,null],[7.072987500578165e-6,7.04299999999998e-6,23001,236,null,null,null,null,null,null,null,null],[7.354014087468386e-6,7.323000000000052e-6,23859,247,null,null,null,null,null,null,null,null],[7.784983608871698e-6,7.744999999999974e-6,25245,260,null,null,null,null,null,null,null,null],[8.164963219314814e-6,8.136000000000167e-6,26433,273,null,null,null,null,null,null,null,null],[8.466013241559267e-6,8.414999999999898e-6,27390,287,null,null,null,null,null,null,null,null],[8.847040589898825e-6,8.81699999999994e-6,28743,301,null,null,null,null,null,null,null,null],[9.206996764987707e-6,9.16700000000003e-6,29964,316,null,null,null,null,null,null,null,null],[9.6180010586977e-6,9.597999999999985e-6,31350,332,null,null,null,null,null,null,null,null],[1.0108982678502798e-5,1.0079000000000077e-5,32901,348,null,null,null,null,null,null,null,null],[1.0489951819181442e-5,1.0449999999999956e-5,34287,366,null,null,null,null,null,null,null,null],[1.0970979928970337e-5,1.0931000000000048e-5,35772,384,null,null,null,null,null,null,null,null],[1.1480995453894138e-5,1.1460999999999937e-5,37422,403,null,null,null,null,null,null,null,null],[1.203297870233655e-5,1.1982000000000225e-5,39204,424,null,null,null,null,null,null,null,null],[1.2612959835678339e-5,1.2563000000000157e-5,41085,445,null,null,null,null,null,null,null,null],[1.317501300945878e-5,1.3123999999999775e-5,42966,467,null,null,null,null,null,null,null,null],[1.379597233608365e-5,1.3776000000000066e-5,45144,490,null,null,null,null,null,null,null,null],[1.4497025404125452e-5,1.4427000000000016e-5,47157,515,null,null,null,null,null,null,null,null],[1.516897464171052e-5,1.5108000000000222e-5,49533,541,null,null,null,null,null,null,null,null],[1.583003904670477e-5,1.57899999999999e-5,51777,568,null,null,null,null,null,null,null,null],[1.661101123318076e-5,1.6561000000000006e-5,54318,596,null,null,null,null,null,null,null,null],[1.7373007722198963e-5,1.7342000000000052e-5,56793,626,null,null,null,null,null,null,null,null],[1.8163991626352072e-5,1.8153999999999827e-5,59499,657,null,null,null,null,null,null,null,null],[1.902499934658408e-5,1.902599999999968e-5,62601,690,null,null,null,null,null,null,null,null],[1.9957020413130522e-5,1.9937000000000253e-5,65538,725,null,null,null,null,null,null,null,null],[2.0938983652740717e-5,2.0889000000000064e-5,68673,761,null,null,null,null,null,null,null,null],[2.1881016436964273e-5,2.188100000000007e-5,71808,799,null,null,null,null,null,null,null,null],[2.296303864568472e-5,2.2943000000000095e-5,75405,839,null,null,null,null,null,null,null,null],[2.422597026452422e-5,2.4175999999999885e-5,79332,881,null,null,null,null,null,null,null,null],[2.527696778997779e-5,2.5278000000000106e-5,83061,925,null,null,null,null,null,null,null,null],[2.650899114087224e-5,2.6500000000000048e-5,86955,972,null,null,null,null,null,null,null,null],[2.779200440272689e-5,2.7782000000000067e-5,91146,1020,null,null,null,null,null,null,null,null],[2.9263959731906652e-5,2.9243999999999885e-5,96129,1071,null,null,null,null,null,null,null,null],[3.059697337448597e-5,3.057699999999995e-5,100848,1125,null,null,null,null,null,null,null,null],[3.2028998248279095e-5,3.2000000000000344e-5,105171,1181,null,null,null,null,null,null,null,null],[3.357295645400882e-5,3.357300000000028e-5,110220,1240,null,null,null,null,null,null,null,null],[5.012302426621318e-5,5.016400000000011e-5,165165,1302,null,null,null,null,null,null,null,null],[3.6999001167714596e-5,3.6998999999999366e-5,121572,1367,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.8732999999999997e-5,127281,1436,null,null,null,null,null,null,null,null],[4.057603655382991e-5,4.052499999999959e-5,133320,1507,null,null,null,null,null,null,null,null],[4.261900903657079e-5,4.2588999999999995e-5,139953,1583,null,null,null,null,null,null,null,null],[4.486303078010678e-5,4.482399999999973e-5,147642,1662,null,null,null,null,null,null,null,null],[4.767900099977851e-5,4.766999999999966e-5,155133,1745,null,null,null,null,null,null,null,null],[4.917202750220895e-5,4.9162000000000164e-5,161733,1832,null,null,null,null,null,null,null,null],[5.167600465938449e-5,5.165700000000009e-5,169884,1924,null,null,null,null,null,null,null,null],[5.425198469310999e-5,5.420199999999972e-5,178233,2020,null,null,null,null,null,null,null,null],[5.678599700331688e-5,5.674599999999988e-5,186780,2121,null,null,null,null,null,null,null,null],[5.9721001889556646e-5,5.970200000000002e-5,196284,2227,null,null,null,null,null,null,null,null],[6.253703031688929e-5,6.252699999999972e-5,205722,2339,null,null,null,null,null,null,null,null],[6.572302663698792e-5,6.572300000000017e-5,216249,2456,null,null,null,null,null,null,null,null],[6.883795140311122e-5,6.883900000000023e-5,226380,2579,null,null,null,null,null,null,null,null],[7.222499698400497e-5,7.222500000000041e-5,237600,2708,null,null,null,null,null,null,null,null],[6.405904423445463e-5,6.398899999999954e-5,210309,2843,null,null,null,null,null,null,null,null],[2.3743952624499798e-5,2.364399999999975e-5,77385,2985,null,null,null,null,null,null,null,null],[2.2141030058264732e-5,2.214200000000017e-5,72864,3134,null,null,null,null,null,null,null,null],[2.3212982341647148e-5,2.3213000000000227e-5,76428,3291,null,null,null,null,null,null,null,null],[2.4375971406698227e-5,2.436500000000015e-5,80223,3456,null,null,null,null,null,null,null,null],[2.5618006475269794e-5,2.561799999999982e-5,84315,3629,null,null,null,null,null,null,null,null],[2.8363021556288004e-5,2.837299999999994e-5,93423,3810,null,null,null,null,null,null,null,null],[3.0687020625919104e-5,3.067800000000013e-5,101013,4001,null,null,null,null,null,null,null,null],[3.1539006158709526e-5,3.154899999999964e-5,103950,4201,null,null,null,null,null,null,null,null],[3.268098225817084e-5,3.268100000000055e-5,107580,4411,null,null,null,null,null,null,null,null],[3.450398799031973e-5,3.4524000000000186e-5,113751,4631,null,null,null,null,null,null,null,null],[3.666797420009971e-5,3.669900000000028e-5,120879,4863,null,null,null,null,null,null,null,null],[3.8141035474836826e-5,3.816199999999957e-5,125697,5106,null,null,null,null,null,null,null,null],[4.0164974052459e-5,4.0186000000000215e-5,132363,5361,null,null,null,null,null,null,null,null],[4.172802437096834e-5,4.1748000000000306e-5,137544,5629,null,null,null,null,null,null,null,null],[4.3902022298425436e-5,4.394300000000028e-5,144804,5911,null,null,null,null,null,null,null,null],[4.723801976069808e-5,4.72789999999999e-5,155760,6207,null,null,null,null,null,null,null,null],[4.709698259830475e-5,4.712799999999958e-5,155232,6517,null,null,null,null,null,null,null,null],[4.9632973968982697e-5,4.966300000000014e-5,163680,6843,null,null,null,null,null,null,null,null],[5.179701838642359e-5,5.183700000000076e-5,170808,7185,null,null,null,null,null,null,null,null],[5.471199983730912e-5,5.477300000000015e-5,180477,7544,null,null,null,null,null,null,null,null],[5.782797234132886e-5,5.786900000000032e-5,190674,7921,null,null,null,null,null,null,null,null],[5.9600977692753077e-5,5.9662000000000256e-5,196581,8318,null,null,null,null,null,null,null,null],[6.358901737257838e-5,6.364899999999982e-5,209748,8733,null,null,null,null,null,null,null,null],[6.672402378171682e-5,6.678500000000063e-5,220011,9170,null,null,null,null,null,null,null,null],[7.018097676336765e-5,7.023199999999993e-5,231528,9629,null,null,null,null,null,null,null,null],[7.272500079125166e-5,7.278600000000003e-5,239844,10110,null,null,null,null,null,null,null,null],[7.671298226341605e-5,7.678399999999988e-5,252978,10616,null,null,null,null,null,null,null,null],[8.08810000307858e-5,8.094200000000051e-5,266772,11146,null,null,null,null,null,null,null,null],[8.372700540348887e-5,8.378699999999923e-5,276111,11704,null,null,null,null,null,null,null,null],[8.852500468492508e-5,8.859599999999981e-5,291918,12289,null,null,null,null,null,null,null,null],[9.31830145418644e-5,9.325499999999955e-5,307197,12903,null,null,null,null,null,null,null,null],[9.790301555767655e-5,9.796300000000039e-5,322872,13549,null,null,null,null,null,null,null,null],[1.0296201799064875e-4,1.0304300000000058e-4,339504,14226,null,null,null,null,null,null,null,null],[1.0808097431436181e-4,1.0815299999999972e-4,356367,14937,null,null,null,null,null,null,null,null],[1.1277996236458421e-4,1.1284100000000068e-4,371877,15684,null,null,null,null,null,null,null,null],[1.1815998004749417e-4,1.1822099999999995e-4,389532,16469,null,null,null,null,null,null,null,null],[1.2447196058928967e-4,1.2455300000000034e-4,410388,17292,null,null,null,null,null,null,null,null],[1.3103499077260494e-4,1.3111600000000057e-4,432003,18157,null,null,null,null,null,null,null,null],[1.383880153298378e-4,1.384699999999999e-4,456192,19065,null,null,null,null,null,null,null,null],[1.4522101264446974e-4,1.45292e-4,478665,20018,null,null,null,null,null,null,null,null],[1.5211402205750346e-4,1.52185e-4,501435,21019,null,null,null,null,null,null,null,null],[1.6178202349692583e-4,1.6183300000000012e-4,533214,22070,null,null,null,null,null,null,null,null],[1.624730066396296e-4,1.6253400000000064e-4,535557,23173,null,null,null,null,null,null,null,null],[1.7752096755430102e-4,1.7757299999999858e-4,585123,24332,null,null,null,null,null,null,null,null],[1.8194998847320676e-4,1.8201000000000155e-4,599709,25549,null,null,null,null,null,null,null,null],[1.907559926621616e-4,1.9081699999999938e-4,628815,26826,null,null,null,null,null,null,null,null],[2.0026403944939375e-4,2.003349999999994e-4,660066,28167,null,null,null,null,null,null,null,null],[2.1026202011853456e-4,2.1033399999999952e-4,693033,29576,null,null,null,null,null,null,null,null],[2.207320067100227e-4,2.2078400000000165e-4,727518,31054,null,null,null,null,null,null,null,null],[2.292379504069686e-4,2.2929899999999878e-4,755469,32607,null,null,null,null,null,null,null,null],[2.3785297526046634e-4,2.3793499999999988e-4,783915,34238,null,null,null,null,null,null,null,null],[2.4973496329039335e-4,2.49797999999999e-4,822987,35950,null,null,null,null,null,null,null,null],[2.6241905288770795e-4,2.624820000000014e-4,864798,37747,null,null,null,null,null,null,null,null],[2.7514301473274827e-4,2.751949999999989e-4,906675,39634,null,null,null,null,null,null,null,null],[3.041769959963858e-4,3.0426000000000064e-4,1002408,41616,null,null,null,null,null,null,null,null],[3.146069939248264e-4,3.146590000000001e-4,1036629,43697,null,null,null,null,null,null,null,null],[3.297440125606954e-4,3.298169999999996e-4,1086591,45882,null,null,null,null,null,null,null,null],[3.4820003202185035e-4,3.482620000000002e-4,1147212,48176,null,null,null,null,null,null,null,null],[3.6996096605435014e-4,3.700429999999987e-4,1219185,50585,null,null,null,null,null,null,null,null],[3.89526947401464e-4,3.895900000000004e-4,1283502,53114,null,null,null,null,null,null,null,null],[4.089929861947894e-4,4.0905599999999966e-4,1347555,55770,null,null,null,null,null,null,null,null],[4.279380082152784e-4,4.280120000000002e-4,1409991,58558,null,null,null,null,null,null,null,null],[4.677620017901063e-4,4.6793599999999866e-4,1543674,61486,null,null,null,null,null,null,null,null],[5.022970144636929e-4,5.023709999999997e-4,1654983,64561,null,null,null,null,null,null,null,null],[5.037890514358878e-4,5.038330000000004e-4,1659735,67789,null,null,null,null,null,null,null,null],[5.253000417724252e-4,5.253640000000004e-4,1730751,71178,null,null,null,null,null,null,null,null],[5.584919708780944e-4,5.585559999999982e-4,1839981,74737,null,null,null,null,null,null,null,null],[5.789300194010139e-4,5.79004000000001e-4,1907433,78474,null,null,null,null,null,null,null,null],[6.074730190448463e-4,6.075370000000017e-4,2001351,82398,null,null,null,null,null,null,null,null],[6.277309730648994e-4,6.277950000000004e-4,2068110,86518,null,null,null,null,null,null,null,null],[6.561529589816928e-4,6.562090000000013e-4,2161566,90843,null,null,null,null,null,null,null,null],[6.887339986860752e-4,6.88809999999998e-4,2268981,95386,null,null,null,null,null,null,null,null],[7.265550084412098e-4,7.266000000000009e-4,2393523,100155,null,null,null,null,null,null,null,null],[7.803859771229327e-4,7.804609999999997e-4,2570964,105163,null,null,null,null,null,null,null,null],[8.119750418700278e-4,8.120310000000013e-4,2674881,110421,null,null,null,null,null,null,null,null],[8.376420009881258e-4,8.37708999999999e-4,2759427,115942,null,null,null,null,null,null,null,null],[8.790089632384479e-4,8.790759999999995e-4,2895717,121739,null,null,null,null,null,null,null,null],[9.422269649803638e-4,9.42303999999998e-4,3104013,127826,null,null,null,null,null,null,null,null],[1.03670300450176e-3,1.0367810000000005e-3,3415170,134217,null,null,null,null,null,null,null,null],[1.0511210421100259e-3,1.0511979999999997e-3,3462690,140928,null,null,null,null,null,null,null,null],[1.0980780352838337e-3,1.0981559999999994e-3,3617757,147975,null,null,null,null,null,null,null,null],[1.1848200228996575e-3,1.1848780000000003e-3,3903108,155373,null,null,null,null,null,null,null,null],[1.2174200383014977e-3,1.2174999999999998e-3,4010424,163142,null,null,null,null,null,null,null,null],[1.316634996328503e-3,1.3166949999999997e-3,4337223,171299,null,null,null,null,null,null,null,null],[1.4903200208209455e-3,1.4903900000000012e-3,4909311,179864,null,null,null,null,null,null,null,null],[1.5586370136588812e-3,1.5587289999999948e-3,5134371,188858,null,null,null,null,null,null,null,null],[1.610192994121462e-3,1.6102750000000013e-3,5304123,198300,null,null,null,null,null,null,null,null],[1.714357000309974e-3,1.7144399999999976e-3,5647323,208215,null,null,null,null,null,null,null,null],[1.7925130086950958e-3,1.7925869999999983e-3,5904657,218626,null,null,null,null,null,null,null,null],[1.8997430452145636e-3,1.899816999999998e-3,6257955,229558,null,null,null,null,null,null,null,null],[2.0159700070507824e-3,2.0160349999999994e-3,6640623,241036,null,null,null,null,null,null,null,null],[2.134780981577933e-3,2.134857000000004e-3,7032102,253087,null,null,null,null,null,null,null,null],[2.1779019734822214e-3,2.1779680000000023e-3,7174035,265742,null,null,null,null,null,null,null,null],[2.3244559997692704e-3,2.324532000000004e-3,7656825,279029,null,null,null,null,null,null,null,null],[2.398522978182882e-3,2.398601e-3,7900794,292980,null,null,null,null,null,null,null,null],[2.5498250033706427e-3,2.549893999999997e-3,8399094,307629,null,null,null,null,null,null,null,null],[2.668687026016414e-3,2.668786999999999e-3,8790705,323011,null,null,null,null,null,null,null,null],[2.7719700010493398e-3,2.7720509999999976e-3,9130836,339161,null,null,null,null,null,null,null,null],[2.939321973826736e-3,2.9394040000000066e-3,9682134,356119,null,null,null,null,null,null,null,null],[3.0518610146827996e-3,3.051944000000001e-3,10052823,373925,null,null,null,null,null,null,null,null],[3.1971129938028753e-3,3.197196999999999e-3,10531191,392622,null,null,null,null,null,null,null,null],[3.3623609924688935e-3,3.3624659999999945e-3,11075559,412253,null,null,null,null,null,null,null,null],[3.5384090151637793e-3,3.538505999999997e-3,11655435,432866,null,null,null,null,null,null,null,null],[3.69921897072345e-3,3.6993169999999936e-3,12185085,454509,null,null,null,null,null,null,null,null],[3.8921490195207298e-3,3.8922379999999923e-3,12820533,477234,null,null,null,null,null,null,null,null],[4.083676030859351e-3,4.083767000000002e-3,13451427,501096,null,null,null,null,null,null,null,null],[4.291393968742341e-3,4.291496000000006e-3,14135649,526151,null,null,null,null,null,null,null,null],[4.5067850151099265e-3,4.506879000000005e-3,14845083,552458,null,null,null,null,null,null,null,null],[4.781036986969411e-3,4.781151999999997e-3,15748524,580081,null,null,null,null,null,null,null,null],[4.970660957042128e-3,4.970757999999992e-3,16373016,609086,null,null,null,null,null,null,null,null],[5.210368020925671e-3,5.210486e-3,17162574,639540,null,null,null,null,null,null,null,null],[5.471844982821494e-3,5.471965999999995e-3,18023874,671517,null,null,null,null,null,null,null,null],[5.742268986068666e-3,5.742382000000004e-3,18914643,705093,null,null,null,null,null,null,null,null],[6.031569966580719e-3,6.031654000000011e-3,19867419,740347,null,null,null,null,null,null,null,null],[6.337188999168575e-3,6.33729600000002e-3,20874150,777365,null,null,null,null,null,null,null,null],[6.658619036898017e-3,6.658737999999997e-3,21932955,816233,null,null,null,null,null,null,null,null],[6.9919200032018125e-3,6.992042000000004e-3,23030733,857045,null,null,null,null,null,null,null,null],[7.334538968279958e-3,7.334662999999991e-3,24159333,899897,null,null,null,null,null,null,null,null],[7.72284297272563e-3,7.722961e-3,25438347,944892,null,null,null,null,null,null,null,null],[8.110958035103977e-3,8.111067999999999e-3,26716602,992136,null,null,null,null,null,null,null,null],[8.519057999365032e-3,8.51919100000001e-3,28060857,1041743,null,null,null,null,null,null,null,null],[9.049738000612706e-3,9.049976000000015e-3,29809362,1093831,null,null,null,null,null,null,null,null],[9.382657997775823e-3,9.382789000000002e-3,30905325,1148522,null,null,null,null,null,null,null,null],[9.854088013526052e-3,9.854240999999986e-3,32458305,1205948,null,null,null,null,null,null,null,null],[1.0322000016458333e-2,1.0322137000000009e-2,33999405,1266246,null,null,null,null,null,null,null,null],[1.0891443002037704e-2,1.0891593999999977e-2,35875191,1329558,null,null,null,null,null,null,null,null],[1.1401584022678435e-2,1.1401719000000005e-2,37555386,1396036,null,null,null,null,null,null,null,null],[1.1973269982263446e-2,1.197342899999998e-2,39438564,1465838,null,null,null,null,null,null,null,null],[1.2587225995957851e-2,1.258737900000001e-2,41460771,1539130,null,null,null,null,null,null,null,null],[1.3198696018662304e-2,1.3198843999999987e-2,43474926,1616086,null,null,null,null,null,null,null,null],[1.3863054977264255e-2,1.3863228000000005e-2,45663222,1696890,null,null,null,null,null,null,null,null],[1.4567888982128352e-2,1.4568057999999995e-2,47984805,1781735,null,null,null,null,null,null,null,null],[1.5372741036117077e-2,1.5372965000000016e-2,50636091,1870822,null,null,null,null,null,null,null,null],[1.6047809971496463e-2,1.6047999000000035e-2,52859400,1964363,null,null,null,null,null,null,null,null],[1.68577489675954e-2,1.6857944999999985e-2,55527285,2062581,null,null,null,null,null,null,null,null],[1.7932684044353664e-2,1.7933048000000007e-2,59068845,2165710,null,null,null,null,null,null,null,null],[1.858933997573331e-2,1.858954800000001e-2,61230774,2273996,null,null,null,null,null,null,null,null],[1.9519192981533706e-2,1.951939800000002e-2,64293603,2387695,null,null,null,null,null,null,null,null],[2.0560456032399088e-2,2.056076899999998e-2,67723821,2507080,null,null,null,null,null,null,null,null],[2.1535142965149134e-2,2.153538300000002e-2,70933863,2632434,null,null,null,null,null,null,null,null],[2.2682933951728046e-2,2.268316199999998e-2,74714508,2764056,null,null,null,null,null,null,null,null],[2.3774439992848784e-2,2.377467600000005e-2,78309759,2902259,null,null,null,null,null,null,null,null],[2.4924944969825447e-2,2.4925191000000013e-2,82099380,3047372,null,null,null,null,null,null,null,null],[3.036867902847007e-2,3.0369775999999904e-2,100033296,3199740,null,null,null,null,null,null,null,null],[3.0574041011277586e-2,3.0574417999999937e-2,100707057,3359727,null,null,null,null,null,null,null,null],[3.1890206038951874e-2,3.189054300000005e-2,105041904,3527714,null,null,null,null,null,null,null,null],[3.3934498031158e-2,3.3931794000000015e-2,111776115,3704100,null,null,null,null,null,null,null,null],[3.533452999545261e-2,3.533499200000001e-2,116387502,3889305,null,null,null,null,null,null,null,null],[3.685817099176347e-2,3.6858515000000036e-2,121405614,4083770,null,null,null,null,null,null,null,null],[3.8699414988514036e-2,3.8699821999999995e-2,127470453,4287958,null,null,null,null,null,null,null,null],[4.083123098826036e-2,4.083161499999999e-2,134492259,4502356,null,null,null,null,null,null,null,null],[4.337995400419459e-2,4.338044699999999e-2,142887855,4727474,null,null,null,null,null,null,null,null],[4.5395844033919275e-2,4.539630100000003e-2,149527587,4963848,null,null,null,null,null,null,null,null],[4.77365399710834e-2,4.773458999999991e-2,157237839,5212040,null,null,null,null,null,null,null,null],[4.9544300010893494e-2,4.954481900000007e-2,163191996,5472642,null,null,null,null,null,null,null,null],[5.2063490031287074e-2,5.2063996e-2,171489747,5746274,null,null,null,null,null,null,null,null],[5.445809499360621e-2,5.4458600000000024e-2,179377110,6033588,null,null,null,null,null,null,null,null],[5.78279200126417e-2,5.782849899999998e-2,190476957,6335268,null,null,null,null,null,null,null,null],[6.084545800695196e-2,6.0846069999999974e-2,200416557,6652031,null,null,null,null,null,null,null,null],[6.384176603751257e-2,6.384235999999999e-2,210285636,6984633,null,null,null,null,null,null,null,null],[6.660954799735919e-2,6.661014200000004e-2,219402183,7333864,null,null,null,null,null,null,null,null],[6.95765310083516e-2,6.95771380000001e-2,229174968,7700558,null,null,null,null,null,null,null,null],[7.366417499724776e-2,7.36648820000001e-2,242639331,8085585,null,null,null,null,null,null,null,null],[7.751908397767693e-2,7.751557099999995e-2,255336675,8489865,null,null,null,null,null,null,null,null],[8.111650496721268e-2,8.111720600000005e-2,267185787,8914358,null,null,null,null,null,null,null,null],[8.518016198650002e-2,8.51809750000001e-2,280571346,9360076,null,null,null,null,null,null,null,null],[8.914823300438002e-2,8.914908500000007e-2,293641656,9828080,null,null,null,null,null,null,null,null],[9.34192180284299e-2,9.342002199999988e-2,307709061,10319484,null,null,null,null,null,null,null,null],[9.867934900103137e-2,9.868026100000016e-2,325035711,10835458,null,null,null,null,null,null,null,null],[0.10399009298998863,0.10399100500000014,342528120,11377231,null,null,null,null,null,null,null,null],[0.10917620599502698,0.10917719600000009,359610702,11946092,null,null,null,null,null,null,null,null],[0.11496545298723504,0.11496801899999998,378685263,12543397,null,null,null,null,null,null,null,null],[0.11922384501667693,0.11922490899999971,392705874,13170567,null,null,null,null,null,null,null,null],[0.1258279909961857,0.12582455700000006,414458682,13829095,null,null,null,null,null,null,null,null],[0.1320721060037613,0.13207447000000005,435030156,14520550,null,null,null,null,null,null,null,null],[0.1393518340191804,0.13935448100000025,459008979,15246578,null,null,null,null,null,null,null,null],[0.14501006697537377,0.14501131299999992,477641736,16008907,null,null,null,null,null,null,null,null],[0.1533388089737855,0.15334022800000024,505075692,16809352,null,null,null,null,null,null,null,null],[0.16058630601037294,0.16059004199999993,528955878,17649820,null,null,null,null,null,null,null,null],[0.1696129809715785,0.1696153220000003,558683004,18532311,null,null,null,null,null,null,null,null],[0.1769879759522155,0.17698957999999987,582972258,19458926,null,null,null,null,null,null,null,null],[0.1861679860157892,0.18617129200000004,613215768,20431872,null,null,null,null,null,null,null,null],[0.19564638298470527,0.1956496689999998,644435913,21453466,null,null,null,null,null,null,null,null],[0.2049338149954565,0.20493568599999978,675022161,22526139,null,null,null,null,null,null,null,null],[0.214223189977929,0.2142251599999998,705620025,23652446,null,null,null,null,null,null,null,null],[0.22455388703383505,0.22455564300000042,739646292,24835069,null,null,null,null,null,null,null,null],[0.23659971298184246,0.2365938639999996,779324502,26076822,null,null,null,null,null,null,null,null]],"reportName":"fib/1","reportNumber":0,"reportOutliers":{"highMild":0,"highSevere":1,"lowMild":0,"lowSevere":0,"samplesSeen":44}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.4639016642762622e-10,"confIntUDX":2.1670345260269087e-10},"estPoint":2.4729011445781207e-8},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.36557582003817074},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.5776555757917e-10,"confIntUDX":2.961541932491451e-10},"estPoint":2.4944687628466725e-8},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.759173441256622e-5,"confIntUDX":7.327400413269949e-5},"estPoint":-5.027601299366412e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":4.522295681896882e-5,"confIntUDX":1.844665932593248e-4},"estPoint":0.9992739833517263},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":9.656665140957106e-11,"confIntUDX":5.290221906756506e-11},"estPoint":5.812261496408389e-10}},"reportKDEs":[{"kdePDF":[-25.033060231416904,471.87721293456934,7934.124858778293,127930.45319806116,1412061.346520924,1.1077764392941294e7,6.233129370328541e7,2.5629713032143623e8,7.899823653082111e8,1.8815655400092204e9,3.564033530117799e9,5.481770206663521e9,6.927359738730565e9,7.22527424514244e9,6.215560201028286e9,4.452052732677399e9,2.8457586379722295e9,1.9348454192488823e9,1.594267022072115e9,1.4542940473538778e9,1.3030050633789275e9,1.1043340056067436e9,9.358100677366215e8,8.962853451772625e8,9.277135991558222e8,8.454140099618506e8,5.956708689054052e8,3.2603919686349016e8,1.970481137240725e8,2.4362745682386443e8,3.761964358371315e8,4.456346929150531e8,3.709349714806778e8,2.1477966976330283e8,8.6414559139467e7,2.415627063543913e7,4691436.321117351,633100.9554126489,59295.240049212116,3914.150593529916,128.95819955401882,49.00821402111042,-41.08150919938445,38.994140897648805,-36.85440275838137,34.776604804716676,-32.7551219528178,30.7895343529821,-28.880379979720317,27.027923444048145,-25.23164348532409,23.490039575118793,-21.80062823949053,20.16005965210942,-18.56417906151408,17.00817320999244,-15.486611470234786,13.993533487949298,-12.522444599434126,11.066331973169167,-9.617618705586521,8.16810480705756,-6.708881546468919,5.230188726646448,-3.721286732949173,2.1702230932883806,-0.5636264266692081,-1.1136063031004921,2.878645595380913,-4.7511287464240395,6.753642337162726,-8.912228654612539,11.256973450316835,-13.822549250503599,16.648714781815666,-19.780532251611056,23.26811658942905,-27.16346056925755,31.646960137924637,-30.903148116382834,216.75293522649707,3817.6686415191775,59401.33469750879,632984.1762799734,4691564.901964832,2.41561229352846e7,8.641453588106756e7,2.14775455086061e8,3.708719526340991e8,4.4494207872407115e8,3.708719553903246e8,2.147754495359412e8,8.64145443013773e7,2.4156111527951457e7,4691579.456550821,632966.2670567362,59422.85766551803,3792.2179403069385,246.6368317886657,-59.671629616678445,257.59207046422495,4153.781963386106,67514.4638789105,759752.145457279,6084446.254522076,3.4931623052918054e7,1.4549490574895728e8,4.465698725648631e8,1.0310107440369058e9,1.8380744207237566e9,2.610263940880715e9,3.0471790187068405e9,3.004599623047369e9,2.583510303117147e9,2.0691896182992766e9,1.6912978534152453e9,1.4185357764903119e9,1.0896734779131424e9,6.82837669371261e8,3.2673895038146025e8,1.153890368389826e8,2.9488744496974308e7,5384323.547791064,696209.8209623827,63433.20502040137,4013.7537630110273,199.6779084861687,-0.6058604912350835],"kdeType":"time","kdeValues":[2.414797231110446e-8,2.4160956617807207e-8,2.417394092450995e-8,2.4186925231212694e-8,2.419990953791544e-8,2.4212893844618184e-8,2.4225878151320926e-8,2.423886245802367e-8,2.4251846764726417e-8,2.4264831071429162e-8,2.4277815378131904e-8,2.429079968483465e-8,2.4303783991537394e-8,2.4316768298240136e-8,2.432975260494288e-8,2.4342736911645627e-8,2.4355721218348372e-8,2.4368705525051114e-8,2.438168983175386e-8,2.4394674138456604e-8,2.440765844515935e-8,2.442064275186209e-8,2.4433627058564837e-8,2.4446611365267582e-8,2.4459595671970324e-8,2.447257997867307e-8,2.4485564285375814e-8,2.449854859207856e-8,2.45115328987813e-8,2.4524517205484047e-8,2.4537501512186792e-8,2.4550485818889534e-8,2.456347012559228e-8,2.4576454432295024e-8,2.458943873899777e-8,2.460242304570051e-8,2.4615407352403257e-8,2.4628391659106002e-8,2.4641375965808747e-8,2.465436027251149e-8,2.4667344579214234e-8,2.468032888591698e-8,2.469331319261972e-8,2.4706297499322466e-8,2.4719281806025212e-8,2.4732266112727957e-8,2.47452504194307e-8,2.4758234726133444e-8,2.477121903283619e-8,2.4784203339538935e-8,2.4797187646241676e-8,2.4810171952944422e-8,2.4823156259647167e-8,2.483614056634991e-8,2.4849124873052654e-8,2.48621091797554e-8,2.4875093486458145e-8,2.4888077793160886e-8,2.4901062099863632e-8,2.4914046406566377e-8,2.492703071326912e-8,2.4940015019971864e-8,2.495299932667461e-8,2.4965983633377355e-8,2.4978967940080096e-8,2.4991952246782842e-8,2.5004936553485587e-8,2.5017920860188332e-8,2.5030905166891074e-8,2.504388947359382e-8,2.5056873780296565e-8,2.5069858086999306e-8,2.5082842393702052e-8,2.5095826700404797e-8,2.5108811007107542e-8,2.5121795313810284e-8,2.513477962051303e-8,2.5147763927215775e-8,2.516074823391852e-8,2.5173732540621262e-8,2.5186716847324007e-8,2.5199701154026752e-8,2.5212685460729494e-8,2.522566976743224e-8,2.5238654074134985e-8,2.525163838083773e-8,2.5264622687540472e-8,2.5277606994243217e-8,2.5290591300945962e-8,2.5303575607648704e-8,2.531655991435145e-8,2.5329544221054195e-8,2.534252852775694e-8,2.5355512834459682e-8,2.5368497141162427e-8,2.5381481447865172e-8,2.5394465754567917e-8,2.540745006127066e-8,2.5420434367973404e-8,2.543341867467615e-8,2.544640298137889e-8,2.5459387288081637e-8,2.5472371594784382e-8,2.5485355901487127e-8,2.549834020818987e-8,2.5511324514892614e-8,2.552430882159536e-8,2.5537293128298105e-8,2.5550277435000847e-8,2.5563261741703592e-8,2.5576246048406337e-8,2.558923035510908e-8,2.5602214661811824e-8,2.561519896851457e-8,2.5628183275217315e-8,2.5641167581920057e-8,2.5654151888622802e-8,2.5667136195325547e-8,2.568012050202829e-8,2.5693104808731034e-8,2.570608911543378e-8,2.5719073422136525e-8,2.5732057728839267e-8,2.5745042035542012e-8,2.5758026342244757e-8,2.5771010648947503e-8,2.5783994955650244e-8,2.579697926235299e-8]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.1220108717679977e-6,7.109999993204497e-7,1683,1,null,null,null,null,null,null,null,null],[4.2997999116778374e-7,3.8100000043783666e-7,1221,2,null,null,null,null,null,null,null,null],[3.6100391298532486e-7,3.4000000059819513e-7,1056,3,null,null,null,null,null,null,null,null],[3.600143827497959e-7,3.5099999973198237e-7,1089,4,null,null,null,null,null,null,null,null],[3.8102734833955765e-7,3.49999999649242e-7,1056,5,null,null,null,null,null,null,null,null],[3.909808583557606e-7,3.8099999954965824e-7,1221,6,null,null,null,null,null,null,null,null],[4.200264811515808e-7,4.1100000025551253e-7,1287,7,null,null,null,null,null,null,null,null],[4.4103944674134254e-7,4.3000000005122274e-7,1386,8,null,null,null,null,null,null,null,null],[4.909816198050976e-7,4.709999998908643e-7,1518,9,null,null,null,null,null,null,null,null],[5.00993337482214e-7,4.809999998300896e-7,1617,10,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.30999999526216e-7,1716,11,null,null,null,null,null,null,null,null],[5.509937182068825e-7,5.410000003536197e-7,1716,12,null,null,null,null,null,null,null,null],[6.00994098931551e-7,5.710000001712956e-7,1815,13,null,null,null,null,null,null,null,null],[6.210175342857838e-7,6.009999999889715e-7,1947,14,null,null,null,null,null,null,null,null],[6.509944796562195e-7,6.41000000634051e-7,1980,15,null,null,null,null,null,null,null,null],[6.710179150104523e-7,6.509999996850979e-7,2046,16,null,null,null,null,null,null,null,null],[6.909831427037716e-7,6.719999996462889e-7,2145,17,null,null,null,null,null,null,null,null],[7.310300134122372e-7,7.120000002913685e-7,2310,18,null,null,null,null,null,null,null,null],[7.709604687988758e-7,7.420000001090443e-7,2376,19,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.719999999267202e-7,2442,20,null,null,null,null,null,null,null,null],[8.119968697428703e-7,7.819999998659455e-7,2574,21,null,null,null,null,null,null,null,null],[8.320203050971031e-7,8.219999996228466e-7,11649,22,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.21999999903278e-7,3003,23,null,null,null,null,null,null,null,null],[9.320210665464401e-7,9.020000000248274e-7,2904,25,null,null,null,null,null,null,null,null],[9.710201993584633e-7,9.509999996382135e-7,3069,26,null,null,null,null,null,null,null,null],[9.720097295939922e-7,9.619999996601791e-7,3102,27,null,null,null,null,null,null,null,null],[1.001986674964428e-6,9.91999999477855e-7,3168,28,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0420000000621599e-6,3366,30,null,null,null,null,null,null,null,null],[1.0919757187366486e-6,1.0619999999406105e-6,3465,31,null,null,null,null,null,null,null,null],[1.133012119680643e-6,1.1219999995759622e-6,3630,33,null,null,null,null,null,null,null,null],[1.192034687846899e-6,1.1820000000994924e-6,3828,35,null,null,null,null,null,null,null,null],[1.2219534255564213e-6,1.2129999999999086e-6,3927,36,null,null,null,null,null,null,null,null],[1.292035449296236e-6,1.2730000005234388e-6,4158,38,null,null,null,null,null,null,null,null],[1.333013642579317e-6,1.31300000028034e-6,4290,40,null,null,null,null,null,null,null,null],[1.3830140233039856e-6,1.3629999999764664e-6,4488,42,null,null,null,null,null,null,null,null],[1.4430261217057705e-6,1.4330000004392218e-6,4653,44,null,null,null,null,null,null,null,null],[1.5230034478008747e-6,1.5119999998702838e-6,4917,47,null,null,null,null,null,null,null,null],[1.5730038285255432e-6,1.5629999996491506e-6,5115,49,null,null,null,null,null,null,null,null],[1.6729463823139668e-6,1.6430000000511313e-6,5412,52,null,null,null,null,null,null,null,null],[1.7130514606833458e-6,1.7030000005746615e-6,5544,54,null,null,null,null,null,null,null,null],[1.8139835447072983e-6,1.7930000000276891e-6,5841,57,null,null,null,null,null,null,null,null],[1.894019078463316e-6,1.8829999994807167e-6,6138,60,null,null,null,null,null,null,null,null],[1.9639846868813038e-6,1.952999999943472e-6,6369,63,null,null,null,null,null,null,null,null],[2.0440202206373215e-6,2.024000000488968e-6,6633,66,null,null,null,null,null,null,null,null],[2.134009264409542e-6,2.123999999881221e-6,6930,69,null,null,null,null,null,null,null,null],[2.263986971229315e-6,2.2340000001008775e-6,7293,73,null,null,null,null,null,null,null,null],[2.334010787308216e-6,2.31499999969742e-6,7590,76,null,null,null,null,null,null,null,null],[2.425047568976879e-6,2.4149999999778515e-6,7920,80,null,null,null,null,null,null,null,null],[2.555025275796652e-6,2.5350000001367334e-6,8283,84,null,null,null,null,null,null,null,null],[3.0249939300119877e-6,3.0060000000275977e-6,9900,89,null,null,null,null,null,null,null,null],[2.855027560144663e-6,2.835000000089849e-6,9306,93,null,null,null,null,null,null,null,null],[2.9549701139330864e-6,2.9450000003095056e-6,9603,98,null,null,null,null,null,null,null,null],[3.105960786342621e-6,3.0860000004295784e-6,10098,103,null,null,null,null,null,null,null,null],[3.25602013617754e-6,3.2259999995787325e-6,10560,108,null,null,null,null,null,null,null,null],[3.3659744076430798e-6,3.356000000565018e-6,10989,113,null,null,null,null,null,null,null,null],[3.5470002330839634e-6,3.5369999995538137e-6,11583,119,null,null,null,null,null,null,null,null],[3.69601184502244e-6,3.6760000003965843e-6,12078,125,null,null,null,null,null,null,null,null],[3.857014235109091e-6,3.8469999994461546e-6,12639,131,null,null,null,null,null,null,null,null],[4.058005288243294e-6,4.047000000007017e-6,13266,138,null,null,null,null,null,null,null,null],[4.217028617858887e-6,4.208000000005541e-6,13794,144,null,null,null,null,null,null,null,null],[4.447996616363525e-6,4.437999999495901e-6,14553,152,null,null,null,null,null,null,null,null],[4.667963366955519e-6,4.649000000078729e-6,15246,159,null,null,null,null,null,null,null,null],[4.869012627750635e-6,4.849000000639592e-6,15906,167,null,null,null,null,null,null,null,null],[5.139969289302826e-6,5.128999999826078e-6,16830,176,null,null,null,null,null,null,null,null],[5.390029400587082e-6,5.359999999399179e-6,17622,185,null,null,null,null,null,null,null,null],[5.620007868856192e-6,5.601000000687861e-6,18414,194,null,null,null,null,null,null,null,null],[5.901034455746412e-6,5.880999999874348e-6,19305,204,null,null,null,null,null,null,null,null],[6.192014552652836e-6,6.1719999999709785e-6,20229,214,null,null,null,null,null,null,null,null],[6.471993401646614e-6,6.461999999984869e-6,21219,224,null,null,null,null,null,null,null,null],[6.793008651584387e-6,6.783000000787354e-6,22242,236,null,null,null,null,null,null,null,null],[7.104012183845043e-6,7.0939999998742564e-6,23265,247,null,null,null,null,null,null,null,null],[7.483991794288158e-6,7.474000000229353e-6,24519,260,null,null,null,null,null,null,null,null],[7.824040949344635e-6,7.814000000827548e-6,25674,273,null,null,null,null,null,null,null,null],[8.20501009002328e-6,8.195000000377206e-6,26928,287,null,null,null,null,null,null,null,null],[8.616014383733273e-6,8.60599999974454e-6,28248,301,null,null,null,null,null,null,null,null],[9.01601742953062e-6,9.007000000060827e-6,29568,316,null,null,null,null,null,null,null,null],[9.457988198846579e-6,9.448000000134016e-6,31053,332,null,null,null,null,null,null,null,null],[9.91899287328124e-6,9.908000000002914e-6,32604,348,null,null,null,null,null,null,null,null],[1.0409974493086338e-5,1.039899999977223e-5,34188,366,null,null,null,null,null,null,null,null],[1.0910967830568552e-5,1.089999999948077e-5,35838,384,null,null,null,null,null,null,null,null],[1.1452008038759232e-5,1.1431999999977904e-5,37587,403,null,null,null,null,null,null,null,null],[1.2033036909997463e-5,1.202300000002765e-5,39567,424,null,null,null,null,null,null,null,null],[1.2614007573574781e-5,1.2594000000198946e-5,41448,445,null,null,null,null,null,null,null,null],[1.3204000424593687e-5,1.3193999999216999e-5,43395,467,null,null,null,null,null,null,null,null],[1.3855984434485435e-5,1.3845999999873015e-5,45573,490,null,null,null,null,null,null,null,null],[1.4556979294866323e-5,1.4558000000164384e-5,47850,515,null,null,null,null,null,null,null,null],[1.5277997590601444e-5,1.5268999999484834e-5,50193,541,null,null,null,null,null,null,null,null],[1.602998236194253e-5,1.6010000000399316e-5,52701,568,null,null,null,null,null,null,null,null],[1.6811012756079435e-5,1.6790999999294343e-5,55242,596,null,null,null,null,null,null,null,null],[1.7642974853515625e-5,1.7642999999623044e-5,58047,626,null,null,null,null,null,null,null,null],[1.848494866862893e-5,1.848500000001252e-5,60786,657,null,null,null,null,null,null,null,null],[1.942599192261696e-5,1.9426000000599686e-5,63921,690,null,null,null,null,null,null,null,null],[2.0388048142194748e-5,2.037800000032064e-5,67089,725,null,null,null,null,null,null,null,null],[2.138002309948206e-5,2.137999999973772e-5,70356,761,null,null,null,null,null,null,null,null],[2.2432010155171156e-5,2.2431999999739105e-5,73821,799,null,null,null,null,null,null,null,null],[2.3544009309262037e-5,2.3533999999436617e-5,77451,839,null,null,null,null,null,null,null,null],[2.4726963602006435e-5,2.4726999999558075e-5,81378,881,null,null,null,null,null,null,null,null],[2.5938032194972038e-5,2.5928999999536018e-5,85371,925,null,null,null,null,null,null,null,null],[2.7260975912213326e-5,2.7260999999612068e-5,89727,972,null,null,null,null,null,null,null,null],[2.8593000024557114e-5,2.8593999999770858e-5,94149,1020,null,null,null,null,null,null,null,null],[3.00369574688375e-5,3.00269999993219e-5,98835,1071,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.154900000001959e-5,103851,1125,null,null,null,null,null,null,null,null],[3.3070973586291075e-5,3.307199999991184e-5,108900,1181,null,null,null,null,null,null,null,null],[3.471499076113105e-5,3.4705000000023745e-5,114246,1240,null,null,null,null,null,null,null,null],[3.642798401415348e-5,3.642799999958868e-5,119889,1302,null,null,null,null,null,null,null,null],[3.823102451860905e-5,3.823199999963833e-5,125895,1367,null,null,null,null,null,null,null,null],[4.01550205424428e-5,4.015499999976413e-5,132165,1436,null,null,null,null,null,null,null,null],[4.2118015699088573e-5,4.21079999997076e-5,138666,1507,null,null,null,null,null,null,null,null],[4.424300277605653e-5,4.424299999961079e-5,145662,1583,null,null,null,null,null,null,null,null],[4.863098729401827e-5,4.8641000000237966e-5,160215,1662,null,null,null,null,null,null,null,null],[4.875101149082184e-5,4.8750999999569444e-5,160545,1745,null,null,null,null,null,null,null,null],[5.116499960422516e-5,5.11760000003747e-5,168498,1832,null,null,null,null,null,null,null,null],[5.370000144466758e-5,5.370099999968403e-5,176847,1924,null,null,null,null,null,null,null,null],[5.636498099192977e-5,5.636599999991887e-5,185658,2020,null,null,null,null,null,null,null,null],[5.9180951211601496e-5,5.918000000004753e-5,194898,2121,null,null,null,null,null,null,null,null],[6.214599125087261e-5,6.214600000031822e-5,204633,2227,null,null,null,null,null,null,null,null],[6.526097422465682e-5,6.525199999973808e-5,214896,2339,null,null,null,null,null,null,null,null],[6.850797217339277e-5,6.849800000008344e-5,225621,2456,null,null,null,null,null,null,null,null],[7.190497126430273e-5,7.191500000036655e-5,236808,2579,null,null,null,null,null,null,null,null],[7.549097063019872e-5,7.550100000042193e-5,248688,2708,null,null,null,null,null,null,null,null],[7.924699457362294e-5,7.925899999960961e-5,261030,2843,null,null,null,null,null,null,null,null],[8.32049991004169e-5,8.320600000022438e-5,274032,2985,null,null,null,null,null,null,null,null],[8.733296999707818e-5,8.733399999982794e-5,287595,3134,null,null,null,null,null,null,null,null],[9.17009892873466e-5,9.170199999974926e-5,301983,3291,null,null,null,null,null,null,null,null],[9.627902181819081e-5,9.628000000017067e-5,317130,3456,null,null,null,null,null,null,null,null],[1.0111898882314563e-4,1.0111899999998286e-4,333036,3629,null,null,null,null,null,null,null,null],[1.0612799087539315e-4,1.061289999997328e-4,349569,3810,null,null,null,null,null,null,null,null],[1.1144799645990133e-4,1.1145900000020248e-4,367059,4001,null,null,null,null,null,null,null,null],[1.1698796879500151e-4,1.1698899999945667e-4,385341,4201,null,null,null,null,null,null,null,null],[1.2283900287002325e-4,1.2285000000034074e-4,404646,4411,null,null,null,null,null,null,null,null],[1.2893998064100742e-4,1.2897100000053285e-4,424776,4631,null,null,null,null,null,null,null,null],[1.3539200881496072e-4,1.3542299999969032e-4,446127,4863,null,null,null,null,null,null,null,null],[1.4218600699678063e-4,1.4220699999967223e-4,468468,5106,null,null,null,null,null,null,null,null],[1.4924799324944615e-4,1.4928900000032996e-4,491700,5361,null,null,null,null,null,null,null,null],[1.56712019816041e-4,1.5675399999981465e-4,516318,5629,null,null,null,null,null,null,null,null],[1.6456696903333068e-4,1.6459900000054262e-4,542223,5911,null,null,null,null,null,null,null,null],[1.7280294559895992e-4,1.7284299999964503e-4,569382,6207,null,null,null,null,null,null,null,null],[1.8137803999707103e-4,1.8143000000048204e-4,597729,6517,null,null,null,null,null,null,null,null],[1.9045500084757805e-4,1.9049700000017822e-4,627528,6843,null,null,null,null,null,null,null,null],[1.999730011448264e-4,2.000149999998868e-4,659010,7185,null,null,null,null,null,null,null,null],[2.1001201821491122e-4,2.1006299999992706e-4,692043,7544,null,null,null,null,null,null,null,null],[2.2042100317776203e-4,2.2047299999972125e-4,726363,7921,null,null,null,null,null,null,null,null],[2.338959602639079e-4,2.339380000000446e-4,770616,8318,null,null,null,null,null,null,null,null],[2.4533801479265094e-4,2.4538999999990097e-4,808500,8733,null,null,null,null,null,null,null,null],[2.5517598260194063e-4,2.5523800000026853e-4,840840,9170,null,null,null,null,null,null,null,null],[2.6803999207913876e-4,2.6809100000058095e-4,883179,9629,null,null,null,null,null,null,null,null],[2.814849722199142e-4,2.815370000002204e-4,927564,10110,null,null,null,null,null,null,null,null],[2.9551098123192787e-4,2.955729999998269e-4,973797,10616,null,null,null,null,null,null,null,null],[3.097070148214698e-4,3.0974999999955344e-4,1020459,11146,null,null,null,null,null,null,null,null],[3.240240039303899e-4,3.2408700000008395e-4,1067715,11704,null,null,null,null,null,null,null,null],[3.404549788683653e-4,3.4050699999976786e-4,1121802,12289,null,null,null,null,null,null,null,null],[3.5735598066821694e-4,3.574100000003355e-4,1177407,12903,null,null,null,null,null,null,null,null],[3.7583097582682967e-4,3.759030000001218e-4,1238391,13549,null,null,null,null,null,null,null,null],[4.032220458611846e-4,4.032949999999147e-4,1328646,14226,null,null,null,null,null,null,null,null],[4.35382011346519e-4,4.355760000001041e-4,1438371,14937,null,null,null,null,null,null,null,null],[4.7347298823297024e-4,4.735670000002301e-4,1560075,15684,null,null,null,null,null,null,null,null],[4.711890360340476e-4,4.7125299999972725e-4,1552485,16469,null,null,null,null,null,null,null,null],[4.926690016873181e-4,4.927229999998062e-4,1623171,17292,null,null,null,null,null,null,null,null],[5.16803003847599e-4,5.168879999999376e-4,1702668,18157,null,null,null,null,null,null,null,null],[5.425310228019953e-4,5.426159999997182e-4,1787511,19065,null,null,null,null,null,null,null,null],[5.588220083154738e-4,5.588660000004353e-4,1841103,20018,null,null,null,null,null,null,null,null],[5.818450008518994e-4,5.819099999992972e-4,1916970,21019,null,null,null,null,null,null,null,null],[6.157280295155942e-4,6.157829999997588e-4,2028411,22070,null,null,null,null,null,null,null,null],[6.603809888474643e-4,6.604570000003918e-4,2175657,23173,null,null,null,null,null,null,null,null],[6.939350278116763e-4,6.939990000001117e-4,2286174,24332,null,null,null,null,null,null,null,null],[7.108759600669146e-4,7.109410000003535e-4,2341944,25549,null,null,null,null,null,null,null,null],[7.437770254909992e-4,7.438530000003496e-4,2450349,26826,null,null,null,null,null,null,null,null],[7.80866015702486e-4,7.809319999996234e-4,2572548,28167,null,null,null,null,null,null,null,null],[8.356189937330782e-4,8.356950000001362e-4,2752893,29576,null,null,null,null,null,null,null,null],[8.850510348565876e-4,8.851380000001186e-4,2915715,31054,null,null,null,null,null,null,null,null],[9.072209941223264e-4,9.072890000005884e-4,2988711,32607,null,null,null,null,null,null,null,null],[9.894350077956915e-4,9.895430000002037e-4,3259608,34238,null,null,null,null,null,null,null,null],[1.0583139955997467e-3,1.0583809999999971e-3,3487011,35950,null,null,null,null,null,null,null,null],[1.0933089652098715e-3,1.0934069999999352e-3,3601818,37747,null,null,null,null,null,null,null,null],[1.1605540057644248e-3,1.1611340000001746e-3,3830871,39634,null,null,null,null,null,null,null,null],[1.2148360256105661e-3,1.214885000000443e-3,4001679,41616,null,null,null,null,null,null,null,null],[1.2682650121860206e-3,1.2680239999998122e-3,4176942,43697,null,null,null,null,null,null,null,null],[1.3147220015525818e-3,1.3147820000005694e-3,4330887,45882,null,null,null,null,null,null,null,null],[1.3914559967815876e-3,1.3915060000000423e-3,4583370,48176,null,null,null,null,null,null,null,null],[1.449362956918776e-3,1.4494540000002942e-3,4774506,50585,null,null,null,null,null,null,null,null],[1.495618955232203e-3,1.4956909999996881e-3,4926735,53114,null,null,null,null,null,null,null,null],[1.5599590260535479e-3,1.5600509999993406e-3,5138793,55770,null,null,null,null,null,null,null,null],[1.6359509900212288e-3,1.6360440000005028e-3,5389098,58558,null,null,null,null,null,null,null,null],[1.717503007967025e-3,1.7175859999998266e-3,5657718,61486,null,null,null,null,null,null,null,null],[1.8506619962863624e-3,1.8507449999995984e-3,6096321,64561,null,null,null,null,null,null,null,null],[1.9595249905250967e-3,1.95962999999999e-3,6454899,67789,null,null,null,null,null,null,null,null],[2.038571983575821e-3,2.0386470000000045e-3,6715269,71178,null,null,null,null,null,null,null,null],[2.1695360192097723e-3,2.1696219999993716e-3,7146579,74737,null,null,null,null,null,null,null,null],[2.2472109994851053e-3,2.2472979999994536e-3,7402461,78474,null,null,null,null,null,null,null,null],[2.3032159660942852e-3,2.303323000000468e-3,7586997,82398,null,null,null,null,null,null,null,null],[2.4569520028308034e-3,2.457029999999527e-3,8093283,86518,null,null,null,null,null,null,null,null],[2.5408989749848843e-3,2.5409779999998605e-3,8369757,90843,null,null,null,null,null,null,null,null],[2.6689469814300537e-3,2.6690470000003685e-3,8791497,95386,null,null,null,null,null,null,null,null],[2.802106027957052e-3,2.8021870000003446e-3,9230100,100155,null,null,null,null,null,null,null,null],[3.0183690250851214e-3,3.0184520000000603e-3,9942570,105163,null,null,null,null,null,null,null,null],[3.0882700229994953e-3,3.0883619999997336e-3,10172712,110421,null,null,null,null,null,null,null,null],[3.201149986125529e-3,3.201245000000519e-3,10544523,115942,null,null,null,null,null,null,null,null],[2.9520150274038315e-3,2.952106999999593e-3,9724011,121739,null,null,null,null,null,null,null,null],[3.1020959722809494e-3,3.102188999999811e-3,10218318,127826,null,null,null,null,null,null,null,null],[3.2553619821555912e-3,3.2554359999998894e-3,10723119,134217,null,null,null,null,null,null,null,null],[3.419075976125896e-3,3.4191720000000814e-3,11262372,140928,null,null,null,null,null,null,null,null],[3.588431980460882e-3,3.588530000000034e-3,11820303,147975,null,null,null,null,null,null,null,null],[3.7730970070697367e-3,3.7731850000000122e-3,12428493,155373,null,null,null,null,null,null,null,null],[3.964533971156925e-3,3.964614000000033e-3,13058991,163142,null,null,null,null,null,null,null,null],[4.152233945205808e-3,4.152334999999674e-3,13677312,171299,null,null,null,null,null,null,null,null],[4.396218981128186e-3,4.38949999999938e-3,14480994,179864,null,null,null,null,null,null,null,null],[4.608013958204538e-3,4.6081079999993335e-3,15178515,188858,null,null,null,null,null,null,null,null],[4.8116829711943865e-3,4.81178999999976e-3,15849471,198300,null,null,null,null,null,null,null,null],[5.057181988377124e-3,5.057288999999798e-3,16658037,208215,null,null,null,null,null,null,null,null],[5.314111011102796e-3,5.314199999999936e-3,17504223,218626,null,null,null,null,null,null,null,null],[5.582020967267454e-3,5.582131999999795e-3,18386775,229558,null,null,null,null,null,null,null,null],[5.859828961547464e-3,5.859931999999901e-3,19301667,241036,null,null,null,null,null,null,null,null],[6.144660001154989e-3,6.144786000000124e-3,20240055,253087,null,null,null,null,null,null,null,null],[6.451231020037085e-3,6.451350000000744e-3,21249789,265742,null,null,null,null,null,null,null,null],[6.780846975743771e-3,6.780977000000021e-3,22335687,279029,null,null,null,null,null,null,null,null],[7.106222969014198e-3,7.10634699999968e-3,23407329,292980,null,null,null,null,null,null,null,null],[7.483688008505851e-3,7.483792999999572e-3,24650505,307629,null,null,null,null,null,null,null,null],[7.842916995286942e-3,7.843055000000376e-3,25833885,323011,null,null,null,null,null,null,null,null],[8.231642015744e-3,8.231762999999503e-3,27114186,339161,null,null,null,null,null,null,null,null],[8.645844005513936e-3,8.645968999999809e-3,28478571,356119,null,null,null,null,null,null,null,null],[9.086596022825688e-3,9.086725000000406e-3,29930241,373925,null,null,null,null,null,null,null,null],[9.55191400134936e-3,9.552045999999592e-3,31463025,392622,null,null,null,null,null,null,null,null],[1.0013355000410229e-2,1.0013499000000259e-2,32982906,412253,null,null,null,null,null,null,null,null],[1.059920695843175e-2,1.0599436000000573e-2,34913043,432866,null,null,null,null,null,null,null,null],[1.1071338027250022e-2,1.1071481000000105e-2,36467673,454509,null,null,null,null,null,null,null,null],[1.1590857000555843e-2,1.1591002999999489e-2,38178954,477234,null,null,null,null,null,null,null,null],[1.2174506031442434e-2,1.2174656000000006e-2,40101303,501096,null,null,null,null,null,null,null,null],[1.2792046996764839e-2,1.2792201999999975e-2,42135390,526151,null,null,null,null,null,null,null,null],[1.3417874986771494e-2,1.3418044999999879e-2,44196900,552458,null,null,null,null,null,null,null,null],[1.4248274033889174e-2,1.424844899999922e-2,46932105,580081,null,null,null,null,null,null,null,null],[1.4854745008051395e-2,1.485494499999973e-2,48929727,609086,null,null,null,null,null,null,null,null],[1.5565299021545798e-2,1.5565484999999768e-2,51270153,639540,null,null,null,null,null,null,null,null],[1.63057409808971e-2,1.630599200000038e-2,53709117,671517,null,null,null,null,null,null,null,null],[1.7397496034391224e-2,1.7398217000000216e-2,57306843,705093,null,null,null,null,null,null,null,null],[1.801024901214987e-2,1.8010432999999715e-2,59323308,740347,null,null,null,null,null,null,null,null],[1.888897898606956e-2,1.888919900000019e-2,62217903,777365,null,null,null,null,null,null,null,null],[1.988355297362432e-2,1.9883780999999878e-2,65493813,816233,null,null,null,null,null,null,null,null],[2.0825710031203926e-2,2.0825935000000406e-2,68597100,857045,null,null,null,null,null,null,null,null],[2.2223929001484066e-2,2.2224573999999997e-2,73204296,899897,null,null,null,null,null,null,null,null],[2.3176544986199588e-2,2.317709700000048e-2,76341738,944892,null,null,null,null,null,null,null,null],[2.410111902281642e-2,2.410193900000035e-2,79387737,992136,null,null,null,null,null,null,null,null],[2.5368262024130672e-2,2.5368529999999723e-2,83559564,1041743,null,null,null,null,null,null,null,null],[2.7295517036691308e-2,2.7295990000000714e-2,89908566,1093831,null,null,null,null,null,null,null,null],[2.8167893004138023e-2,2.8168183000000013e-2,92781084,1148522,null,null,null,null,null,null,null,null],[2.9317578009795398e-2,2.931786500000033e-2,96568065,1205948,null,null,null,null,null,null,null,null],[3.0783672002144158e-2,3.0783961000000026e-2,101397021,1266246,null,null,null,null,null,null,null,null],[3.2468824996612966e-2,3.2469757999999516e-2,106951218,1329558,null,null,null,null,null,null,null,null],[3.4044572967104614e-2,3.404487600000028e-2,112137729,1396036,null,null,null,null,null,null,null,null],[3.598321898607537e-2,3.598372699999963e-2,118524384,1465838,null,null,null,null,null,null,null,null],[3.7679462984669954e-2,3.767985299999932e-2,124111053,1539130,null,null,null,null,null,null,null,null],[3.9541966980323195e-2,3.9542381000000404e-2,130245885,1616086,null,null,null,null,null,null,null,null],[4.124537401366979e-2,4.1245789999999616e-2,135856644,1696890,null,null,null,null,null,null,null,null],[4.3289995985105634e-2,4.32903979999999e-2,142590987,1781735,null,null,null,null,null,null,null,null],[4.5471495017409325e-2,4.5471923000000025e-2,149776572,1870822,null,null,null,null,null,null,null,null],[4.7792432946152985e-2,4.7792918999999934e-2,157421781,1964363,null,null,null,null,null,null,null,null],[5.0295241991989315e-2,5.029573499999973e-2,165665511,2062581,null,null,null,null,null,null,null,null],[5.2595111017581075e-2,5.259558100000028e-2,173240661,2165710,null,null,null,null,null,null,null,null],[5.5277973995544016e-2,5.5278453999999755e-2,182077533,2273996,null,null,null,null,null,null,null,null],[5.8021020027808845e-2,5.802152000000049e-2,191112768,2387695,null,null,null,null,null,null,null,null],[6.095867801923305e-2,6.0959242000000025e-2,200789259,2507080,null,null,null,null,null,null,null,null],[6.405672599794343e-2,6.405281299999999e-2,210993618,2632434,null,null,null,null,null,null,null,null],[6.718005199218169e-2,6.718063000000019e-2,221281170,2764056,null,null,null,null,null,null,null,null],[7.063243095763028e-2,7.063312499999963e-2,232653333,2902259,null,null,null,null,null,null,null,null],[7.40192270022817e-2,7.401983699999981e-2,243808257,3047372,null,null,null,null,null,null,null,null],[7.780699199065566e-2,7.78076590000003e-2,256284732,3199740,null,null,null,null,null,null,null,null],[8.200011198641732e-2,8.200089000000066e-2,270096585,3359727,null,null,null,null,null,null,null,null],[8.577892900211737e-2,8.577972599999928e-2,282543492,3527714,null,null,null,null,null,null,null,null],[9.023066097870469e-2,9.023142199999956e-2,297206349,3704100,null,null,null,null,null,null,null,null],[9.45879080099985e-2,9.458880000000036e-2,311559039,3889305,null,null,null,null,null,null,null,null],[9.937034698668867e-2,9.937120500000063e-2,327311226,4083770,null,null,null,null,null,null,null,null],[0.1095963490079157,0.10959725300000045,360993930,4287958,null,null,null,null,null,null,null,null],[0.11552848300198093,0.11552953999999982,380534154,4502356,null,null,null,null,null,null,null,null],[0.12088419101200998,0.1208851580000001,398174172,4727474,null,null,null,null,null,null,null,null],[0.12702564499340951,0.1270267279999997,418403667,4963848,null,null,null,null,null,null,null,null],[0.13329898501979187,0.13330005400000022,439066914,5212040,null,null,null,null,null,null,null,null],[0.140186870994512,0.14018804200000012,461754711,5472642,null,null,null,null,null,null,null,null],[0.14730693999445066,0.1473082140000006,485207250,5746274,null,null,null,null,null,null,null,null],[0.1544275899650529,0.154428875999999,508661472,6033588,null,null,null,null,null,null,null,null],[0.16206919099204242,0.16207050400000078,533831661,6335268,null,null,null,null,null,null,null,null],[0.17039759398903698,0.17039912999999984,561264627,6652031,null,null,null,null,null,null,null,null],[0.17910854000365362,0.179110231000001,589957599,6984633,null,null,null,null,null,null,null,null],[0.1877509289770387,0.1877493459999986,618423465,7333864,null,null,null,null,null,null,null,null],[0.19484114198712632,0.19484273800000018,641777466,7700558,null,null,null,null,null,null,null,null],[0.1967731750337407,0.1967748260000004,648141582,8085585,null,null,null,null,null,null,null,null],[0.20656140998471528,0.20656309399999984,680382054,8489865,null,null,null,null,null,null,null,null],[0.21691621298668906,0.21691797200000096,714489534,8914358,null,null,null,null,null,null,null,null],[0.22754845197778195,0.22755028999999993,749510289,9360076,null,null,null,null,null,null,null,null]],"reportName":"fib/5","reportNumber":1,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":42}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.2193049137878224e-9,"confIntUDX":9.656405683572824e-10},"estPoint":1.376154926895251e-7},"anOutlierVar":{"ovDesc":"a moderate","ovEffect":"Moderate","ovFraction":0.38620218919276267},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.7086514387624945e-9,"confIntUDX":1.6862717006331852e-9},"estPoint":1.3645055682224533e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":8.395999648006277e-5,"confIntUDX":1.1090499541057712e-4},"estPoint":1.5062483839598762e-4}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.452948645059738e-4,"confIntUDX":4.1552799766231274e-4},"estPoint":0.999005998202595},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":7.019182474873841e-10,"confIntUDX":5.272290500819154e-10},"estPoint":3.595410700809442e-9}},"reportKDEs":[{"kdePDF":[5.274041638793628,111.13240968360849,1695.2383614313376,18849.995856274472,151953.77677751292,888638.738075093,3770465.0986158806,1.1615193689312074e7,2.604573840019683e7,4.2924992653846964e7,5.383755031218667e7,5.726678832160708e7,6.349985919530781e7,8.028021940340853e7,9.890440019936185e7,1.0532498343584022e8,1.01342397357232e8,1.0271408767561758e8,1.17182064745088e8,1.3407929163912627e8,1.3686908750733107e8,1.214281619684658e8,9.757712899317943e7,7.416566024415341e7,5.34944006833291e7,4.015401039212305e7,4.1543946818613544e7,5.728722236307025e7,7.59643666474708e7,8.407293963439395e7,7.596098048371162e7,5.724941342531396e7,4.1238353039582565e7,3.83581170247591e7,4.580512753837311e7,5.008773235666174e7,4.205690158951087e7,2.604584692508606e7,1.2484868536130628e7,7537432.037720749,1.2483178035632545e7,2.60269978730671e7,4.1904952579042666e7,4.919921028692312e7,4.203646808523235e7,2.676346395636231e7,1.5363306622683438e7,1.5363307497428445e7,2.67634576596896e7,4.203635846673908e7,4.9197513225379564e7,4.188610492479977e7,2.5875046821242146e7,1.1594652873699171e7,3768659.4373543635,888522.290300119,151948.59252795813,18849.856343822496,1694.9117065527298,111.72696077494949,4.214315793431429,1.2013679346270916,-1.0216822539083192,1.0408957442526592,-1.0660004856336855,1.1023423408375737,-1.1455898667575724,1.3897845725922273,3.9582686708456922,112.05488742925337,1694.5064554621529,18850.345629960262,151948.01108188598,888522.9686671675,3768658.4623361826,1.1594648552844806e7,2.5874935076113727e7,4.188441016318299e7,4.91786630924939e7,4.188441088334783e7,2.587495159056892e7,1.159501342963226e7,3774436.2646145844,955804.9433138748,729489.8218103116,3692274.535586301,1.7420796002569996e7,6.202838431349826e7,1.67230222528094e8,3.4444233533297324e8,5.475200039364114e8,6.802536661495528e8,6.73135123261824e8,5.479218503799253e8,3.888878925056097e8,2.6474696802362826e8,1.925804744539135e8,1.578864134102267e8,1.468145483659374e8,1.559660832954353e8,1.7986018954396734e8,2.0136480350005192e8,2.0298579930257565e8,1.8511085411088043e8,1.6338752783393455e8,1.4783892498728317e8,1.3426812388482302e8,1.1564701084040293e8,9.23838212465019e7,7.278691280684687e7,6.804131811566412e7,8.054822880054186e7,9.589117024674831e7,9.574080436263388e7,7.950774896400969e7,6.336348482247712e7,5.724941711394983e7,5.383595688994364e7,4.292488496705503e7,2.604573495958621e7,1.1615192122526279e7,3770466.264521857,888637.7736333845,151954.5480886748,18849.4069585961,1695.653117943465,110.88590343047127,5.355819889129055],"kdeType":"time","kdeValues":[1.2935309605942562e-7,1.2946083835532028e-7,1.2956858065121497e-7,1.2967632294710963e-7,1.2978406524300432e-7,1.2989180753889898e-7,1.2999954983479364e-7,1.3010729213068833e-7,1.30215034426583e-7,1.3032277672247768e-7,1.3043051901837234e-7,1.3053826131426703e-7,1.306460036101617e-7,1.3075374590605636e-7,1.3086148820195104e-7,1.309692304978457e-7,1.310769727937404e-7,1.3118471508963506e-7,1.3129245738552972e-7,1.314001996814244e-7,1.3150794197731907e-7,1.3161568427321376e-7,1.3172342656910842e-7,1.3183116886500308e-7,1.3193891116089777e-7,1.3204665345679243e-7,1.3215439575268712e-7,1.3226213804858178e-7,1.3236988034447644e-7,1.3247762264037113e-7,1.325853649362658e-7,1.3269310723216048e-7,1.3280084952805514e-7,1.3290859182394983e-7,1.330163341198445e-7,1.3312407641573916e-7,1.3323181871163384e-7,1.333395610075285e-7,1.334473033034232e-7,1.3355504559931786e-7,1.3366278789521252e-7,1.337705301911072e-7,1.3387827248700187e-7,1.3398601478289656e-7,1.3409375707879122e-7,1.3420149937468588e-7,1.3430924167058057e-7,1.3441698396647523e-7,1.3452472626236992e-7,1.3463246855826458e-7,1.3474021085415924e-7,1.3484795315005393e-7,1.349556954459486e-7,1.3506343774184328e-7,1.3517118003773794e-7,1.3527892233363263e-7,1.353866646295273e-7,1.3549440692542195e-7,1.3560214922131664e-7,1.357098915172113e-7,1.35817633813106e-7,1.3592537610900066e-7,1.3603311840489532e-7,1.3614086070079e-7,1.3624860299668467e-7,1.3635634529257936e-7,1.3646408758847402e-7,1.3657182988436868e-7,1.3667957218026337e-7,1.3678731447615803e-7,1.3689505677205272e-7,1.3700279906794738e-7,1.3711054136384204e-7,1.3721828365973673e-7,1.373260259556314e-7,1.3743376825152608e-7,1.3754151054742074e-7,1.3764925284331543e-7,1.377569951392101e-7,1.3786473743510475e-7,1.3797247973099944e-7,1.380802220268941e-7,1.381879643227888e-7,1.3829570661868345e-7,1.3840344891457812e-7,1.385111912104728e-7,1.3861893350636747e-7,1.3872667580226215e-7,1.3883441809815682e-7,1.3894216039405148e-7,1.3904990268994617e-7,1.3915764498584083e-7,1.3926538728173552e-7,1.3937312957763018e-7,1.3948087187352487e-7,1.3958861416941953e-7,1.396963564653142e-7,1.3980409876120888e-7,1.3991184105710354e-7,1.4001958335299823e-7,1.401273256488929e-7,1.4023506794478755e-7,1.4034281024068224e-7,1.404505525365769e-7,1.405582948324716e-7,1.4066603712836625e-7,1.4077377942426092e-7,1.408815217201556e-7,1.4098926401605027e-7,1.4109700631194495e-7,1.4120474860783962e-7,1.413124909037343e-7,1.4142023319962897e-7,1.4152797549552363e-7,1.4163571779141832e-7,1.4174346008731298e-7,1.4185120238320764e-7,1.4195894467910233e-7,1.42066686974997e-7,1.4217442927089168e-7,1.4228217156678634e-7,1.4238991386268103e-7,1.424976561585757e-7,1.4260539845447035e-7,1.4271314075036504e-7,1.428208830462597e-7,1.429286253421544e-7,1.4303636763804905e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.4730030670762062e-6,8.810000000636364e-7,2178,1,null,null,null,null,null,null,null,null],[7.210182957351208e-7,7.019999994639647e-7,2277,2,null,null,null,null,null,null,null,null],[7.810303941369057e-7,7.509999999655292e-7,2409,3,null,null,null,null,null,null,null,null],[8.92032403498888e-7,8.820000001463768e-7,2838,4,null,null,null,null,null,null,null,null],[1.0619987733662128e-6,1.0419999991739815e-6,3399,5,null,null,null,null,null,null,null,null],[1.23301288112998e-6,1.2119999990289898e-6,3960,6,null,null,null,null,null,null,null,null],[1.3730023056268692e-6,1.3619999990055476e-6,4455,7,null,null,null,null,null,null,null,null],[1.533015165477991e-6,1.5130000008412026e-6,4983,8,null,null,null,null,null,null,null,null],[1.6840058378875256e-6,1.682999998919854e-6,5478,9,null,null,null,null,null,null,null,null],[1.8539722077548504e-6,1.8429999997238156e-6,6006,10,null,null,null,null,null,null,null,null],[2.0239967852830887e-6,2.0139999996615643e-6,6633,11,null,null,null,null,null,null,null,null],[2.1840096451342106e-6,2.1740000004655258e-6,7062,12,null,null,null,null,null,null,null,null],[2.343964297324419e-6,2.3240000004420835e-6,7623,13,null,null,null,null,null,null,null,null],[2.503977157175541e-6,2.505000001207236e-6,8151,14,null,null,null,null,null,null,null,null],[2.655026037245989e-6,2.644999998580033e-6,8646,15,null,null,null,null,null,null,null,null],[2.8259819373488426e-6,2.8150000002113984e-6,9207,16,null,null,null,null,null,null,null,null],[2.9859947971999645e-6,2.9660000002706965e-6,9702,17,null,null,null,null,null,null,null,null],[3.145949449390173e-6,3.136000000125705e-6,10263,18,null,null,null,null,null,null,null,null],[3.326043952256441e-6,3.316000000808117e-6,10791,19,null,null,null,null,null,null,null,null],[3.4660333767533302e-6,3.4570000000400114e-6,11286,20,null,null,null,null,null,null,null,null],[3.6159763112664223e-6,3.617000000843973e-6,11847,21,null,null,null,null,null,null,null,null],[3.797002136707306e-6,3.7870000006989812e-6,12375,22,null,null,null,null,null,null,null,null],[3.947003278881311e-6,3.936999998899182e-6,12903,23,null,null,null,null,null,null,null,null],[4.258006811141968e-6,4.247999999762442e-6,13926,25,null,null,null,null,null,null,null,null],[4.427973181009293e-6,4.41799999961745e-6,14487,26,null,null,null,null,null,null,null,null],[4.558998625725508e-6,4.547999999715557e-6,14916,27,null,null,null,null,null,null,null,null],[4.73798718303442e-6,4.718999999653306e-6,15510,28,null,null,null,null,null,null,null,null],[5.059002432972193e-6,5.050000000395016e-6,16566,30,null,null,null,null,null,null,null,null],[5.220004823058844e-6,5.200000000371574e-6,17061,31,null,null,null,null,null,null,null,null],[5.541020072996616e-6,5.52000000020314e-6,18117,33,null,null,null,null,null,null,null,null],[5.85097586736083e-6,5.840000000034706e-6,19173,35,null,null,null,null,null,null,null,null],[6.021000444889069e-6,6.021000000799859e-6,19767,36,null,null,null,null,null,null,null,null],[6.352027412503958e-6,6.341999998937808e-6,20823,38,null,null,null,null,null,null,null,null],[6.642017979174852e-6,6.6329999999226175e-6,21813,40,null,null,null,null,null,null,null,null],[7.002963684499264e-6,6.9629999988052305e-6,22902,42,null,null,null,null,null,null,null,null],[7.314025424420834e-6,7.304000000374344e-6,23991,44,null,null,null,null,null,null,null,null],[7.78399407863617e-6,7.775000000265209e-6,25542,47,null,null,null,null,null,null,null,null],[8.105009328573942e-6,8.085999999352111e-6,26565,49,null,null,null,null,null,null,null,null],[8.585979230701923e-6,8.575999999038686e-6,28182,52,null,null,null,null,null,null,null,null],[8.89599323272705e-6,8.876000000768158e-6,29238,54,null,null,null,null,null,null,null,null],[9.417999535799026e-6,9.408000000377115e-6,30987,57,null,null,null,null,null,null,null,null],[9.908981155604124e-6,9.888999999319026e-6,32538,60,null,null,null,null,null,null,null,null],[1.035997411236167e-5,1.0350000000158843e-5,33990,63,null,null,null,null,null,null,null,null],[1.0850024409592152e-5,1.0840999999928158e-5,35673,66,null,null,null,null,null,null,null,null],[1.132104080170393e-5,1.1311000001512639e-5,37224,69,null,null,null,null,null,null,null,null],[1.1971977073699236e-5,1.1963000000392299e-5,39303,73,null,null,null,null,null,null,null,null],[1.2432981748133898e-5,1.242399999945576e-5,40887,76,null,null,null,null,null,null,null,null],[1.3084965758025646e-5,1.3075000000029036e-5,43032,80,null,null,null,null,null,null,null,null],[1.373601844534278e-5,1.3716000001551265e-5,45144,84,null,null,null,null,null,null,null,null],[1.4607969205826521e-5,1.4587999999093881e-5,48015,89,null,null,null,null,null,null,null,null],[1.5209021512418985e-5,1.5198999999910257e-5,50028,93,null,null,null,null,null,null,null,null],[1.5989993698894978e-5,1.5979999998805283e-5,52602,98,null,null,null,null,null,null,null,null],[1.680100103840232e-5,1.6791999998488905e-5,55209,103,null,null,null,null,null,null,null,null],[1.7623009625822306e-5,1.7602999999866142e-5,57948,108,null,null,null,null,null,null,null,null],[1.8403981812298298e-5,1.8393999999588573e-5,60555,113,null,null,null,null,null,null,null,null],[1.9366038031876087e-5,1.9345999998421348e-5,63657,119,null,null,null,null,null,null,null,null],[2.0337989553809166e-5,2.0327999999736335e-5,66891,125,null,null,null,null,null,null,null,null],[2.6780006010085344e-5,2.7240999999733617e-5,91179,131,null,null,null,null,null,null,null,null],[3.2450014259666204e-5,3.265199999979984e-5,108141,138,null,null,null,null,null,null,null,null],[3.719900269061327e-5,3.7811000000331774e-5,127875,144,null,null,null,null,null,null,null,null],[3.485498018562794e-5,3.494499999945333e-5,115170,152,null,null,null,null,null,null,null,null],[3.6187004297971725e-5,3.627799999961212e-5,119625,159,null,null,null,null,null,null,null,null],[3.8743019104003906e-5,3.902300000113712e-5,129030,167,null,null,null,null,null,null,null,null],[3.612699219956994e-5,3.608799999987866e-5,118701,176,null,null,null,null,null,null,null,null],[3.008596831932664e-5,3.0055999999945016e-5,98901,185,null,null,null,null,null,null,null,null],[3.1449017114937305e-5,3.142899999986071e-5,103422,194,null,null,null,null,null,null,null,null],[3.3051008358597755e-5,3.304100000001142e-5,108735,204,null,null,null,null,null,null,null,null],[3.4653989132493734e-5,3.463500000044917e-5,113982,214,null,null,null,null,null,null,null,null],[3.6258017644286156e-5,3.624800000068262e-5,119295,224,null,null,null,null,null,null,null,null],[3.817200195044279e-5,3.817099999992024e-5,125598,236,null,null,null,null,null,null,null,null],[3.994500730186701e-5,3.9935000000212995e-5,131406,247,null,null,null,null,null,null,null,null],[4.20489814132452e-5,4.204900000104317e-5,138402,260,null,null,null,null,null,null,null,null],[4.412198904901743e-5,4.411199999942994e-5,145299,273,null,null,null,null,null,null,null,null],[4.6396045945584774e-5,4.639700000019786e-5,152757,287,null,null,null,null,null,null,null,null],[4.865095252171159e-5,4.863200000038148e-5,160116,301,null,null,null,null,null,null,null,null],[5.1036011427640915e-5,5.103600000033737e-5,168036,316,null,null,null,null,null,null,null,null],[5.3640047553926706e-5,5.362099999928205e-5,176517,332,null,null,null,null,null,null,null,null],[5.6194025091826916e-5,5.6185000000041896e-5,185031,348,null,null,null,null,null,null,null,null],[5.907996091991663e-5,5.906999999893969e-5,194502,366,null,null,null,null,null,null,null,null],[6.197602488100529e-5,6.195600000147294e-5,204039,384,null,null,null,null,null,null,null,null],[6.504100747406483e-5,6.50209999992768e-5,214137,403,null,null,null,null,null,null,null,null],[6.840704008936882e-5,6.840800000063041e-5,225258,424,null,null,null,null,null,null,null,null],[7.179402746260166e-5,7.178399999929752e-5,236379,445,null,null,null,null,null,null,null,null],[7.533002644777298e-5,7.533099999967874e-5,248028,467,null,null,null,null,null,null,null,null],[7.901701610535383e-5,7.899800000110702e-5,260172,490,null,null,null,null,null,null,null,null],[8.304498624056578e-5,8.303499999939845e-5,273471,515,null,null,null,null,null,null,null,null],[8.52489611133933e-5,8.526000000053102e-5,280764,541,null,null,null,null,null,null,null,null],[8.903699927031994e-5,8.904699999945365e-5,293238,568,null,null,null,null,null,null,null,null],[9.344401769340038e-5,9.34350000001416e-5,307692,596,null,null,null,null,null,null,null,null],[9.811302879825234e-5,9.8114000000038e-5,323136,626,null,null,null,null,null,null,null,null],[1.0295200627297163e-4,1.0294199999982823e-4,339075,657,null,null,null,null,null,null,null,null],[1.0822201147675514e-4,1.082130000007453e-4,356367,690,null,null,null,null,null,null,null,null],[1.1359096970409155e-4,1.1359299999824657e-4,374055,725,null,null,null,null,null,null,null,null],[1.1921202531084418e-4,1.1920299999879092e-4,392601,761,null,null,null,null,null,null,null,null],[1.2516300193965435e-4,1.2515499999921076e-4,412203,799,null,null,null,null,null,null,null,null],[1.3139494694769382e-4,1.3139600000044993e-4,432729,839,null,null,null,null,null,null,null,null],[1.379769528284669e-4,1.379690000007372e-4,454410,881,null,null,null,null,null,null,null,null],[1.448499970138073e-4,1.4484100000089484e-4,477048,925,null,null,null,null,null,null,null,null],[1.5219399938359857e-4,1.5219500000007713e-4,501237,972,null,null,null,null,null,null,null,null],[1.5971797984093428e-4,1.5970900000006338e-4,525987,1020,null,null,null,null,null,null,null,null],[1.6769301146268845e-4,1.676939999999405e-4,552288,1071,null,null,null,null,null,null,null,null],[1.7612904775887728e-4,1.761189999989199e-4,580107,1125,null,null,null,null,null,null,null,null],[1.848650281317532e-4,1.8485600000062163e-4,608850,1181,null,null,null,null,null,null,null,null],[1.9409204833209515e-4,1.94093000001061e-4,639210,1240,null,null,null,null,null,null,null,null],[2.0666600903496146e-4,2.0666700000049332e-4,680757,1302,null,null,null,null,null,null,null,null],[2.141490112990141e-4,2.141409999989463e-4,705309,1367,null,null,null,null,null,null,null,null],[2.310710260644555e-4,2.3106199999922694e-4,761046,1436,null,null,null,null,null,null,null,null],[2.425220445729792e-4,2.4252400000079888e-4,798765,1507,null,null,null,null,null,null,null,null],[2.575300168246031e-4,2.575520000007714e-4,848364,1583,null,null,null,null,null,null,null,null],[2.6740902103483677e-4,2.674099999993018e-4,880770,1662,null,null,null,null,null,null,null,null],[2.793209860101342e-4,2.793329999999372e-4,920073,1745,null,null,null,null,null,null,null,null],[2.866850118152797e-4,2.866869999991195e-4,944262,1832,null,null,null,null,null,null,null,null],[3.0124204931780696e-4,3.0124399999920115e-4,992178,1924,null,null,null,null,null,null,null,null],[3.1627999851480126e-4,3.1628200000000106e-4,1041744,2020,null,null,null,null,null,null,null,null],[3.3191900001838803e-4,3.3192100000078995e-4,1093257,2121,null,null,null,null,null,null,null,null],[3.4848996438086033e-4,3.484930000006159e-4,1147872,2227,null,null,null,null,null,null,null,null],[3.660930087789893e-4,3.6611500000027775e-4,1205919,2339,null,null,null,null,null,null,null,null],[3.870819928124547e-4,3.870950000006701e-4,1274988,2456,null,null,null,null,null,null,null,null],[4.223980358801782e-4,4.2244099999955154e-4,1391445,2579,null,null,null,null,null,null,null,null],[4.4336699647828937e-4,4.434399999997396e-4,1460778,2708,null,null,null,null,null,null,null,null],[4.481659852899611e-4,4.4819999999923255e-4,1476288,2843,null,null,null,null,null,null,null,null],[4.688040353357792e-4,4.688379999997494e-4,1544268,2985,null,null,null,null,null,null,null,null],[4.916980396956205e-4,4.917200000011945e-4,1619739,3134,null,null,null,null,null,null,null,null],[5.163030000403523e-4,5.163269999997055e-4,1700688,3291,null,null,null,null,null,null,null,null],[5.407779826782644e-4,5.40793000000761e-4,1781241,3456,null,null,null,null,null,null,null,null],[5.599639844149351e-4,5.599889999992058e-4,1844502,3629,null,null,null,null,null,null,null,null],[5.857429932802916e-4,5.857670000004589e-4,1929477,3810,null,null,null,null,null,null,null,null],[6.276000058278441e-4,6.276349999989606e-4,2067318,4001,null,null,null,null,null,null,null,null],[6.588390097022057e-4,6.588640000000368e-4,2170179,4201,null,null,null,null,null,null,null,null],[6.813709624111652e-4,6.813960000009445e-4,2244429,4411,null,null,null,null,null,null,null,null],[7.299010176211596e-4,7.299560000006977e-4,2404446,4631,null,null,null,null,null,null,null,null],[7.681730203330517e-4,7.683580000001911e-4,2531595,4863,null,null,null,null,null,null,null,null],[7.419140310958028e-4,7.420499999994945e-4,2444112,5106,null,null,null,null,null,null,null,null],[7.965550175867975e-4,7.968119999990364e-4,2625249,5361,null,null,null,null,null,null,null,null],[8.496150257997215e-4,8.497310000006308e-4,2799060,5629,null,null,null,null,null,null,null,null],[8.452670299448073e-4,8.453429999999429e-4,2784606,5911,null,null,null,null,null,null,null,null],[8.78868973813951e-4,8.794469999990895e-4,2898357,6207,null,null,null,null,null,null,null,null],[9.246249683201313e-4,9.246819999990663e-4,3045834,6517,null,null,null,null,null,null,null,null],[9.734359919093549e-4,9.735030000008749e-4,3206676,6843,null,null,null,null,null,null,null,null],[9.98673029243946e-4,9.987200000001195e-4,3289803,7185,null,null,null,null,null,null,null,null],[1.0826190118677914e-3,1.0828679999992374e-3,3566805,7544,null,null,null,null,null,null,null,null],[1.1323909857310355e-3,1.1324800000007684e-3,3730320,7921,null,null,null,null,null,null,null,null],[1.1668360093608499e-3,1.1669049999998293e-3,3843774,8318,null,null,null,null,null,null,null,null],[1.2142250197939575e-3,1.2142930000003105e-3,3999765,8733,null,null,null,null,null,null,null,null],[1.2770619941875339e-3,1.277151000000032e-3,4206807,9170,null,null,null,null,null,null,null,null],[1.33850600104779e-3,1.3385659999993749e-3,4409097,9629,null,null,null,null,null,null,null,null],[1.4171929797157645e-3,1.417253000001395e-3,4668345,10110,null,null,null,null,null,null,null,null],[1.521287951618433e-3,1.5213890000005392e-3,5011380,10616,null,null,null,null,null,null,null,null],[1.5573640121147037e-3,1.5574259999997508e-3,5130015,11146,null,null,null,null,null,null,null,null],[1.6300400020554662e-3,1.6301229999999833e-3,5369397,11704,null,null,null,null,null,null,null,null],[1.7080659745261073e-3,1.70814800000052e-3,5626434,12289,null,null,null,null,null,null,null,null],[1.7935250070877373e-3,1.793608000001612e-3,5907957,12903,null,null,null,null,null,null,null,null],[1.934778003487736e-3,1.9348819999986944e-3,6373488,13549,null,null,null,null,null,null,null,null],[2.0268099615350366e-3,2.0275269999991963e-3,6689100,14226,null,null,null,null,null,null,null,null],[2.2565789986401796e-3,2.256836000000817e-3,7433943,14937,null,null,null,null,null,null,null,null],[2.209179976489395e-3,2.209235999998782e-3,7276863,15684,null,null,null,null,null,null,null,null],[2.3631879594177008e-3,2.3632960000004033e-3,7784502,16469,null,null,null,null,null,null,null,null],[2.437244984321296e-3,2.437343000000425e-3,8028339,17292,null,null,null,null,null,null,null,null],[2.5413199909962714e-3,2.5414189999999337e-3,8371209,18157,null,null,null,null,null,null,null,null],[2.7044540038332343e-3,2.7045539999992485e-3,8908548,19065,null,null,null,null,null,null,null,null],[2.9367770184762776e-3,2.9371799999999837e-3,9675171,20018,null,null,null,null,null,null,null,null],[2.9696680139750242e-3,2.9697610000010144e-3,9781926,21019,null,null,null,null,null,null,null,null],[3.1307890312746167e-3,3.1308820000006676e-3,10312797,22070,null,null,null,null,null,null,null,null],[3.323348006233573e-3,3.323604000000202e-3,10947750,23173,null,null,null,null,null,null,null,null],[3.4292659838683903e-3,3.429390999999171e-3,11296131,24332,null,null,null,null,null,null,null,null],[3.641621966380626e-3,3.641768999999684e-3,11995698,25549,null,null,null,null,null,null,null,null],[3.7911100080236793e-3,3.7912190000000123e-3,12487893,26826,null,null,null,null,null,null,null,null],[4.059530969243497e-3,4.059792000001394e-3,13372887,28167,null,null,null,null,null,null,null,null],[4.1613809880800545e-3,4.16151199999959e-3,13707474,29576,null,null,null,null,null,null,null,null],[4.3987639946863055e-3,4.398866000000723e-3,14489310,31054,null,null,null,null,null,null,null,null],[4.597544961143285e-3,4.597678999999744e-3,15144195,32607,null,null,null,null,null,null,null,null],[4.930394992697984e-3,4.930672000000413e-3,16241313,34238,null,null,null,null,null,null,null,null],[5.076997971627861e-3,5.077186000001177e-3,16723476,35950,null,null,null,null,null,null,null,null],[5.328618048224598e-3,5.328768000000039e-3,17552271,37747,null,null,null,null,null,null,null,null],[5.565528990700841e-3,5.565640999998678e-3,18332424,39634,null,null,null,null,null,null,null,null],[5.864278005901724e-3,5.864421000000064e-3,19316616,41616,null,null,null,null,null,null,null,null],[6.235509004909545e-3,6.235786000001298e-3,20540091,43697,null,null,null,null,null,null,null,null],[6.58121396554634e-3,6.581472999998894e-3,21678591,45882,null,null,null,null,null,null,null,null],[6.759385985787958e-3,6.759487000000064e-3,22264671,48176,null,null,null,null,null,null,null,null],[7.168840034864843e-3,7.169102999998955e-3,23614173,50585,null,null,null,null,null,null,null,null],[7.5189220369793475e-3,7.519077999999624e-3,24766698,53114,null,null,null,null,null,null,null,null],[8.178182994015515e-3,8.178794000000877e-3,26940111,55770,null,null,null,null,null,null,null,null],[8.314376987982541e-3,8.314609000001028e-3,27387294,58558,null,null,null,null,null,null,null,null],[8.698303019627929e-3,8.698587999999674e-3,28652019,61486,null,null,null,null,null,null,null,null],[9.058744995854795e-3,9.059032999999772e-3,29839161,64561,null,null,null,null,null,null,null,null],[9.52253898140043e-3,9.522830999999954e-3,31366962,67789,null,null,null,null,null,null,null,null],[9.89998399745673e-3,9.900177000000454e-3,32609478,71178,null,null,null,null,null,null,null,null],[1.0492128029000014e-2,1.0492377000000275e-2,34560306,74737,null,null,null,null,null,null,null,null],[1.0929913958534598e-2,1.0930115999999046e-2,36002142,78474,null,null,null,null,null,null,null,null],[1.146121503552422e-2,1.1461411000000865e-2,37752099,82398,null,null,null,null,null,null,null,null],[1.2112280004657805e-2,1.2112450000000052e-2,39896472,86518,null,null,null,null,null,null,null,null],[1.2712750001810491e-2,1.2712913999999742e-2,41874228,90843,null,null,null,null,null,null,null,null],[1.3264138018712401e-2,1.3264305999999948e-2,43690482,95386,null,null,null,null,null,null,null,null],[1.3926793995779008e-2,1.3926956999998907e-2,45873135,100155,null,null,null,null,null,null,null,null],[1.4672403980512172e-2,1.4672593000000234e-2,48329127,105163,null,null,null,null,null,null,null,null],[1.5414868015795946e-2,1.5415223999999839e-2,50775285,110421,null,null,null,null,null,null,null,null],[1.6251509019639343e-2,1.6251780999999355e-2,53531148,115942,null,null,null,null,null,null,null,null],[1.7377498967107385e-2,1.7377938999999287e-2,57240315,121739,null,null,null,null,null,null,null,null],[1.8077393993735313e-2,1.80777489999997e-2,59545299,127826,null,null,null,null,null,null,null,null],[1.9001688982825726e-2,1.9002050000000992e-2,62589846,134217,null,null,null,null,null,null,null,null],[2.0112009020522237e-2,2.0112808999998677e-2,66249249,140928,null,null,null,null,null,null,null,null],[2.1213764033745974e-2,2.1214171999998754e-2,69876279,147975,null,null,null,null,null,null,null,null],[2.186688204528764e-2,2.186726400000083e-2,72027252,155373,null,null,null,null,null,null,null,null],[2.3046952963341027e-2,2.3047374000000787e-2,75914454,163142,null,null,null,null,null,null,null,null],[2.4132738006301224e-2,2.4133126999998922e-2,79490697,171299,null,null,null,null,null,null,null,null],[2.5351941003464162e-2,2.5352511000001243e-2,83507028,179864,null,null,null,null,null,null,null,null],[2.6376353052910417e-2,2.637675799999961e-2,86880750,188858,null,null,null,null,null,null,null,null],[2.770113304723054e-2,2.7701568999999537e-2,91244340,198300,null,null,null,null,null,null,null,null],[2.8953999979421496e-2,2.895427500000025e-2,95370363,208215,null,null,null,null,null,null,null,null],[3.0401739990338683e-2,3.040201600000003e-2,100138830,218626,null,null,null,null,null,null,null,null],[3.19638240034692e-2,3.1964119999999596e-2,105284190,229558,null,null,null,null,null,null,null,null],[3.3782574988435954e-2,3.378307599999886e-2,111275967,241036,null,null,null,null,null,null,null,null],[3.525351901771501e-2,3.525393000000143e-2,116120334,253087,null,null,null,null,null,null,null,null],[3.7300786993000656e-2,3.73013240000013e-2,122864412,265742,null,null,null,null,null,null,null,null],[3.759087796788663e-2,3.7591387000000864e-2,123819795,279029,null,null,null,null,null,null,null,null],[3.862346400273964e-2,3.862401000000126e-2,127221039,292980,null,null,null,null,null,null,null,null],[4.307731002336368e-2,4.3077870000001184e-2,141891255,307629,null,null,null,null,null,null,null,null],[4.542434704490006e-2,4.542491400000159e-2,149621967,323011,null,null,null,null,null,null,null,null],[4.753767797956243e-2,4.75382720000006e-2,156583053,339161,null,null,null,null,null,null,null,null],[4.954897001152858e-2,4.954939799999991e-2,163207044,356119,null,null,null,null,null,null,null,null],[5.20598019938916e-2,5.206032899999968e-2,171477669,373925,null,null,null,null,null,null,null,null],[5.459958896972239e-2,5.460005399999979e-2,179843037,392622,null,null,null,null,null,null,null,null],[5.7404200022574514e-2,5.740471600000063e-2,189081090,412253,null,null,null,null,null,null,null,null],[6.0218719008844346e-2,6.021925599999989e-2,198352407,432866,null,null,null,null,null,null,null,null],[6.350560899591073e-2,6.350631100000115e-2,209178882,454509,null,null,null,null,null,null,null,null],[6.640846299706027e-2,6.640907600000112e-2,218739807,477234,null,null,null,null,null,null,null,null],[6.96786810294725e-2,6.967925899999905e-2,229511172,501096,null,null,null,null,null,null,null,null],[7.32172720017843e-2,7.321790399999983e-2,241166871,526151,null,null,null,null,null,null,null,null],[7.690582104260102e-2,7.690653100000056e-2,253316745,552458,null,null,null,null,null,null,null,null],[7.774039695505053e-2,7.774103500000074e-2,256065084,580081,null,null,null,null,null,null,null,null],[7.948168396251276e-2,7.948235499999967e-2,261800880,609086,null,null,null,null,null,null,null,null],[8.478159899823368e-2,8.478237899999996e-2,279258309,639540,null,null,null,null,null,null,null,null],[9.367603802820668e-2,9.367699300000076e-2,308556006,671517,null,null,null,null,null,null,null,null],[9.834435401717201e-2,9.834532500000037e-2,323932356,705093,null,null,null,null,null,null,null,null],[0.10421636595856398,0.10421737899999961,343273854,740347,null,null,null,null,null,null,null,null],[0.11002359597478062,0.11002625599999938,362407617,777365,null,null,null,null,null,null,null,null],[0.11397561599733308,0.11397716400000135,375421068,816233,null,null,null,null,null,null,null,null],[0.121198587003164,0.12118870699999817,399217038,857045,null,null,null,null,null,null,null,null],[0.12627688801148906,0.1262784159999999,415945926,899897,null,null,null,null,null,null,null,null],[0.13407648500287905,0.1340789030000007,441632400,944892,null,null,null,null,null,null,null,null],[0.1398223610012792,0.13982398000000096,460556316,992136,null,null,null,null,null,null,null,null],[0.13869051000801846,0.13868671,456826590,1041743,null,null,null,null,null,null,null,null],[0.14371057297103107,0.14371202900000135,473362329,1093831,null,null,null,null,null,null,null,null],[0.15108612802578136,0.15108824100000007,497658249,1148522,null,null,null,null,null,null,null,null],[0.15961019496899098,0.15960696099999971,525736101,1205948,null,null,null,null,null,null,null,null],[0.1666181159671396,0.16661959300000007,548815641,1266246,null,null,null,null,null,null,null,null],[0.17424910800764337,0.17425046000000144,573949959,1329558,null,null,null,null,null,null,null,null],[0.18271611799718812,0.18271773500000066,601840206,1396036,null,null,null,null,null,null,null,null],[0.2019869289943017,0.20198508100000012,665316927,1465838,null,null,null,null,null,null,null,null],[0.21409867703914642,0.2141004070000001,705208746,1539130,null,null,null,null,null,null,null,null],[0.22524451499339193,0.2252370500000005,741921675,1616086,null,null,null,null,null,null,null,null],[0.23609086294891313,0.23609268499999914,777647145,1696890,null,null,null,null,null,null,null,null]],"reportName":"fib/9","reportNumber":2,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}},{"reportAnalysis":{"anMean":{"estError":{"confIntCL":5.0e-2,"confIntLDX":6.972724273344782e-9,"confIntUDX":5.576911944060881e-9},"estPoint":4.226666874091772e-7},"anOutlierVar":{"ovDesc":"a severe","ovEffect":"Severe","ovFraction":0.6900424181913867},"anRegress":[{"regCoeffs":{"iters":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.0901821438900934e-8,"confIntUDX":9.124065800415636e-9},"estPoint":4.2157588416047557e-7},"y":{"estError":{"confIntCL":5.0e-2,"confIntLDX":1.8343236679209873e-4,"confIntUDX":2.7526673522396795e-4},"estPoint":3.963274344893427e-5}},"regRSquare":{"estError":{"confIntCL":5.0e-2,"confIntLDX":5.05381984497677e-4,"confIntUDX":9.685035127019459e-4},"estPoint":0.9966606983180731},"regResponder":"time"}],"anStdDev":{"estError":{"confIntCL":5.0e-2,"confIntLDX":2.3897342214180667e-9,"confIntUDX":1.3569897101299865e-9},"estPoint":2.1516391528570672e-8}},"reportKDEs":[{"kdePDF":[4857.110325267976,21598.18597236797,94230.18728354711,351191.2822281225,1114867.5462024566,3019174.6133149876,6991040.225760366,1.388931566301834e7,2.380238056020613e7,3.548189445714173e7,4.66152044723692e7,5.503073001124021e7,5.988933372700311e7,6.174520366407014e7,6.151450868640542e7,5.952731071179665e7,5.555700602186013e7,4.95198905142526e7,4.1961872799638115e7,3.392343594874278e7,2.643023637503173e7,2.0051615361233085e7,1.4815792095918287e7,1.0484358973847957e7,6900735.918659116,4097004.5543140555,2141194.7876034337,968914.4658673848,375758.2001148299,124135.43520735284,34811.60553730431,8270.219934552764,1662.5348818836544,282.61461118898933,40.61191060331729,4.974986801162251,1.0117194283255995,4.971575694342204,40.56463532559086,282.0615613507969,1657.0537523715332,8224.171534698986,34483.41732764665,122149.30724718176,365539.48059410416,924145.0560895158,1973824.6602569704,3561554.288570179,5429166.225426622,6991804.570512427,7606905.038862844,6991804.573714361,5429166.269278959,3561554.7943250467,1973829.5879690729,924185.617512065,365821.5419566735,123806.36098921977,42707.588861864635,42707.58886197547,123806.36098912539,365821.54195675766,924185.617511963,1973829.587969148,3561554.7943249256,5429166.269279046,6991804.573714242,7606905.038862965,6991804.57051231,5429166.225426751,3561554.288570053,1973824.660257112,924145.0560893771,365539.4805942604,122149.30724704191,34483.4173278142,8224.171534081606,1657.0537421739575,282.0613623681876,40.561423209173185,4.9277222336178435,0.5059549074105679,4.708654940848701e-2,4.748620787333499e-2,0.5128288423371777,5.0228801851494245,41.67733822534036,293.158015309595,1750.7056217098207,8895.755373162627,38581.35835601203,143464.60620844323,460259.7765587267,1284727.2251765893,3153611.2926078807,6892222.617010959,1.3578926779419497e7,2.4364081886950802e7,4.004969259419271e7,6.039980678789595e7,8.3453924284074e7,1.05459526031231e8,1.2187691925845402e8,1.2909516492699948e8,1.25799878236897e8,1.1319504542265898e8,9.423202998092853e7,7.257167046857736e7,5.175203980536676e7,3.455123350120077e7,2.2465014145494286e7,1.5470650280869197e7,1.2326373603162467e7,1.134519816830013e7,1.1168634318278806e7,1.1044227465206923e7,1.0601781383625878e7,9591559.685330069,7918022.452445185,5795044.309515921,3683750.7034307593,2008313.6500622493,932369.7905211367,367196.6258736365,122431.87781820631,34528.90687170118,8269.663892070705,1939.6647127149931],"kdeType":"time","kdeValues":[3.8703445261938077e-7,3.87539246696559e-7,3.880440407737372e-7,3.8854883485091535e-7,3.8905362892809356e-7,3.8955842300527177e-7,3.9006321708245e-7,3.9056801115962814e-7,3.9107280523680636e-7,3.9157759931398457e-7,3.920823933911628e-7,3.92587187468341e-7,3.9309198154551915e-7,3.9359677562269736e-7,3.9410156969987557e-7,3.946063637770538e-7,3.9511115785423194e-7,3.9561595193141016e-7,3.9612074600858837e-7,3.966255400857666e-7,3.971303341629448e-7,3.9763512824012295e-7,3.9813992231730116e-7,3.9864471639447937e-7,3.991495104716576e-7,3.9965430454883574e-7,4.0015909862601396e-7,4.0066389270319217e-7,4.011686867803704e-7,4.016734808575486e-7,4.0217827493472675e-7,4.0268306901190496e-7,4.0318786308908317e-7,4.036926571662614e-7,4.0419745124343954e-7,4.0470224532061775e-7,4.0520703939779597e-7,4.057118334749742e-7,4.062166275521524e-7,4.0672142162933055e-7,4.0722621570650876e-7,4.0773100978368697e-7,4.082358038608652e-7,4.0874059793804334e-7,4.0924539201522155e-7,4.0975018609239977e-7,4.10254980169578e-7,4.107597742467562e-7,4.1126456832393435e-7,4.1176936240111256e-7,4.1227415647829077e-7,4.12778950555469e-7,4.1328374463264714e-7,4.1378853870982535e-7,4.1429333278700357e-7,4.147981268641818e-7,4.1530292094136e-7,4.1580771501853815e-7,4.1631250909571636e-7,4.1681730317289457e-7,4.173220972500728e-7,4.1782689132725094e-7,4.1833168540442915e-7,4.1883647948160737e-7,4.193412735587856e-7,4.198460676359638e-7,4.2035086171314195e-7,4.2085565579032016e-7,4.2136044986749837e-7,4.218652439446766e-7,4.2237003802185474e-7,4.2287483209903295e-7,4.2337962617621117e-7,4.238844202533894e-7,4.243892143305676e-7,4.248940084077458e-7,4.2539880248492396e-7,4.2590359656210217e-7,4.264083906392804e-7,4.269131847164586e-7,4.2741797879363675e-7,4.2792277287081497e-7,4.284275669479932e-7,4.289323610251714e-7,4.294371551023496e-7,4.2994194917952776e-7,4.3044674325670597e-7,4.309515373338842e-7,4.314563314110624e-7,4.3196112548824055e-7,4.3246591956541877e-7,4.32970713642597e-7,4.334755077197752e-7,4.339803017969534e-7,4.3448509587413156e-7,4.3498988995130977e-7,4.35494684028488e-7,4.359994781056662e-7,4.3650427218284435e-7,4.3700906626002256e-7,4.375138603372008e-7,4.38018654414379e-7,4.385234484915572e-7,4.3902824256873536e-7,4.3953303664591357e-7,4.400378307230918e-7,4.4054262480027e-7,4.4104741887744815e-7,4.4155221295462636e-7,4.420570070318046e-7,4.425618011089828e-7,4.43066595186161e-7,4.4357138926333916e-7,4.4407618334051737e-7,4.445809774176956e-7,4.450857714948738e-7,4.4559056557205195e-7,4.4609535964923016e-7,4.466001537264084e-7,4.471049478035866e-7,4.476097418807648e-7,4.4811453595794296e-7,4.4861933003512117e-7,4.491241241122994e-7,4.496289181894776e-7,4.5013371226665575e-7,4.5063850634383396e-7,4.511433004210122e-7]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","peakMbAllocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportMeasured":[[1.734006218612194e-6,1.5030000000137989e-6,4191,1,null,null,null,null,null,null,null,null],[1.2620002962648869e-6,1.241999999734844e-6,3993,2,null,null,null,null,null,null,null,null],[1.6329577192664146e-6,1.6239999993672427e-6,5280,3,null,null,null,null,null,null,null,null],[2.073997166007757e-6,2.053000001112082e-6,6666,4,null,null,null,null,null,null,null,null],[2.5249901227653027e-6,2.504999999430879e-6,8184,5,null,null,null,null,null,null,null,null],[2.974993549287319e-6,2.955999999443293e-6,9636,6,null,null,null,null,null,null,null,null],[3.427034243941307e-6,3.405999999372966e-6,11187,7,null,null,null,null,null,null,null,null],[3.88704938814044e-6,3.858000001244477e-6,12672,8,null,null,null,null,null,null,null,null],[4.338973667472601e-6,4.30800000117415e-6,14157,9,null,null,null,null,null,null,null,null],[4.7889770939946175e-6,4.778999999288658e-6,15708,10,null,null,null,null,null,null,null,null],[5.23001654073596e-6,5.219000000167284e-6,17160,11,null,null,null,null,null,null,null,null],[5.691021215170622e-6,5.6709999984860815e-6,18612,12,null,null,null,null,null,null,null,null],[6.152025889605284e-6,6.142000000153303e-6,20130,13,null,null,null,null,null,null,null,null],[6.613030564039946e-6,6.593000000165716e-6,21648,14,null,null,null,null,null,null,null,null],[7.062975782901049e-6,7.054000001005534e-6,23133,15,null,null,null,null,null,null,null,null],[7.503957021981478e-6,7.4840000010567564e-6,24585,16,null,null,null,null,null,null,null,null],[7.983995601534843e-6,7.964999999998668e-6,26169,17,null,null,null,null,null,null,null,null],[8.425966370850801e-6,8.416000000011081e-6,27621,18,null,null,null,null,null,null,null,null],[8.867005817592144e-6,8.846000000062304e-6,29106,19,null,null,null,null,null,null,null,null],[9.328010492026806e-6,9.307000000902121e-6,30591,20,null,null,null,null,null,null,null,null],[9.807990863919258e-6,9.78900000170313e-6,32175,21,null,null,null,null,null,null,null,null],[1.0229006875306368e-5,1.0220000000060736e-5,33594,22,null,null,null,null,null,null,null,null],[1.0689953342080116e-5,1.0679999999041456e-5,35112,23,null,null,null,null,null,null,null,null],[1.1581985745579004e-5,1.1572000000015237e-5,38049,25,null,null,null,null,null,null,null,null],[1.206202432513237e-5,1.204199999982336e-5,39600,26,null,null,null,null,null,null,null,null],[1.2492993846535683e-5,1.2483000000784727e-5,41052,27,null,null,null,null,null,null,null,null],[1.2953998520970345e-5,1.2943999999848188e-5,42603,28,null,null,null,null,null,null,null,null],[1.3845972716808319e-5,1.3836000000821969e-5,45507,30,null,null,null,null,null,null,null,null],[1.4327000826597214e-5,1.4296999999885429e-5,47025,31,null,null,null,null,null,null,null,null],[1.521798549219966e-5,1.520800000065492e-5,49995,33,null,null,null,null,null,null,null,null],[1.613004133105278e-5,1.610999999890339e-5,53031,35,null,null,null,null,null,null,null,null],[1.6581034287810326e-5,1.6570999999743208e-5,54516,36,null,null,null,null,null,null,null,null],[1.750304363667965e-5,1.748300000059544e-5,57519,38,null,null,null,null,null,null,null,null],[1.8413993529975414e-5,1.839400000136493e-5,60489,40,null,null,null,null,null,null,null,null],[1.931603765115142e-5,1.9306000000440804e-5,63525,42,null,null,null,null,null,null,null,null],[2.0198000129312277e-5,2.018700000050444e-5,66429,44,null,null,null,null,null,null,null,null],[2.159102587029338e-5,2.1560000000420132e-5,70983,47,null,null,null,null,null,null,null,null],[2.251198748126626e-5,2.2472000001272363e-5,73920,49,null,null,null,null,null,null,null,null],[2.3833999875932932e-5,2.3823999999450507e-5,78408,52,null,null,null,null,null,null,null,null],[2.4746055714786053e-5,2.473700000038548e-5,81411,54,null,null,null,null,null,null,null,null],[2.611899981275201e-5,2.610900000021843e-5,85899,57,null,null,null,null,null,null,null,null],[2.7481000870466232e-5,2.7450999999345527e-5,90387,60,null,null,null,null,null,null,null,null],[2.8843991458415985e-5,2.884399999913967e-5,94875,63,null,null,null,null,null,null,null,null],[3.019697032868862e-5,3.0187000000125863e-5,99330,66,null,null,null,null,null,null,null,null],[3.154895966872573e-5,3.1540000000163104e-5,103851,69,null,null,null,null,null,null,null,null],[3.339204704388976e-5,3.337300000083587e-5,109857,73,null,null,null,null,null,null,null,null],[3.4744967706501484e-5,3.473499999984142e-5,114378,76,null,null,null,null,null,null,null,null],[3.656797343865037e-5,3.654799999885938e-5,120318,80,null,null,null,null,null,null,null,null],[3.8372003473341465e-5,3.836199999973644e-5,126291,84,null,null,null,null,null,null,null,null],[4.070601426064968e-5,4.0686000000178524e-5,133947,89,null,null,null,null,null,null,null,null],[4.2478961404412985e-5,4.246900000026699e-5,139854,93,null,null,null,null,null,null,null,null],[4.47329948656261e-5,4.4724000000329056e-5,147246,98,null,null,null,null,null,null,null,null],[4.702701698988676e-5,4.7018000000065285e-5,154803,103,null,null,null,null,null,null,null,null],[4.930200520902872e-5,4.9291999999923064e-5,162261,108,null,null,null,null,null,null,null,null],[5.092500941827893e-5,5.090500000015652e-5,167574,113,null,null,null,null,null,null,null,null],[5.279801553115249e-5,5.2767999999758786e-5,173745,119,null,null,null,null,null,null,null,null],[5.543295992538333e-5,5.5414000000197916e-5,182490,125,null,null,null,null,null,null,null,null],[5.808897549286485e-5,5.805899999877795e-5,191202,131,null,null,null,null,null,null,null,null],[6.118498276919127e-5,6.116399999989142e-5,201366,138,null,null,null,null,null,null,null,null],[6.380898412317038e-5,6.37989999994204e-5,210078,144,null,null,null,null,null,null,null,null],[6.734603084623814e-5,6.733600000075057e-5,221727,152,null,null,null,null,null,null,null,null],[7.044099038466811e-5,7.042200000029197e-5,231858,159,null,null,null,null,null,null,null,null],[7.396697765216231e-5,7.395799999976305e-5,243507,167,null,null,null,null,null,null,null,null],[7.79549591243267e-5,7.793600000027823e-5,256674,176,null,null,null,null,null,null,null,null],[8.420698577538133e-5,8.420800000052964e-5,277365,185,null,null,null,null,null,null,null,null],[8.589000208303332e-5,8.58710000013474e-5,282744,194,null,null,null,null,null,null,null,null],[9.02980100363493e-5,9.027900000013744e-5,297297,204,null,null,null,null,null,null,null,null],[9.470595978200436e-5,9.469700000153125e-5,311850,214,null,null,null,null,null,null,null,null],[9.912502719089389e-5,9.910600000040404e-5,326403,224,null,null,null,null,null,null,null,null],[1.0441499762237072e-4,1.0441599999921891e-4,343827,236,null,null,null,null,null,null,null,null],[1.0927300900220871e-4,1.0924500000086823e-4,359766,247,null,null,null,null,null,null,null,null],[1.1504505528137088e-4,1.1502599999957397e-4,378807,260,null,null,null,null,null,null,null,null],[1.207650057040155e-4,1.2073600000128692e-4,397650,273,null,null,null,null,null,null,null,null],[1.269369968213141e-4,1.2691799999942077e-4,417978,287,null,null,null,null,null,null,null,null],[1.331180101260543e-4,1.330890000001972e-4,438306,301,null,null,null,null,null,null,null,null],[1.3974105240777135e-4,1.3973199999917085e-4,460185,316,null,null,null,null,null,null,null,null],[1.4679401647299528e-4,1.467849999983173e-4,483384,332,null,null,null,null,null,null,null,null],[1.5387701569125056e-4,1.5386799999994594e-4,506781,348,null,null,null,null,null,null,null,null],[1.6182195395231247e-4,1.618119999999834e-4,532950,366,null,null,null,null,null,null,null,null],[1.6974599566310644e-4,1.6973800000030792e-4,559053,384,null,null,null,null,null,null,null,null],[1.7814204329624772e-4,1.781229999995304e-4,586641,403,null,null,null,null,null,null,null,null],[1.874089939519763e-4,1.8740099999980941e-4,617199,424,null,null,null,null,null,null,null,null],[1.9669695757329464e-4,1.9667900000008842e-4,647790,445,null,null,null,null,null,null,null,null],[2.0639505237340927e-4,2.063770000013676e-4,679734,467,null,null,null,null,null,null,null,null],[2.1655397722497582e-4,2.165359999999339e-4,713196,490,null,null,null,null,null,null,null,null],[2.2760499268770218e-4,2.2758599999939122e-4,749529,515,null,null,null,null,null,null,null,null],[2.39066022913903e-4,2.3904700000088042e-4,787314,541,null,null,null,null,null,null,null,null],[2.5097798788920045e-4,2.509600000006884e-4,826584,568,null,null,null,null,null,null,null,null],[2.6334100402891636e-4,2.633330000012535e-4,867306,596,null,null,null,null,null,null,null,null],[2.7631502598524094e-4,2.7632799999999236e-4,910173,626,null,null,null,null,null,null,null,null],[2.877869992516935e-4,2.8777900000065415e-4,947826,657,null,null,null,null,null,null,null,null],[3.0225299997255206e-4,3.02256000001222e-4,995577,690,null,null,null,null,null,null,null,null],[3.195960307493806e-4,3.196079999998602e-4,1052832,725,null,null,null,null,null,null,null,null],[3.3249997068196535e-4,3.3251300000003425e-4,1095204,761,null,null,null,null,null,null,null,null],[3.480389714241028e-4,3.4802200000072503e-4,1146288,799,null,null,null,null,null,null,null,null],[3.654619795270264e-4,3.6545399999887707e-4,1203708,839,null,null,null,null,null,null,null,null],[3.838359843939543e-4,3.8382800000036355e-4,1264197,881,null,null,null,null,null,null,null,null],[4.0305202128365636e-4,4.0305499999959693e-4,1327557,925,null,null,null,null,null,null,null,null],[4.2343896348029375e-4,4.2343199999983483e-4,1394613,972,null,null,null,null,null,null,null,null],[4.4421799248084426e-4,4.442119999996663e-4,1463088,1020,null,null,null,null,null,null,null,null],[5.11122983880341e-4,5.113770000004791e-4,1685343,1071,null,null,null,null,null,null,null,null],[5.649129743687809e-4,5.657790000004326e-4,1864863,1125,null,null,null,null,null,null,null,null],[5.288660177029669e-4,5.288500000002472e-4,1741905,1181,null,null,null,null,null,null,null,null],[5.445950082503259e-4,5.445890000004283e-4,1793748,1240,null,null,null,null,null,null,null,null],[5.719070322811604e-4,5.719309999996369e-4,1883739,1302,null,null,null,null,null,null,null,null],[6.003300077281892e-4,6.0035399999947e-4,1977459,1367,null,null,null,null,null,null,null,null],[6.305960123427212e-4,6.305910000001802e-4,2077053,1436,null,null,null,null,null,null,null,null],[6.651509902440012e-4,6.651649999991349e-4,2190936,1507,null,null,null,null,null,null,null,null],[6.952270050533116e-4,6.952319999999901e-4,2289936,1583,null,null,null,null,null,null,null,null],[7.303129532374442e-4,7.303069999995415e-4,2405469,1662,null,null,null,null,null,null,null,null],[7.662390125915408e-4,7.662439999993609e-4,2523840,1745,null,null,null,null,null,null,null,null],[8.012339822016656e-4,8.012699999984108e-4,2639307,1832,null,null,null,null,null,null,null,null],[8.372419979423285e-4,8.372479999998461e-4,2757744,1924,null,null,null,null,null,null,null,null],[8.778069750405848e-4,8.778130000006712e-4,2891295,2020,null,null,null,null,null,null,null,null],[1.0285580065101385e-3,1.0288670000004885e-3,3389529,2121,null,null,null,null,null,null,null,null],[1.006507023703307e-3,1.0065249999993142e-3,3315378,2227,null,null,null,null,null,null,null,null],[1.0589450248517096e-3,1.0589730000010178e-3,3488067,2339,null,null,null,null,null,null,null,null],[1.1090689804404974e-3,1.1090660000014907e-3,3652968,2456,null,null,null,null,null,null,null,null],[1.1725460062734783e-3,1.1739479999999247e-3,3867270,2579,null,null,null,null,null,null,null,null],[1.2398220133036375e-3,1.240453000001196e-3,4086522,2708,null,null,null,null,null,null,null,null],[1.2719820369966328e-3,1.2720109999992957e-3,4190175,2843,null,null,null,null,null,null,null,null],[1.3195210485719144e-3,1.3195699999997146e-3,4346463,2985,null,null,null,null,null,null,null,null],[1.3700150302611291e-3,1.3700359999990752e-3,4512651,3134,null,null,null,null,null,null,null,null],[1.461666019167751e-3,1.4617269999988025e-3,4814667,3291,null,null,null,null,null,null,null,null],[1.5308150323107839e-3,1.5308269999998458e-3,5042235,3456,null,null,null,null,null,null,null,null],[1.584184996318072e-3,1.5842769999991901e-3,5218290,3629,null,null,null,null,null,null,null,null],[1.6983869718387723e-3,1.6986299999999233e-3,5595546,3810,null,null,null,null,null,null,null,null],[1.8204250372946262e-3,1.8203680000006273e-3,5993922,4001,null,null,null,null,null,null,null,null],[1.882841985207051e-3,1.8828849999987796e-3,6201987,4201,null,null,null,null,null,null,null,null],[1.97368097724393e-3,1.9738359999994515e-3,6501792,4411,null,null,null,null,null,null,null,null],[2.050864975899458e-3,2.0509299999993402e-3,6755562,4631,null,null,null,null,null,null,null,null],[2.1352230105549097e-3,2.1352879999998464e-3,7033422,4863,null,null,null,null,null,null,null,null],[2.273850957863033e-3,2.2739280000010353e-3,7489944,5106,null,null,null,null,null,null,null,null],[2.3465660051442683e-3,2.346624000001185e-3,7729425,5361,null,null,null,null,null,null,null,null],[2.458445029333234e-3,2.458483000001621e-3,8097903,5629,null,null,null,null,null,null,null,null],[2.5955300079658628e-3,2.5956100000001925e-3,8549541,5911,null,null,null,null,null,null,null,null],[2.729500993154943e-3,2.7295610000006576e-3,8990619,6207,null,null,null,null,null,null,null,null],[2.8775259852409363e-3,2.877597999999537e-3,9478425,6517,null,null,null,null,null,null,null,null],[3.027426020707935e-3,3.027498999999878e-3,9972138,6843,null,null,null,null,null,null,null,null],[3.1726370216347277e-3,3.1727110000012715e-3,10450374,7185,null,null,null,null,null,null,null,null],[3.291138040367514e-3,3.291232000000477e-3,10840731,7544,null,null,null,null,null,null,null,null],[3.4446140052750707e-3,3.44469000000025e-3,11346159,7921,null,null,null,null,null,null,null,null],[3.6377739743329585e-3,3.6378510000005804e-3,11982597,8318,null,null,null,null,null,null,null,null],[3.830633999314159e-3,3.8307319999990597e-3,12617913,8733,null,null,null,null,null,null,null,null],[4.0053100092336535e-3,4.005399000000409e-3,13193235,9170,null,null,null,null,null,null,null,null],[4.236862005200237e-3,4.236983000000194e-3,13956063,9629,null,null,null,null,null,null,null,null],[4.456611990462989e-3,4.456714999999889e-3,14679555,10110,null,null,null,null,null,null,null,null],[4.697209980804473e-3,4.697315999999674e-3,15472149,10616,null,null,null,null,null,null,null,null],[4.925485991407186e-3,4.925592999999395e-3,16224153,11146,null,null,null,null,null,null,null,null],[5.1727870013564825e-3,5.172885000000349e-3,17038824,11704,null,null,null,null,null,null,null,null],[5.3797230357304215e-3,5.379823000000172e-3,17720307,12289,null,null,null,null,null,null,null,null],[5.697716027498245e-3,5.697818999999882e-3,18767727,12903,null,null,null,null,null,null,null,null],[5.980243033263832e-3,5.98034799999958e-3,19698228,13549,null,null,null,null,null,null,null,null],[6.215341039933264e-3,6.215467999998836e-3,20472804,14226,null,null,null,null,null,null,null,null],[6.516443972941488e-3,6.51655199999901e-3,21464388,14937,null,null,null,null,null,null,null,null],[6.845708005130291e-3,6.8458380000002705e-3,22549131,15684,null,null,null,null,null,null,null,null],[7.189076975919306e-3,7.189211000000029e-3,23680140,16469,null,null,null,null,null,null,null,null],[7.66272097826004e-3,7.6628480000007215e-3,25240248,17292,null,null,null,null,null,null,null,null],[8.039874024689198e-3,8.034735000000737e-3,26482500,18157,null,null,null,null,null,null,null,null],[8.420703990850598e-3,8.420837000000958e-3,27736863,19065,null,null,null,null,null,null,null,null],[8.830268983729184e-3,8.830394000000297e-3,29085771,20018,null,null,null,null,null,null,null,null],[9.308790962677449e-3,9.308940000000376e-3,30662016,21019,null,null,null,null,null,null,null,null],[9.766754985321313e-3,9.766887999999696e-3,32170512,22070,null,null,null,null,null,null,null,null],[1.0183693026192486e-2,1.0183818999999872e-2,33543807,23173,null,null,null,null,null,null,null,null],[1.0633692028932273e-2,1.0633821000000765e-2,35026101,24332,null,null,null,null,null,null,null,null],[1.1242226988542825e-2,1.1242370999999807e-2,37030587,25549,null,null,null,null,null,null,null,null],[1.185463898582384e-2,1.18554280000005e-2,39050022,26826,null,null,null,null,null,null,null,null],[1.2504380021709949e-2,1.250454400000045e-2,41187927,28167,null,null,null,null,null,null,null,null],[1.3187765958718956e-2,1.3187923000000268e-2,43438725,29576,null,null,null,null,null,null,null,null],[1.3616184995044023e-2,1.3616344999999086e-2,44849937,31054,null,null,null,null,null,null,null,null],[1.429392903810367e-2,1.4294064999999634e-2,47082189,32607,null,null,null,null,null,null,null,null],[1.500673801638186e-2,1.500689999999949e-2,49430172,34238,null,null,null,null,null,null,null,null],[1.5821908018551767e-2,1.582210599999989e-2,52115316,35950,null,null,null,null,null,null,null,null],[1.6529787972103804e-2,1.653002099999945e-2,54451188,37747,null,null,null,null,null,null,null,null],[1.7364203988108784e-2,1.736436400000052e-2,57195237,39634,null,null,null,null,null,null,null,null],[1.8206144974101335e-2,1.8206359999998867e-2,59968689,41616,null,null,null,null,null,null,null,null],[1.9180441973730922e-2,1.9172479999999936e-2,63177642,43697,null,null,null,null,null,null,null,null],[2.009375498164445e-2,2.0093963999999076e-2,66186087,45882,null,null,null,null,null,null,null,null],[2.1129538014065474e-2,2.1129743999999562e-2,69597594,48176,null,null,null,null,null,null,null,null],[2.248708897968754e-2,2.248731499999934e-2,74069457,50585,null,null,null,null,null,null,null,null],[2.3606094997376204e-2,2.3606531000002207e-2,77756184,53114,null,null,null,null,null,null,null,null],[2.480761695187539e-2,2.480795099999966e-2,81713907,55770,null,null,null,null,null,null,null,null],[2.590688696363941e-2,2.590717899999717e-2,85333644,58558,null,null,null,null,null,null,null,null],[2.701885998249054e-2,2.701915099999752e-2,88996446,61486,null,null,null,null,null,null,null,null],[2.831632102606818e-2,2.8316561000000462e-2,93269781,64561,null,null,null,null,null,null,null,null],[2.9760804027318954e-2,2.9761075999999775e-2,98027787,67789,null,null,null,null,null,null,null,null],[3.12592190457508e-2,3.125951099999824e-2,102963366,71178,null,null,null,null,null,null,null,null],[3.278847201727331e-2,3.2788775000000214e-2,108000486,74737,null,null,null,null,null,null,null,null],[3.450718603562564e-2,3.4507492000003026e-2,113661537,78474,null,null,null,null,null,null,null,null],[3.6112571018747985e-2,3.6112899000002585e-2,118949556,82398,null,null,null,null,null,null,null,null],[3.792292601428926e-2,3.792329799999905e-2,124912755,86518,null,null,null,null,null,null,null,null],[3.9800018013920635e-2,3.980038299999933e-2,131095437,90843,null,null,null,null,null,null,null,null],[4.19951020157896e-2,4.1995474000000144e-2,138325671,95386,null,null,null,null,null,null,null,null],[4.395701101748273e-2,4.395739699999979e-2,144787896,100155,null,null,null,null,null,null,null,null],[4.60954190348275e-2,4.609192399999884e-2,151831812,105163,null,null,null,null,null,null,null,null],[4.833476495696232e-2,4.83351540000001e-2,159207576,110421,null,null,null,null,null,null,null,null],[5.059339804574847e-2,5.0593822999999816e-2,166647096,115942,null,null,null,null,null,null,null,null],[5.364891601493582e-2,5.364955499999979e-2,176712525,121739,null,null,null,null,null,null,null,null],[5.605629499768838e-2,5.605679199999969e-2,184641138,127826,null,null,null,null,null,null,null,null],[5.8864302991423756e-2,5.8864809999999324e-2,193890312,134217,null,null,null,null,null,null,null,null],[6.2030026980210096e-2,6.203066800000201e-2,204318213,140928,null,null,null,null,null,null,null,null],[6.498762301634997e-2,6.498815499999822e-2,214059516,147975,null,null,null,null,null,null,null,null],[6.824409600812942e-2,6.824202800000023e-2,224785869,155373,null,null,null,null,null,null,null,null],[7.13241709745489e-2,7.132474999999872e-2,234931059,163142,null,null,null,null,null,null,null,null],[7.524762797402218e-2,7.524829699999813e-2,247854618,171299,null,null,null,null,null,null,null,null],[7.866603299044073e-2,7.866668699999835e-2,259114152,179864,null,null,null,null,null,null,null,null],[7.78742769616656e-2,7.787506500000063e-2,256507053,188858,null,null,null,null,null,null,null,null],[7.825527800014243e-2,7.82560580000009e-2,257761878,198300,null,null,null,null,null,null,null,null],[8.179860602831468e-2,8.179931299999765e-2,269432361,208215,null,null,null,null,null,null,null,null],[8.625966601539403e-2,8.626036599999765e-2,284126370,218626,null,null,null,null,null,null,null,null],[9.022438997635618e-2,9.022524899999951e-2,297186219,229558,null,null,null,null,null,null,null,null],[9.546850004699081e-2,9.546942900000133e-2,314459541,241036,null,null,null,null,null,null,null,null],[9.989500499796122e-2,9.989594800000035e-2,329039766,253087,null,null,null,null,null,null,null,null],[0.10462252300931141,0.10462353000000135,344611641,265742,null,null,null,null,null,null,null,null],[0.1095868709962815,0.10958775499999973,360962613,279029,null,null,null,null,null,null,null,null],[0.11499033903237432,0.11499130300000004,378760998,292980,null,null,null,null,null,null,null,null],[0.12070650001987815,0.12070745600000166,397588884,307629,null,null,null,null,null,null,null,null],[0.12716227996861562,0.12716331399999703,418853358,323011,null,null,null,null,null,null,null,null],[0.13425873505184427,0.13425995100000065,442228875,339161,null,null,null,null,null,null,null,null],[0.14080686698434874,0.14080807199999867,463796949,356119,null,null,null,null,null,null,null,null],[0.14889366901479661,0.1488956960000003,490437915,373925,null,null,null,null,null,null,null,null],[0.15581089997431263,0.15581319900000068,513221610,392622,null,null,null,null,null,null,null,null],[0.17354262998560444,0.17354564099999692,571628805,412253,null,null,null,null,null,null,null,null],[0.19113452796591446,0.19113642800000008,629569512,432866,null,null,null,null,null,null,null,null],[0.2016421360312961,0.20164449399999995,664181496,454509,null,null,null,null,null,null,null,null],[0.21275134501047432,0.21275311400000163,700771137,477234,null,null,null,null,null,null,null,null],[0.22062326601007953,0.22062496299999879,726699303,501096,null,null,null,null,null,null,null,null],[0.23095548601122573,0.23095728899999912,760732170,526151,null,null,null,null,null,null,null,null],[0.243025005038362,0.24302704999999847,800488161,552458,null,null,null,null,null,null,null,null]],"reportName":"fib/11","reportNumber":3,"reportOutliers":{"highMild":0,"highSevere":0,"lowMild":0,"lowSevere":0,"samplesSeen":43}}]+ </script>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Motivation_and_definition">groups left-to-right</a>, alphabetically</li>+ <li><em>colexical</em> order sorts <a href="https://en.wikipedia.org/wiki/Lexicographic_order#Colexicographic_order">groups right-to-left</a>, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>
+ www/report.html view
@@ -0,0 +1,1145 @@+<!doctype html>+<html>+<head>+ <meta charset="utf-8"/>+ <title>criterion report</title>+ <script>+ /*!+ * Chart.js v2.9.4+ * https://www.chartjs.org+ * (c) 2020 Chart.js Contributors+ * Released under the MIT License+ */+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _=y;function k(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}var w,M={noop:function(){},uid:(w=0,function(){return w++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return M.valueOrDefault(M.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(M.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(M.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!M.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(M.isArray(t))return t.map(M.clone);if(M.isObject(t)){for(var e=Object.create(t),n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=M.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){if(k(t)){var a=e[t],r=n[t];M.isObject(a)&&M.isObject(r)?M.merge(a,r,i):e[t]=M.clone(r)}},_mergerIf:function(t,e,n){if(k(t)){var i=e[t],a=n[t];M.isObject(i)&&M.isObject(a)?M.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=M.clone(a))}},merge:function(t,e,n){var i,a,r,o,s,l=M.isArray(e)?e:[e],u=l.length;if(!M.isObject(t))return t;for(i=(n=n||{}).merger||M._merger,a=0;a<u;++a)if(e=l[a],M.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return M.merge(t,e,{merger:M._mergerIf})},extend:Object.assign||function(t){return M.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=M.inherits,t&&M.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},S=M;M.callCallback=M.callback,M.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},M.getValueOrDefault=M.valueOrDefault,M.getValueAtIndexOrDefault=M.valueAtIndexOrDefault;var C={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-A,-I),t.arc(u,l,o,-I,0),t.arc(u,d,o,0,I),t.arc(s,d,o,I,A)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-I,I),t.arc(s,l,o,I,A+I)):l<d?(t.arc(s,l,o,-A,0),t.arc(s,d,o,0,A)):t.arc(s,l,o,-A,A),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*D;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,T),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=O,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+F)*u,l=Math.sin(h+F)*u,t.arc(i-s,a-l,d,h-A,h-I),t.arc(i+l,a-s,d,h-I,h),t.arc(i+s,a+l,d,h,h+I),t.arc(i-l,a+s,d,h+I,h+A),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=F;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=F;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=F,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},R=L;S.clear=L.clear,S.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var z={_set:function(t,e){return S.merge(this[t]||(this[t]={}),e)}};z._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var N=z,B=S.valueOrDefault;var E={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return S.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=N.global,n=B(t.fontSize,e.defaultFontSize),i={family:B(t.fontFamily,e.defaultFontFamily),lineHeight:S.options.toLineHeight(B(t.lineHeight,e.defaultLineHeight),n),size:n,style:B(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||S.isNullOrUndef(t.size)||S.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&S.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},W={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},V=W;S.log10=W.log10;var H=S,j=P,q=R,U=E,Y=V,G={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};H.easing=j,H.canvas=q,H.options=U,H.math=Y,H.rtl=G;var X=function(t){H.extend(this,t),this.initialize.apply(this,arguments)};H.extend(X.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=H.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=_(l)).valid&&(c=_(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(H.isFinite(l)&&H.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=H.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return H.isNumber(this._model.x)&&H.isNumber(this._model.y)}}),X.extend=H.inherits;var K=X,Z=K.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),$=Z;Object.defineProperty(Z.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Z.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),N._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:H.noop,onComplete:H.noop}});var J={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=H.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=H.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),H.callback(t.render,[e,t],e),H.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&et(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),tt.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return H.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=H.merge(Object.create(null),[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&H._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:H.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=Q([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},H.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=Q([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=Q([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){H.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=H.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=Q([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=Q([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=Q([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),nt.extend=H.inherits;var it=nt,at=2*Math.PI;function rt(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+at),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&rt(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}N._set("global",{elements:{arc:{backgroundColor:N.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var st=K.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=H.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=at;for(;a>s;)a-=at;for(;a<o;)a+=at;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%at}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&ot(e,n,a),e.restore()}}),lt=H.valueOrDefault,ut=N.global.defaultColor;N._set("global",{elements:{line:{tension:.4,backgroundColor:ut,borderWidth:3,borderColor:ut,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var dt=K.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=N.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=H.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=lt(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=lt(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?H.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):H.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),ht=H.valueOrDefault,ct=N.global.defaultColor;function ft(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}N._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ct,borderColor:ct,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var gt=K.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ft,inXRange:ft,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=N.global,u=l.defaultColor;e.skip||(void 0===t||H.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=ht(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,H.canvas.drawPoint(n,i,r,o,s,a))}}),pt=N.global.defaultColor;function mt(t){return t&&void 0!==t.width}function vt(t){var e,n,i,a,r;return mt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function bt(t,e,n){return t===e?n:t===n?e:t}function xt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=bt(e,"left","right")):t.base<t.y&&(e=bt(e,"bottom","top")),n[e]=!0,n):n}(t);return H.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},H.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):Dt(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(At(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(H.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}H.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=H.extend({},it.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=At(n.barPercentage,e.barPercentage),e.barThickness=At(n.barThickness,e.barThickness),e.categoryPercentage=At(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=At(n.maxBarThickness,e.maxBarThickness),e.minBarLength=At(i.minBarLength,e.minBarLength),e}}),It=H.valueOrDefault,Ft=H.options.resolve;N._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ot=it.extend({dataElementType:kt.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;H.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=It(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=It(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=It(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=it.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=H.extend({},s)),s.radius=Ft([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=H.valueOrDefault,Rt=Math.PI,zt=2*Rt,Nt=Rt/2;N._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-Nt,circumference:zt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return H.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Bt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<zt){var b=l.rotation%zt,x=(b+=b>=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/zt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:H.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return H.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});N._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),N._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Et=Tt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Wt=H.valueOrDefault,Vt=H.options.resolve,Ht=H.canvas._isPointInArea;function jt(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function qt(t,e,n){var i=n/2,a=jt(t,i),r=jt(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function Ut(t){var e,n,i,a;return H.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}N._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Yt=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Wt(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Wt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=it.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Wt(n.spanGaps,a.spanGaps),o.tension=Wt(n.lineTension,r.tension),o.steppedLine=Vt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=Ut(Wt(n.clip,qt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)H.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=H.splineCurve(H.previousItem(l,t)._model,n,H.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Ht(n,s)&&(t>0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Ht(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,H.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),H.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Wt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Wt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Wt(n.hoverBorderWidth,n.borderWidth),e.radius=Wt(n.hoverRadius,n.radius)}}),Gt=H.options.resolve;N._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Xt=it.extend({dataElementType:kt.Arc,linkScales:H.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};H.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:H.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return H.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor,a=H.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Gt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});N._set("pie",H.clone(N.doughnut)),N._set("pie",{cutoutPercentage:0});var Kt=Bt,Zt=H.valueOrDefault;N._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var $t=it.extend({datasetElementType:kt.Line,dataElementType:kt.Point,linkScales:H.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Zt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=it.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Zt(e.spanGaps,n.spanGaps),i.tension=Zt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=H.splineCurve(H.previousItem(o,t,!0)._model,n,H.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Zt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Zt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Zt(n.hoverBorderWidth,n.borderWidth),e.radius=Zt(n.hoverRadius,n.radius)}});N._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),N._set("global",{datasets:{scatter:{showLine:!1}}});var Jt={bar:Tt,bubble:Ot,doughnut:Bt,horizontalBar:Et,line:Yt,polarArea:Xt,pie:Kt,radar:$t,scatter:Yt};function Qt(t,e){return t.native?{x:t.x,y:t.y}:H.getRelativePosition(t,e)}function te(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function ee(t,e){var n=[];return te(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ne(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return te(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ie(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ae(t,e,n){var i=Qt(e,t);n.axis=n.axis||"x";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var re={modes:{single:function(t,e){var n=Qt(e,t),i=[];return te(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ae,index:ae,dataset:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis),r=n.intersect?ee(t,i):ne(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,he(r.horizontal,e)),de(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&ce(u,e,n)||l}function fe(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}N._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ge,pe={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=H.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=le(se(e,"left"),!0),i=le(se(e,"right")),a=le(se(e,"top"),!0),r=le(se(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:se(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=oe({maxPadding:oe({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),ce(l,h,d),ce(u,h,d)&&ce(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),fe(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,fe(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},H.each(s.chartArea,(function(e){var n=e.box;oe(n,t.chartArea),n.update(h.w,h.h)}))}}},me=(ge=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Pe("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,H.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[ve]||(t[ve]={}),i=n.renderProxy=function(t){t.animationName===ye&&e()};H.each(_e,(function(e){Se(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(xe)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function Te(t){var e=t[ve]||{},n=e.resizer;delete e.resizer,function(t){var e=t[ve]||{},n=e.renderProxy;n&&(H.each(_e,(function(e){Ce(t,e,n)})),delete e.renderProxy),t.classList.remove(xe)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Ie={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[ve]||(t[ve]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,me)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[ve]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=we(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=we(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[ve]){var n=e[ve].initial;["height","width"].forEach((function(t){var i=n[t];H.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),H.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[ve]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[ve]||(n[ve]={});Se(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=ke[t.type]||t.type,i=H.getRelativePosition(t,e);return Pe(n,e,i.x,i.y,t)}(e,t))})}else De(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[ve]||{}).proxies||{})[t.id+"_"+e];a&&Ce(i,e,a)}else Te(i)}};H.addEvent=Se,H.removeEvent=Ce;var Fe=Ie._enabled?Ie:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Oe=H.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Fe);N._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=H.clone(N.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Re={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=H.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?H.merge(Object.create(null),[N.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=H.extend(this.defaults[t],e))},addScalesToLayout:function(t){H.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,pe.addBox(t,e)}))}},ze=H.valueOrDefault,Ne=H.rtl.getRtlAdapter;N._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:H.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:H.noop,beforeBody:H.noop,beforeLabel:H.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),H.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:H.noop,afterBody:H.noop,beforeFooter:H.noop,footer:H.noop,afterFooter:H.noop}}});var Be={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=H.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Ee(t,e){return e&&(H.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function We(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),H.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=H.fontString(u,e._titleFontStyle,e._titleFontFamily),H.each(e.title,f),n.font=H.fontString(d,e._bodyFontStyle,e._bodyFontFamily),H.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,H.each(r,(function(t){H.each(t.before,f),H.each(t.lines,f),H.each(t.after,f)})),c=0,n.font=H.fontString(h,e._footerFontStyle,e._footerFontFamily),H.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?He(e,"left"):0,b=Ne(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=H.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=He(e,y),n.fillStyle=e.bodyFontColor,H.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,H.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}H.each(i.after,x)}m=0,H.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=H.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ge(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=Jt[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;H.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ze(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&H.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Qe("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(pe.update(this,this.width,this.height),t._layers=[],H.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ge(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),H.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new $({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=H.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});J.addAnimation(e,o,i,a)}else e.draw(),r(new $({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),H.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Qe("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),H.canvas.clear(n),Oe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete tn.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ye({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};H.each(t.options.events,(function(i){Oe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Oe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,H.each(e,(function(e,n){Oe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),H.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!H.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),tn.instances={};var en=tn;tn.Controller=tn,tn.types={},H.configMerge=Ke,H.scaleMerge=Xe;function nn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function an(t){this.options=t||{}}H.extend(an.prototype,{formats:nn,parse:nn,format:nn,add:nn,diff:nn,startOf:nn,endOf:nn,_create:function(t){return t}}),an.override=function(t){H.extend(an.prototype,t)};var rn={_date:an},on={formatters:{values:function(t){return H.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,ln(s)||sn(s)){if(sn(s))for(r=0,o=s.length;r<o;++r)g=s[r],ln(g)||sn(g)||(c=H.measureText(t,d.data,d.gc,c,g),f+=h)}else c=H.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2),_=Math.max(c,_),k=Math.max(f,k)}function w(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){H.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(_),m=x.indexOf(k),{first:w(0),last:w(v-1),widest:w(p),highest:w(m)}}function fn(t){return t.drawTicks?t.tickMarkLength:0}function gn(t){var e,n;return t.display?(e=H.options._parseFont(t),n=H.options.toPadding(t.padding),e.lineHeight+n.height):0}function pn(t,e){return H.extend(H.options._parseFont({fontFamily:un(e.fontFamily,t.fontFamily),fontSize:un(e.fontSize,t.fontSize),fontStyle:un(e.fontStyle,t.fontStyle),lineHeight:un(e.lineHeight,t.lineHeight)}),{color:H.options.resolve([e.fontColor,t.fontColor,N.global.defaultFontColor])})}function mn(t){var e=pn(t,t.minor);return{minor:e,major:t.major.enabled?pn(t,t.major):e}}function vn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function bn(t,e,n,i){var a,r,o,s,l=un(n,0),u=Math.min(un(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}N._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:on.formatters.values,minor:{},major:{}}});var xn=K.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){H.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=H.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){H.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){H.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){H.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){H.callback(this.options.beforeDataLimits,[this])},determineDataLimits:H.noop,afterDataLimits:function(){H.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){H.callback(this.options.beforeBuildTicks,[this])},buildTicks:H.noop,afterBuildTicks:function(t){var e=this;return sn(t)&&t.length?H.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=H.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){H.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){H.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){H.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=cn(t.ctx,mn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return sn(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:H.noop,getPixelForValue:H.noop,getValueForPixel:H.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),vn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=H.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)bn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=fn(_),A=[],D=_.drawBorder?dn(_.lineWidth,0,0):0,T=D/2,I=H._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},ln(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=dn(_.lineWidth,n,1),p=dn(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=hn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=mn(g),y=g.padding,_=fn(f.gridLines),k=-H.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,ln(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=sn(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=H._alignPixel,h=n.drawBorder?dn(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=dn(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=dn(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,sn(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=un(i.fontColor,N.global.defaultFontColor),s=H.options._parseFont(i),l=H.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});xn.prototype._draw=xn.prototype.draw;var yn=xn,_n=H.isNullOrUndef,kn=yn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Sn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=H.max(a),t.min=H.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),yn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;yn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Pn={position:"left",ticks:{callback:on.formatters.linear}};function An(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function Dn(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Tn=Cn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?An(a,u,e,n):Dn(a,e,n);H.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,H.min(i)),a.max=Math.max(a.max,H.max(i))})),a.min=H.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=H.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=H.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}H.each(f,(function(t){if(t.length>0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=H.isFinite(o.min)?o.min:null,o.max=H.isFinite(o.max)?o.max:null,o.minNotZero=H.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=Rn(e.min,t.min),t.max=Rn(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(On(t.min))-1),t.max=Math.pow(10,Math.floor(On(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(On(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(On(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=Fn(t.max,r);return a.push(u),a}(i,t);t.max=H.max(a),t.min=H.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),yn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Yn(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=H.isArray(u)?{w:H.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=H.toDegrees(h)%360,f=jn(c,i.x,n.w,0,180),g=jn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(Wn([s.borderDash,o.borderDash,[]])),a.lineDashOffset=Wn([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a<s-1;++a)if(o=(r=ei[ni[a]]).steps?r.steps:ti,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ni[a];return ni[s-1]}function di(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(li(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,H.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=li(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ii):g.sort(ii),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=li(s,ai(d))||c,f=li(s,ri(d))||f,c=c===ti?+u.startOf(Date.now(),h):c,f=f===Qn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||ui(s.minUnit,e,n,i),u=$n([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=li(i,ai(o))||a,r=li(i,ri(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;e<n;++e)if(ei[ni[e]].common)return ni[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=oi(t,"time",e[0],"pos"),s=1===e.length?1-r:(oi(t,"time",e[1],"pos")-r)/2,o=oi(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-oi(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),di(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return H.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(si(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(si(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=$n([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=oi(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=li(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=oi(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=H.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=Jn(e.fontSize,N.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,di(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return H.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function mi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(H.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function bi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function xi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),pi[n](t))}function yi(t){return t&&!t.skip}function _i(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)H.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=yi(u),c=yi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(_i(t,m,v,b,x),b=x=0,m=[],v=[]));_i(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var wi={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof kt.Line&&(r={visible:t.isDatasetVisible(i),fill:mi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=bi(l,i,s),r.boundary=vi(r),r.mapper=xi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ai=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Si,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Si,beforeSetDimensions:Si,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Si,beforeBuildLabels:Si,buildLabels:function(){var t=this,e=t.options.labels||{},n=H.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Si,beforeFit:Si,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=H.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Oi(t,e){var n=new Fi({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.titleBlock=n}var Li={},Ri=wi,zi=Ti,Ni={id:"title",_element:Fi,beforeInit:function(t){var e=t.options.title;e&&Oi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(H.mergeIf(e,N.global.title),n?(pe.configure(t,n,e),n.options=e):Oi(t,e)):n&&(pe.removeBox(t,n),delete t.titleBlock)}};for(var Bi in Li.filler=Ri,Li.legend=zi,Li.title=Ni,en.helpers=H,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=H._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}H.where=function(t,e){if(H.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return H.each(t,(function(t){e(t)&&n.push(t)})),n},H.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},H.findNextWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},H.findPreviousWhere=function(t,e,n){H.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)<n},H.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(H.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},H.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==H.isArray(u))h=H.measureText(t,a,r,h,u);else if(H.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||H.isArray(d)||(h=H.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},H.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei}));++ (function() {+ 'use strict';+ window.addEventListener('beforeprint', function() {+ for (var id in Chart.instances) {+ Chart.instances[id].resize();+ }+ }, false);++ var errorBarPlugin = (function () {+ function drawErrorBar(chart, ctx, low, high, y, height, color) {+ ctx.save();+ ctx.lineWidth = 3;+ ctx.strokeStyle = color;+ var area = chart.chartArea;+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);+ ctx.clip();+ ctx.beginPath();+ ctx.moveTo(low, y - height);+ ctx.lineTo(low, y + height);+ ctx.moveTo(low, y);+ ctx.lineTo(high, y);+ ctx.moveTo(high, y - height);+ ctx.lineTo(high, y + height);+ ctx.stroke();+ ctx.restore();+ }+ // Avoid sudden jumps in error bars when switching+ // between linear and logarithmic scale+ function conservativeError(vx, mx, now, final, scale) {+ var finalDiff = Math.abs(mx - final);+ var diff = Math.abs(vx - now);+ return (diff > finalDiff) ? vx + scale * finalDiff : now;+ }+ return {+ afterDatasetDraw: function(chart, easingOptions) {+ var ctx = chart.ctx;+ var easing = easingOptions.easingValue;+ chart.data.datasets.forEach(function(d, i) {+ var bars = chart.getDatasetMeta(i).data;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ bars.forEach(function(b) {+ var value = axis.getValueForPixel(b._view.x);+ var final = axis.getValueForPixel(b._model.x);+ var errorBar = d.errorBars[b._model.label];+ var low = axis.getPixelForValue(value - errorBar.minus);+ var high = axis.getPixelForValue(value + errorBar.plus);+ var finalLow = axis.getPixelForValue(final - errorBar.minus);+ var finalHigh = axis.getPixelForValue(final + errorBar.plus);+ var l = easing === 1 ? finalLow :+ conservativeError(b._view.x, b._model.x, low,+ finalLow, -1.0);+ var h = easing === 1 ? finalHigh :+ conservativeError(b._view.x, b._model.x,+ high, finalHigh, 1.0);+ drawErrorBar(chart, ctx, l, h, b._view.y, 4, errorBar.color);+ });+ });+ },+ };+ })();++ // Formats the ticks on the X-axis on the scatter plot+ var iterFormatter = function() {+ var denom = 0;+ return function(iters, index, values) {+ if (iters == 0) {+ return '';+ }+ if (index == values.length - 1) {+ return '';+ }+ var power;+ if (iters >= 1e9) {+ denom = 1e9;+ power = '⁹';+ } else if (iters >= 1e6) {+ denom = 1e6;+ power = '⁶';+ } else if (iters >= 1e3) {+ denom = 1e3;+ power = '³';+ } else {+ denom = 1;+ }+ if (denom > 1) {+ var value = (iters / denom).toFixed();+ return String(value) + '×10' + power;+ } else {+ return String(iters);+ }+ };+ };++ var colors = ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"];+ var errorColors = ["#cda220", "#8fb8d8", "#ab2b2b", "#2d872d", "#7420cd"];+++ // Positions tooltips at cursor. Required for overview since the bars may+ // extend past the canvas width.+ Chart.Tooltip.positioners.cursor = function(_elems, position) {+ return position;+ }++ function axisType(logaxis) {+ return logaxis ? 'logarithmic' : 'linear';+ }++ function reportSort(a, b) {+ return a.reportNumber - b.reportNumber;+ }++ // adds groupNumber and group fields to reports;+ // returns list of list of reports, grouped by group+ function groupReports(reports) {++ function reportGroup(report) {+ var parts = report.groups.slice();+ parts.pop();+ return parts.join('/');+ }++ var groups = [];+ reports.forEach(function(report) {+ report.group = reportGroup(report);+ if (groups.length === 0) {+ groups.push([report]);+ } else {+ var prevGroup = groups[groups.length - 1];+ var prevGroupName = prevGroup[0].group;+ if (prevGroupName === report.group) {+ prevGroup.push(report);+ } else {+ groups.push([report]);+ }+ }+ report.groupNumber = groups.length - 1;+ });+ return groups;+ }++ // compares 2 arrays lexicographically+ function lex(aParts, bParts) {+ for(var i = 0; i < aParts.length && i < bParts.length; i++) {+ var x = aParts[i];+ var y = bParts[i];+ if (x < y) {+ return -1;+ }+ if (y < x) {+ return 1;+ }+ }+ return aParts.length - bParts.length;+ }+ function lexicalSort(a, b) {+ return lex(a.groups, b.groups);+ }++ function reverseLexicalSort(a, b) {+ return lex(a.groups.slice().reverse(), b.groups.slice().reverse());+ }++ function durationSort(a, b) {+ return a.reportAnalysis.anMean.estPoint - b.reportAnalysis.anMean.estPoint;+ }+ function reverseDurationSort(a,b) {+ return -durationSort(a,b);+ }++ function timeUnits(secs) {+ if (secs < 0)+ return timeUnits(-secs);+ else if (secs >= 1e9)+ return [1e-9, "Gs"];+ else if (secs >= 1e6)+ return [1e-6, "Ms"];+ else if (secs >= 1)+ return [1, "s"];+ else if (secs >= 1e-3)+ return [1e3, "ms"];+ else if (secs >= 1e-6)+ return [1e6, "\u03bcs"];+ else if (secs >= 1e-9)+ return [1e9, "ns"];+ else if (secs >= 1e-12)+ return [1e12, "ps"];+ return [1, "s"];+ }++ function formatUnit(raw, unit, precision) {+ var v = precision ? raw.toPrecision(precision) : Math.round(raw);+ var label = String(v) + ' ' + unit;+ return label;+ }++ function formatTime(value, precision) {+ var units = timeUnits(value);+ var scale = units[0];+ return formatUnit(value * scale, units[1], precision);+ }++ // pure function that produces the 'data' object of the overview chart+ function overviewData(state, reports) {+ var order = state.order;+ var sorter = order === 'report-index' ? reportSort+ : order === 'lex' ? lexicalSort+ : order === 'colex' ? reverseLexicalSort+ : order === 'duration' ? durationSort+ : order === 'rev-duration' ? reverseDurationSort+ : reportSort;+ var sortedReports = reports.filter(function(report) {+ return !state.hidden[report.groupNumber];+ }).slice().sort(sorter);+ var data = sortedReports.map(function(report) {+ return report.reportAnalysis.anMean.estPoint;+ });+ var labels = sortedReports.map(function(report) {+ return report.groups.join(' / ');+ });+ var upperBound = function(report) {+ var est = report.reportAnalysis.anMean;+ return est.estPoint + est.estError.confIntUDX;+ };+ var errorBars = {};+ sortedReports.forEach(function(report) {+ var est = report.reportAnalysis.anMean;+ errorBars[report.groups.join(' / ')] = {+ minus: est.estError.confIntLDX,+ plus: est.estError.confIntUDX,+ color: errorColors[report.groupNumber % errorColors.length]+ };+ });+ var top = sortedReports.map(upperBound).reduce(function(a, b) {+ return Math.max(a, b);+ }, 0);+ var scale = top;+ if(state.activeReport !== null) {+ reports.forEach(function(report) {+ if(report.reportNumber === state.activeReport) {+ scale = upperBound(report);+ }+ });+ }++ return {+ labels: labels,+ top: top,+ max: scale * 1.1,+ reports: sortedReports,+ datasets: [{+ borderWidth: 1,+ backgroundColor: sortedReports.map(function(report) {+ var active = report.reportNumber === state.activeReport;+ var alpha = active ? 'ff' : 'a0';+ var color = colors[report.groupNumber % colors.length] + alpha;+ if (active) {+ return Chart.helpers.getHoverColor(color);+ } else {+ return color;+ }+ }),+ barThickness: 16,+ barPercentage: 0.8,+ data: data,+ errorBars: errorBars,+ minBarLength: 2,+ }]+ };+ }++ function inside(box, point) {+ return (point.x >= box.left && point.x <= box.right && point.y >= box.top &&+ point.y <= box.bottom);+ }++ function overviewHover(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var over =+ (inside(xAxis, point) || inside(yAxis, point) || elems.length > 0);+ if (over) {+ chart.canvas.style.cursor = "pointer";+ } else {+ chart.canvas.style.cursor = "default";+ }+ }++ // Re-renders the overview after clicking/sorting+ function renderOverview(state, reports, chart) {+ var data = overviewData(state, reports);+ var xaxis = chart.options.scales.xAxes[0];+ xaxis.ticks.max = data.max;+ chart.config.data.datasets[0].backgroundColor = data.datasets[0].backgroundColor;+ chart.config.data.datasets[0].data = data.datasets[0].data;+ chart.options.scales.xAxes[0].type = axisType(state.logaxis);+ chart.options.legend.display = state.legend;+ chart.data.labels = data.labels;+ chart.update();+ }++ function overviewClick(state, reports) {+ return function(event, elems) {+ var chart = this;+ var xAxis = chart.scales[chart.options.scales.xAxes[0].id];+ var yAxis = chart.scales[chart.options.scales.yAxes[0].id];+ var point = Chart.helpers.getRelativePosition(event, chart);+ var sorted = overviewData(state, reports).reports;++ function activateBar(index) {+ // Trying to activate active bar disables instead+ if (sorted[index].reportNumber === state.activeReport) {+ state.activeReport = null;+ } else {+ state.activeReport = sorted[index].reportNumber;+ }+ }++ if (inside(xAxis, point)) {+ state.activeReport = null;+ state.logaxis = !state.logaxis;+ renderOverview(state, reports, chart);+ } else if (inside(yAxis, point)) {+ var index = yAxis.getValueForPixel(point.y);+ activateBar(index);+ renderOverview(state, reports, chart);+ } else if (elems.length > 0) {+ var elem = elems[0];+ var index = elem._index;+ activateBar(index);+ state.logaxis = false;+ renderOverview(state, reports, chart);+ } else if(inside(chart.chartArea, point)) {+ state.activeReport = null;+ renderOverview(state, reports, chart);+ }+ };+ }++ // listener for sort drop-down+ function overviewSort(state, reports, chart) {+ return function(event) {+ state.order = event.currentTarget.value;+ renderOverview(state, reports, chart);+ };+ }++ // Returns a formatter for the ticks on the X-axis of the overview+ function overviewTick(state) {+ return function(value, index, values) {+ var label = formatTime(value);+ if (state.logaxis) {+ const remain = Math.round(value /+ (Math.pow(10, Math.floor(Chart.helpers.log10(value)))));+ if (index === values.length - 1) {+ // Draw endpoint if we don't span a full order of magnitude+ if (values[index] / values[1] < 10) {+ return label;+ } else {+ return '';+ }+ }+ if (remain === 1) {+ return label;+ }+ return '';+ } else {+ // Don't show the right endpoint+ if (index === values.length - 1) {+ return '';+ }+ return label;+ }+ }+ }++ function mkOverview(reports) {+ var canvas = document.createElement('canvas');++ var state = {+ logaxis: false,+ activeReport: null,+ order: 'index',+ hidden: {},+ legend: false,+ };+++ var data = overviewData(state, reports);+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'horizontalBar',+ data: data,+ plugins: [errorBarPlugin],+ options: {+ onHover: overviewHover,+ onClick: overviewClick(state, reports),+ elements: {+ rectangle: {+ borderWidth: 2,+ },+ },+ scales: {+ yAxes: [{+ ticks: {}+ }],+ xAxes: [{+ display: true,+ type: axisType(state.logaxis),+ ticks: {+ autoSkip: false,+ min: 0,+ max: data.top * 1.1,+ minRotation: 0,+ maxRotation: 0,+ callback: overviewTick(state),+ }+ }]+ },+ responsive: true,+ maintainAspectRatio: false,+ legend: {+ display: state.legend,+ position: 'right',+ onLeave: function(event) {+ chart.canvas.style.cursor = 'default';+ },+ onHover: function(event, item) {+ chart.canvas.style.cursor = 'pointer';+ },+ onClick: function(event, item) {+ // toggle hidden+ state.hidden[item.groupNumber] = !state.hidden[item.groupNumber];+ renderOverview(state, reports, chart);+ },+ labels: {+ boxWidth: 12,+ generateLabels: function() {+ var groups = [];+ var groupNames = [];+ reports.forEach(function(report) {+ var index = groups.indexOf(report.groupNumber);+ if (index === -1) {+ groups.push(report.groupNumber);+ var groupName = report.groups.slice(0,report.groups.length-1).join(' / ');+ groupNames.push(groupName);+ }+ });+ return groups.map(function(groupNumber, index) {+ var color = colors[groupNumber % colors.length];+ return {+ text: groupNames[index],+ fillStyle: color,+ hidden: state.hidden[groupNumber],+ groupNumber: groupNumber,+ };+ });+ },+ },+ },+ tooltips: {+ position: 'cursor',+ callbacks: {+ label: function(item) {+ return formatTime(item.xLabel, 3);+ },+ },+ },+ title: {+ display: false,+ text: 'Chart.js Horizontal Bar Chart'+ }+ }+ });+ document.getElementById('sort-overview')+ .addEventListener('change', overviewSort(state, reports, chart));+ var toggle = document.getElementById('legend-toggle');+ toggle.addEventListener('mouseup', function () {+ state.legend = !state.legend;+ if(state.legend) {+ toggle.classList.add('right');+ } else {+ toggle.classList.remove('right');+ }+ renderOverview(state, reports, chart);+ })+ return canvas;+ }++ function mkKDE(report) {+ var canvas = document.createElement('canvas');+ var mean = report.reportAnalysis.anMean.estPoint;+ var units = timeUnits(mean);+ var scale = units[0];+ var reportKDE = report.reportKDEs[0];+ var data = reportKDE.kdeValues.map(function(time, index) {+ var pdf = reportKDE.kdePDF[index];+ return {+ x: time * scale,+ y: pdf+ };+ });+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'line',+ data: {+ datasets: [{+ label: 'KDE',+ borderColor: colors[0],+ borderWidth: 2,+ backgroundColor: '#00000000',+ data: data,+ hoverBorderWidth: 1,+ pointHitRadius: 8,+ },+ {+ label: 'mean'+ }+ ],+ },+ plugins: [{+ afterDraw: function(chart) {+ var ctx = chart.ctx;+ var area = chart.chartArea;+ var axis = chart.scales[chart.options.scales.xAxes[0].id];+ var value = axis.getPixelForValue(mean * scale);+ ctx.save();+ ctx.strokeStyle = colors[1];+ ctx.lineWidth = 2;+ ctx.beginPath();+ ctx.moveTo(value, area.top);+ ctx.lineTo(value, area.bottom);+ ctx.stroke();+ ctx.restore();+ },+ }],+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time densities',+ },+ elements: {+ point: {+ radius: 0,+ hitRadius: 0+ }+ },+ scales: {+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ min: reportKDE.kdeValues[0] * scale,+ max: reportKDE.kdeValues[reportKDE.kdeValues.length - 1] * scale,+ callback: function(value, index, values) {+ // Don't show endpoints+ if (index === 0 || index === values.length - 1) {+ return '';+ }+ var str = String(value) + ' ' + units[1];+ return str;+ },+ }+ }],+ yAxes: [{+ display: true,+ type: 'linear',+ ticks: {+ min: 0,+ callback: function() {+ return '';+ },+ },+ }]+ },+ responsive: true,+ legend: {+ display: false,+ position: 'right',+ },+ tooltips: {+ mode: 'nearest',+ callbacks: {+ title: function() {+ return '';+ },+ label: function(+ item) {+ return formatUnit(item.xLabel, units[1], 3);+ },+ },+ },+ hover: {+ intersect: false+ },+ }+ });+ return canvas;+ }++ function mkScatter(report) {++ // collect the measured value for a given regression+ function getMeasured(key) {+ var ix = report.reportKeys.indexOf(key);+ return report.reportMeasured.map(function(x) {+ return x[ix];+ });+ }++ var canvas = document.createElement('canvas');+ var times = getMeasured("time");+ var iters = getMeasured("iters");+ var lastIter = iters[iters.length - 1];+ var olsTime = report.reportAnalysis.anRegress[0].regCoeffs.iters;+ var dataPoints = times.map(function(time, i) {+ return {+ x: iters[i],+ y: time+ }+ });+ var formatter = iterFormatter();+ var chart = new Chart(canvas.getContext('2d'), {+ type: 'scatter',+ data: {+ datasets: [{+ data: dataPoints,+ label: 'scatter',+ borderWidth: 2,+ pointHitRadius: 8,+ borderColor: colors[1],+ backgroundColor: '#fff',+ },+ {+ data: [+ {x: 0, y: 0 },+ { x: lastIter, y: olsTime.estPoint * lastIter }+ ],+ label: 'regression',+ type: 'line',+ backgroundColor: "#00000000",+ borderColor: colors[0],+ pointRadius: 0,+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint - olsTime.estError.confIntLDX) * lastIter,+ }],+ label: 'lower',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ pointRadius: 0,+ borderColor: '#00000000',+ backgroundColor: colors[0] + '33',+ },+ {+ data: [{+ x: 0,+ y: 0+ }, {+ x: lastIter,+ y: (olsTime.estPoint + olsTime.estError.confIntUDX) * lastIter,+ }],+ label: 'upper',+ type: 'line',+ fill: 1,+ borderWidth: 0,+ borderColor: '#00000000',+ pointRadius: 0,+ backgroundColor: colors[0] + '33',+ },+ ],+ },+ options: {+ title: {+ display: true,+ text: report.groups.join(' / ') + ' — time per iteration',+ },+ scales: {+ yAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Time'+ },+ ticks: {+ callback: function(value, index, values) {+ return formatTime(value);+ },+ }+ }],+ xAxes: [{+ display: true,+ type: 'linear',+ scaleLabel: {+ display: false,+ labelString: 'Iterations'+ },+ ticks: {+ callback: formatter,+ max: lastIter,+ }+ }],+ },+ legend: {+ display: false,+ },+ tooltips: {+ callbacks: {+ label: function(ttitem, ttdata) {+ var iters = ttitem.xLabel;+ var duration = ttitem.yLabel;+ return formatTime(duration, 3) + ' / ' ++ iters.toLocaleString() + ' iters';+ },+ },+ },+ }+ });+ return canvas;+ }++ // Create an HTML Element with attributes and child nodes+ function elem(tag, props, children) {+ var node = document.createElement(tag);+ if (children) {+ children.forEach(function(child) {+ if (typeof child === 'string') {+ var txt = document.createTextNode(child);+ node.appendChild(txt);+ } else {+ node.appendChild(child);+ }+ });+ }+ Object.assign(node, props);+ return node;+ }++ function bounds(analysis) {+ var mean = analysis.estPoint;+ return {+ low: mean - analysis.estError.confIntLDX,+ mean: mean,+ high: mean + analysis.estError.confIntUDX+ };+ }++ function confidence(level) {+ return String(1 - level) + ' confidence level';+ }++ function mkOutliers(report) {+ var outliers = report.reportAnalysis.anOutlierVar;+ return elem('div', {className: 'outliers'}, [+ elem('p', {}, [+ 'Outlying measurements have ',+ outliers.ovDesc,+ ' (', String((outliers.ovFraction * 100).toPrecision(3)), '%)',+ ' effect on estimated standard deviation.'+ ])+ ]);+ }++ function mkTable(report) {+ var analysis = report.reportAnalysis;+ var timep4 = function(t) {+ return formatTime(t, 3)+ };+ var idformatter = function(t) {+ return t.toPrecision(3)+ };+ var rows = [+ Object.assign({+ label: 'OLS regression',+ formatter: timep4+ },+ bounds(analysis.anRegress[0].regCoeffs.iters)),+ Object.assign({+ label: 'R² goodness-of-fit',+ formatter: idformatter+ },+ bounds(analysis.anRegress[0].regRSquare)),+ Object.assign({+ label: 'Mean execution time',+ formatter: timep4+ },+ bounds(analysis.anMean)),+ Object.assign({+ label: 'Standard deviation',+ formatter: timep4+ },+ bounds(analysis.anStdDev)),+ ];+ return elem('table', {+ className: 'analysis'+ }, [+ elem('thead', {}, [+ elem('tr', {}, [+ elem('th'),+ elem('th', {+ className: 'low',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['lower bound']),+ elem('th', {}, ['estimate']),+ elem('th', {+ className: 'high',+ title: confidence(analysis.anRegress[0].regCoeffs.iters.estError.confIntCL)+ }, ['upper bound']),+ ])+ ]),+ elem('tbody', {}, rows.map(function(row) {+ return elem('tr', {}, [+ elem('td', {}, [row.label]),+ elem('td', {className: 'low'}, [row.formatter(row.low, 4)]),+ elem('td', {}, [row.formatter(row.mean)]),+ elem('td', {className: 'high'}, [row.formatter(row.high, 4)]),+ ]);+ }))+ ]);+ return elt;+ }+ document.addEventListener('DOMContentLoaded', function() {+ var reportData = JSON.parse(document.getElementById('report-data')+ .getAttribute('data-report-json'))+ .map(function(report) {+ report.groups = report.reportName.split('/');+ return report;+ });+ var groups = groupReports(reportData);+ var overview = document.getElementById('overview-chart');+ var overviewLineHeight = 16 * 1.25;+ overview.style.height =+ String(overviewLineHeight * reportData.length + 36) + 'px';+ overview.appendChild(mkOverview(reportData.slice()));+ var reports = document.getElementById('reports');+ reportData.forEach(function(report, i) {+ var id = 'report_' + String(i);+ reports.appendChild(+ elem('div', {id: id, className: 'report-details'}, [+ elem('h1', {}, [elem('a', {href: '#' + id}, [report.groups.join(' / ')])]),+ elem('div', {className: 'kde'}, [mkKDE(report)]),+ elem('div', {className: 'scatter'}, [mkScatter(report)]),+ mkTable(report), mkOutliers(report)+ ]));+ });+ }, false);+})();++ </script>+ <style>+ html,body {+ padding: 0; margin: 0;+ font-family: sans-serif;+}+* {+ -webkit-tap-highlight-color: transparent;+}+div.scatter, div.kde {+ position: relative;+ display: inline-block;+ box-sizing: border-box;+ width: 50%;+ padding: 0 2em;+}+.content, .explanation {+ margin: auto;+ max-width: 1000px;+ padding: 0 20px;+}++#legend-toggle {+ cursor: pointer;+}++.overview-info {+ float:right;+}++.overview-info a {+ display: inline-block;+ margin-left: 10px;+}+.overview-info .info {+ font-size: 120%;+ font-weight: 400;+ vertical-align: middle;+ line-height: 1em;+}+.chevron {+ position:relative;+ color: black;+ display:block;+ transition-property: transform;+ transition-duration: 400ms;+ line-height: 1em;+ font-size: 180%;+}+.chevron.right {+ transform: scale(-1,1);+}+.chevron::before {+ vertical-align: middle;+ content:"\2039";+}++select {+ outline: none;+ border:none;+ background: transparent;+}++footer .content {+ padding: 0;+}++span#explain-interactivity {+ display-block: inline;+ float: right;+ color: #444;+ font-size: 0.7em;+}++@media screen and (max-width: 800px) {+ div.scatter, div.kde {+ width: 100%;+ display: block;+ }+ .report-details .outliers {+ margin: auto;+ }+ .report-details table {+ margin: auto;+ }+}+table.analysis .low, table.analysis .high {+ opacity: 0.5;+}+.report-details {+ margin: 2em 0;+ page-break-inside: avoid;+}+a, a:hover, a:visited, a:active {+ text-decoration: none;+ color: #309ef2;+}+h1.title {+ font-weight: 600;+}+h1 {+ font-weight: 400;+}+#overview-chart {+ width: 100%; /*height is determined by number of rows in JavaScript */+}+footer {+ background: #777777;+ color: #ffffff;+ padding: 20px;+}+footer a, footer a:hover, footer a:visited, footer a:active {+ text-decoration: underline;+ color: #fff;+}++.explanation {+ margin-top: 3em;+}++.explanation h1 {+ font-size: 2.6em;+}++#grokularation.explanation li {+ margin: 1em 0;+}++#controls-explanation.explanation em {+ font-weight: 600;+ font-style: normal;+}++@media print {+ footer {+ background: transparent;+ color: black;+ }+ footer a, footer a:hover, footer a:visited, footer a:active {+ color: #309ef2;+ }+ .no-print {+ display: none;+ }+}++ </style>+ <meta name="viewport" content="width=device-width, initial-scale=1">+</head>+<body>+ <div class="content">+ <h1 class='title'>criterion performance measurements</h1>+ <p class="no-print"><a href="#grokularation">want to understand this report?</a></p>+ <h1 id="overview"><a href="#overview">overview</a></h1>+ <div class="no-print">+ <select id="sort-overview" class="select">+ <option value="report-index">index</option>+ <option value="lex">lexical</option>+ <option value="colex">colexical</option>+ <option value="duration">time ascending</option>+ <option value="rev-duration">time descending</option>+ </select>+ <span class="overview-info">+ <a href="#controls-explanation" class="info" title="click bar/label to zoom; x-axis to toggle logarithmic scale; background to reset">ⓘ</a>+ <a id="legend-toggle" class="chevron button"></a>+ </span>+ </div>+ <aside id="overview-chart"></aside>+ <main id="reports"></main>++ <div id="report-data" data-report-json='[{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.7673031436661194e-5,"confIntUDX":2.4498231316294646e-5,"confIntCL":5.0e-2},"estPoint":7.352684045588515e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4363683833451546e-4,"confIntUDX":1.1959645355241744e-4,"confIntCL":5.0e-2},"estPoint":0.9997798608065898},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":6.477227971451382e-4,"confIntUDX":6.952355605235709e-4,"confIntCL":5.0e-2},"estPoint":-1.5513186491827042e-3},"iters":{"estError":{"confIntLDX":4.808464575752763e-5,"confIntUDX":4.5444712975958174e-5,"confIntCL":5.0e-2},"estPoint":7.441753830166231e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.617182604553123e-5,"confIntUDX":2.7852819112811152e-5,"confIntCL":5.0e-2},"estPoint":7.675780512652575e-5},"anOutlierVar":{"ovFraction":2.7755102040816323e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[7.110913212422929e-3,7.1142633655731195e-3,7.117613518723309e-3,7.1209636718735e-3,7.12431382502369e-3,7.127663978173881e-3,7.13101413132407e-3,7.134364284474261e-3,7.137714437624451e-3,7.141064590774641e-3,7.144414743924831e-3,7.147764897075022e-3,7.1511150502252116e-3,7.154465203375402e-3,7.157815356525593e-3,7.161165509675783e-3,7.164515662825973e-3,7.167865815976163e-3,7.171215969126354e-3,7.174566122276543e-3,7.177916275426734e-3,7.181266428576924e-3,7.184616581727114e-3,7.1879667348773045e-3,7.191316888027495e-3,7.1946670411776855e-3,7.198017194327875e-3,7.201367347478066e-3,7.204717500628256e-3,7.208067653778446e-3,7.211417806928636e-3,7.214767960078827e-3,7.218118113229016e-3,7.221468266379207e-3,7.224818419529397e-3,7.228168572679588e-3,7.2315187258297775e-3,7.234868878979968e-3,7.2382190321301585e-3,7.241569185280348e-3,7.244919338430539e-3,7.248269491580729e-3,7.251619644730919e-3,7.254969797881109e-3,7.2583199510313e-3,7.26167010418149e-3,7.26502025733168e-3,7.26837041048187e-3,7.271720563632061e-3,7.2750707167822505e-3,7.278420869932441e-3,7.2817710230826315e-3,7.285121176232821e-3,7.288471329383012e-3,7.291821482533202e-3,7.295171635683393e-3,7.298521788833582e-3,7.301871941983773e-3,7.305222095133963e-3,7.308572248284153e-3,7.3119224014343434e-3,7.315272554584534e-3,7.318622707734724e-3,7.321972860884914e-3,7.325323014035105e-3,7.328673167185295e-3,7.332023320335485e-3,7.335373473485675e-3,7.338723626635866e-3,7.342073779786055e-3,7.345423932936246e-3,7.348774086086436e-3,7.352124239236626e-3,7.3554743923868165e-3,7.358824545537007e-3,7.3621746986871975e-3,7.365524851837387e-3,7.368875004987578e-3,7.372225158137768e-3,7.375575311287958e-3,7.378925464438148e-3,7.382275617588339e-3,7.385625770738528e-3,7.388975923888719e-3,7.392326077038909e-3,7.3956762301891e-3,7.3990263833392895e-3,7.40237653648948e-3,7.4057266896396705e-3,7.40907684278986e-3,7.412426995940051e-3,7.415777149090241e-3,7.419127302240431e-3,7.422477455390621e-3,7.425827608540812e-3,7.429177761691002e-3,7.432527914841192e-3,7.435878067991382e-3,7.439228221141573e-3,7.4425783742917626e-3,7.445928527441953e-3,7.4492786805921436e-3,7.452628833742333e-3,7.455978986892524e-3,7.459329140042714e-3,7.462679293192905e-3,7.466029446343094e-3,7.469379599493285e-3,7.472729752643475e-3,7.476079905793665e-3,7.4794300589438555e-3,7.482780212094046e-3,7.4861303652442365e-3,7.489480518394426e-3,7.492830671544617e-3,7.496180824694807e-3,7.499530977844997e-3,7.502881130995187e-3,7.506231284145378e-3,7.509581437295567e-3,7.512931590445758e-3,7.516281743595948e-3,7.519631896746138e-3,7.5229820498963285e-3,7.526332203046519e-3,7.5296823561967095e-3,7.533032509346899e-3,7.53638266249709e-3],"kdeType":"time","kdePDF":[118.01429634900273,142.81157951846535,192.15076063327294,264.9119529604066,358.13246994513844,466.0784241748318,579.8434768526234,687.8452728114656,777.3205052197104,836.5584858639492,857.2926944762239,836.5327263912449,777.2468165879111,687.6661261960886,579.4359430133301,465.20111922232223,356.3440109338181,261.46259754321534,185.86645295398066,132.01989156739464,100.60152743518923,91.73922295061115,106.00956531440474,144.91142516865304,210.6816454084448,305.4851665714372,430.16642434189174,582.8779255315127,757.977592940801,945.5744927498639,1131.9834249897337,1301.1386335109935,1436.770706585392,1524.9437044177275,1556.4456822550533,1528.5533024108545,1445.8364546890907,1319.8867781206243,1168.0849501401392,1011.7050621524661,873.7414192535591,776.8114504665884,741.3573760985696,784.2013420739121,917.3861603689364,1147.214627243901,1473.4792768117507,1888.9796098169106,2379.4621863881125,2924.0457046504616,3496.056949911888,4064.1245557764128,4593.459917124215,5047.487046609905,5390.207188042955,5589.6741944449805,5622.579417716365,5479.291127685649,5168.078356657122,4717.050682182178,4172.771431590369,3595.4359022323288,3051.546889306065,2605.6970313088423,2313.103792461381,2213.9963681432923,2330.1618520673774,2663.3315370979108,3194.890620555311,3886.6297048387128,4682.704905077032,5513.326766473005,6300.705755342448,6967.347627661859,7446.006629654731,7689.725730951615,7679.776713772189,7429.29702289993,6981.178029873522,6400.176394061361,5760.874346587475,5134.406020771779,4577.265465393758,4124.8103483095665,3790.510619286876,3570.159681454621,3448.862676810305,3408.1313765207706,3430.9286858300857,3503.6875116870588,3615.6216684882606,3756.535387629734,3914.5654382234325,4074.923511345227,4220.04595194685,4330.950559463086,4389.271360348402,4379.421610984287,4290.49849450514,4117.723468001804,3863.307037231868,3536.6377847286935,3153.696137557093,2735.656939209544,2306.7873208547567,1891.9164947390327,1513.8694609325198,1191.2562804764402,936.890058709578,756.928226449529,650.6799671194477,610.9647768387684,624.9506859065879,675.4858066023567,742.9693880643754,807.7193875147334,852.5911470747055,865.3815583820175,840.4511180108798,779.10935732792,688.629979846855,580.171943026891,466.2095811959294,358.18241600293067,264.9300910133163,192.15705225170763,142.81370568010297,118.0151422333616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":0,"reportName":"Int/IntMap/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[6.217200999344641e-3,6.217289000000001e-3,12385108,1,null,null,null,null,null,null,null],[1.2872116999460559e-2,1.287214e-2,25641662,2,null,null,null,null,null,null,null],[2.0542241000839567e-2,2.0542788e-2,40921670,3,null,null,null,null,null,null,null],[2.655011899969395e-2,2.6549957e-2,52887974,4,null,null,null,null,null,null,null],[3.5731844999645546e-2,3.573150900000001e-2,71177493,5,null,null,null,null,null,null,null],[4.380239400052233e-2,4.380199800000001e-2,87253916,6,null,null,null,null,null,null,null],[5.1011092999942775e-2,5.1010658999999986e-2,101613560,7,null,null,null,null,null,null,null],[5.784996999955183e-2,5.784943499999998e-2,115236335,8,null,null,null,null,null,null,null],[6.498449500031711e-2,6.498436899999999e-2,129449176,9,null,null,null,null,null,null,null],[7.455372299955343e-2,7.455297299999997e-2,148510076,10,null,null,null,null,null,null,null],[8.099804999983462e-2,8.099716000000001e-2,161346714,11,null,null,null,null,null,null,null],[8.910338900022907e-2,8.910246399999999e-2,177492396,12,null,null,null,null,null,null,null],[9.576250999998592e-2,9.576151899999996e-2,190757234,13,null,null,null,null,null,null,null],[0.10393232699971122,0.10393172099999992,207032311,14,null,null,null,null,null,null,null],[0.10926871799983928,0.10926744,217660945,15,null,null,null,null,null,null,null],[0.11791101200014964,0.11789877100000001,234876173,16,null,null,null,null,null,null,null],[0.12528242300049897,0.125277211,249564389,17,null,null,null,null,null,null,null],[0.1315712129999156,0.13157116600000007,262090086,18,null,null,null,null,null,null,null],[0.1383157280006344,0.13831417200000007,275522106,19,null,null,null,null,null,null,null],[0.14789397500044288,0.14789226700000002,294601696,20,null,null,null,null,null,null,null],[0.1543316759998561,0.15432983600000005,307425324,21,null,null,null,null,null,null,null],[0.16356243999962317,0.16355443599999986,325812893,22,null,null,null,null,null,null,null],[0.16805485700024292,0.16805287400000002,334761487,23,null,null,null,null,null,null,null],[0.18391187399993214,0.18389842900000009,366349141,25,null,null,null,null,null,null,null],[0.18976665299942397,0.189764539,378011458,26,null,null,null,null,null,null,null],[0.20094363000043813,0.20094126,400275259,27,null,null,null,null,null,null,null],[0.20588823399975809,0.20588032200000006,410124560,28,null,null,null,null,null,null,null],[0.22099266500026715,0.22096891399999974,440212221,30,null,null,null,null,null,null,null],[0.22634645000016462,0.22634404800000008,450877515,31,null,null,null,null,null,null,null],[0.24570820200005983,0.24569896400000024,489444672,33,null,null,null,null,null,null,null],[0.25768690800032346,0.2576787909999996,513306881,35,null,null,null,null,null,null,null],[0.26550675999988016,0.26549695100000026,528883233,36,null,null,null,null,null,null,null],[0.28168039899992436,0.28168020699999996,561106751,38,null,null,null,null,null,null,null],[0.3000370749996364,0.3000333509999997,597666429,40,null,null,null,null,null,null,null],[0.31078128599983756,0.3107652009999997,619068834,42,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0542696540582347e-4,"confIntUDX":1.1349446707542565e-4,"confIntCL":5.0e-2},"estPoint":2.384691264383546e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.3233575049420576e-4,"confIntUDX":1.2240659069284732e-4,"confIntCL":5.0e-2},"estPoint":0.9997718982669127},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.2532732667691477e-3,"confIntUDX":1.5161923492544769e-3,"confIntCL":5.0e-2},"estPoint":-6.157843511237581e-4},"iters":{"estError":{"confIntLDX":1.8985383309628664e-4,"confIntUDX":1.8548652174593325e-4,"confIntCL":5.0e-2},"estPoint":2.39153277614222e-2}}}],"anStdDev":{"estError":{"confIntLDX":5.615478647105846e-5,"confIntUDX":1.0931308737006733e-4,"confIntCL":5.0e-2},"estPoint":2.3985870005862405e-4},"anOutlierVar":{"ovFraction":4.986149584487534e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[2.3371443158384863e-2,2.3380339600115926e-2,2.3389236041846985e-2,2.3398132483578048e-2,2.340702892530911e-2,2.341592536704017e-2,2.3424821808771232e-2,2.3433718250502295e-2,2.3442614692233354e-2,2.3451511133964417e-2,2.346040757569548e-2,2.346930401742654e-2,2.3478200459157602e-2,2.3487096900888665e-2,2.3495993342619724e-2,2.3504889784350787e-2,2.351378622608185e-2,2.352268266781291e-2,2.353157910954397e-2,2.3540475551275034e-2,2.3549371993006094e-2,2.3558268434737156e-2,2.356716487646822e-2,2.357606131819928e-2,2.358495775993034e-2,2.3593854201661404e-2,2.3602750643392463e-2,2.3611647085123526e-2,2.362054352685459e-2,2.3629439968585648e-2,2.363833641031671e-2,2.3647232852047773e-2,2.3656129293778833e-2,2.3665025735509895e-2,2.3673922177240958e-2,2.3682818618972017e-2,2.369171506070308e-2,2.3700611502434143e-2,2.3709507944165202e-2,2.3718404385896265e-2,2.3727300827627328e-2,2.3736197269358387e-2,2.374509371108945e-2,2.3753990152820512e-2,2.376288659455157e-2,2.3771783036282634e-2,2.3780679478013697e-2,2.3789575919744756e-2,2.379847236147582e-2,2.3807368803206882e-2,2.381626524493794e-2,2.3825161686669004e-2,2.3834058128400067e-2,2.3842954570131126e-2,2.385185101186219e-2,2.386074745359325e-2,2.386964389532431e-2,2.3878540337055373e-2,2.3887436778786436e-2,2.38963332205175e-2,2.3905229662248558e-2,2.391412610397962e-2,2.392302254571068e-2,2.3931918987441743e-2,2.3940815429172806e-2,2.394971187090387e-2,2.3958608312634928e-2,2.396750475436599e-2,2.3976401196097053e-2,2.3985297637828112e-2,2.3994194079559175e-2,2.4003090521290238e-2,2.4011986963021297e-2,2.402088340475236e-2,2.4029779846483423e-2,2.4038676288214482e-2,2.4047572729945545e-2,2.4056469171676607e-2,2.4065365613407667e-2,2.407426205513873e-2,2.4083158496869792e-2,2.409205493860085e-2,2.4100951380331914e-2,2.4109847822062977e-2,2.4118744263794036e-2,2.41276407055251e-2,2.413653714725616e-2,2.414543358898722e-2,2.4154330030718284e-2,2.4163226472449346e-2,2.4172122914180406e-2,2.418101935591147e-2,2.418991579764253e-2,2.419881223937359e-2,2.4207708681104653e-2,2.4216605122835716e-2,2.4225501564566775e-2,2.4234398006297838e-2,2.42432944480289e-2,2.425219088975996e-2,2.4261087331491023e-2,2.4269983773222085e-2,2.4278880214953145e-2,2.4287776656684208e-2,2.429667309841527e-2,2.430556954014633e-2,2.4314465981877392e-2,2.4323362423608455e-2,2.4332258865339514e-2,2.4341155307070577e-2,2.435005174880164e-2,2.43589481905327e-2,2.4367844632263762e-2,2.4376741073994825e-2,2.4385637515725884e-2,2.4394533957456947e-2,2.440343039918801e-2,2.441232684091907e-2,2.442122328265013e-2,2.4430119724381194e-2,2.4439016166112253e-2,2.4447912607843316e-2,2.445680904957438e-2,2.4465705491305438e-2,2.44746019330365e-2,2.4483498374767564e-2,2.4492394816498623e-2,2.4501291258229686e-2],"kdeType":"time","kdePDF":[969.3268907095556,969.7035149475997,970.4551990501163,971.5788203698887,973.0697101554875,974.9216717295551,977.1270045855246,979.6765342831832,982.5596479951954,985.7643355294048,989.2772356256795,993.0836873013857,997.1677859964562,1001.5124442475768,1006.0994566014324,1010.9095684592555,1015.9225485293194,1021.1172645504552,1026.4717619383418,1031.9633449971332,1037.5686603320748,1043.2637820940226,1049.0242986842884,1054.8254005478655,1060.641968684872,1066.448663513818,1072.2200137260818,1077.9305047785447,1083.554666680686,1089.0671607433583,1094.4428649688766,1099.6569577757969,1104.6849997666639,1109.5030132629565,1114.087559348273,1118.4158121783103,1122.4656303342906,1126.2156250149592,1129.6452248810256,1132.734737384782,1135.465406436462,1137.8194662776027,1139.780191450091,1141.3319427676643,1142.4602092141988,1143.151645710245,1143.3941067056578,1143.1766755720387,1142.4896897837286,1141.324761890513,1139.6747962987517,1137.5340018905526,1134.897900522651,1131.7633314580928,1128.128451794407,1123.9927329620102,1119.3569533758568,1114.2231873321757,1108.5947902502799,1102.4763803672042,1095.873817000148,1088.794175498636,1081.245719014775,1073.2378672263028,1064.7811621529986,1055.8872312128738,1046.5687476700082,1036.839388631338,1026.7137907548217,1016.2075038364884,1005.33694244864,994.1193358061831,982.5726760423997,970.7156650796904,958.5676602845599,946.1486190996941,933.4790428489173,920.5799199134742,907.472668479991,894.1790790619275,880.7212569968967,867.1215651222017,853.4025668298644,839.586969700616,825.6975699133234,811.7571976224896,797.7886634913338,783.8147065618766,769.8579436360491,755.9408203334068,742.0855639812977,728.3141384825406,714.6482012936629,701.1090626337417,687.7176470297745,674.4944572895516,661.4595409770977,648.6324594492095,636.0322594943761,623.6774475977357,611.5859668376994,599.7751764017407,588.2618336906837,577.0620789628656,566.1914224519323,555.6647338749659,545.496234231284,535.6994897768194,526.2874080445964,517.272235768688,508.66555855728706,500.47830215030393,492.7207350883447,485.4024726131353,478.53248161453166,472.1190864362607,466.1699753515287,460.6922075206466,455.69222024583786,451.17583634342736,447.1482714605948,443.61414117275075,440.57746770828635,438.0416861598256,436.00965005505424,434.4836361755732,433.465348528817,432.95592139577457]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":1,"reportName":"Int/IntMap/random","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.5541426000017964e-2,2.554147699999998e-2,50879350,1,null,null,null,null,null,null,null],[4.806923999967694e-2,4.806906600000005e-2,95753877,2,null,null,null,null,null,null,null],[7.167264300005627e-2,7.167202199999956e-2,142771087,3,null,null,null,null,null,null,null],[9.762854899963713e-2,9.762766700000025e-2,194475137,4,null,null,null,null,null,null,null],[0.12057168999945134,0.12056434900000035,240176454,5,null,null,null,null,null,null,null],[0.1407935830002316,0.1407865450000001,280458875,6,null,null,null,null,null,null,null],[0.16496227300012833,0.16496033300000068,328601328,7,null,null,null,null,null,null,null],[0.18833427299978212,0.1883161900000001,375157510,8,null,null,null,null,null,null,null],[0.21292828399964492,0.21292578200000012,424148246,9,null,null,null,null,null,null,null],[0.23763062199941487,0.23762774500000017,473354739,10,null,null,null,null,null,null,null],[0.26107708899962745,0.2610681640000001,520059293,11,null,null,null,null,null,null,null],[0.2858837960002347,0.28586835500000074,569473933,12,null,null,null,null,null,null,null],[0.3072580120006023,0.30724835599999967,612050130,13,null,null,null,null,null,null,null],[0.33692351300032897,0.33690281200000083,671143371,14,null,null,null,null,null,null,null],[0.3573156359998393,0.35731314900000033,711767792,15,null,null,null,null,null,null,null],[0.3800062059999618,0.3800015489999993,756963099,16,null,null,null,null,null,null,null],[0.40747259199997643,0.4074561369999987,811675392,17,null,null,null,null,null,null,null],[0.43036303000008047,0.4303513530000007,857272424,18,null,null,null,null,null,null,null],[0.4577799150001738,0.4577572090000004,911886498,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":9.279852681798491e-5,"confIntUDX":1.2486348868947367e-4,"confIntCL":5.0e-2},"estPoint":7.604115020994802e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.906091292551817e-3,"confIntUDX":3.649340090298714e-3,"confIntCL":5.0e-2},"estPoint":0.9956959306868398},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.6865724837684237e-3,"confIntUDX":1.7813090709538108e-3,"confIntCL":5.0e-2},"estPoint":-3.075320241693394e-3},"iters":{"estError":{"confIntLDX":1.5213056849250773e-4,"confIntUDX":2.179650372497368e-4,"confIntCL":5.0e-2},"estPoint":7.859752272345666e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.0005736098852002e-4,"confIntUDX":1.4607896645360828e-4,"confIntCL":5.0e-2},"estPoint":3.0646956799213783e-4},"anOutlierVar":{"ovFraction":0.16765992872329774,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[6.979644702203207e-3,6.993795983435156e-3,7.007947264667104e-3,7.022098545899053e-3,7.036249827131001e-3,7.050401108362949e-3,7.064552389594898e-3,7.078703670826847e-3,7.0928549520587955e-3,7.107006233290743e-3,7.121157514522692e-3,7.135308795754641e-3,7.149460076986589e-3,7.163611358218538e-3,7.177762639450486e-3,7.191913920682434e-3,7.206065201914383e-3,7.220216483146332e-3,7.23436776437828e-3,7.248519045610228e-3,7.262670326842177e-3,7.276821608074126e-3,7.290972889306074e-3,7.305124170538023e-3,7.319275451769971e-3,7.333426733001919e-3,7.347578014233868e-3,7.361729295465817e-3,7.375880576697765e-3,7.390031857929713e-3,7.404183139161662e-3,7.418334420393611e-3,7.432485701625559e-3,7.446636982857508e-3,7.460788264089456e-3,7.474939545321404e-3,7.489090826553353e-3,7.503242107785302e-3,7.51739338901725e-3,7.531544670249198e-3,7.545695951481147e-3,7.559847232713095e-3,7.573998513945044e-3,7.588149795176993e-3,7.6023010764089405e-3,7.616452357640889e-3,7.630603638872838e-3,7.644754920104787e-3,7.658906201336735e-3,7.673057482568683e-3,7.687208763800632e-3,7.70136004503258e-3,7.715511326264529e-3,7.729662607496478e-3,7.743813888728426e-3,7.757965169960374e-3,7.772116451192323e-3,7.786267732424272e-3,7.80041901365622e-3,7.814570294888168e-3,7.828721576120117e-3,7.842872857352065e-3,7.857024138584013e-3,7.871175419815963e-3,7.88532670104791e-3,7.89947798227986e-3,7.913629263511808e-3,7.927780544743756e-3,7.941931825975706e-3,7.956083107207653e-3,7.970234388439601e-3,7.984385669671551e-3,7.998536950903499e-3,8.012688232135447e-3,8.026839513367396e-3,8.040990794599344e-3,8.055142075831292e-3,8.069293357063242e-3,8.08344463829519e-3,8.097595919527138e-3,8.111747200759087e-3,8.125898481991035e-3,8.140049763222983e-3,8.154201044454933e-3,8.16835232568688e-3,8.182503606918828e-3,8.196654888150778e-3,8.210806169382726e-3,8.224957450614676e-3,8.239108731846623e-3,8.253260013078571e-3,8.26741129431052e-3,8.281562575542469e-3,8.295713856774417e-3,8.309865138006366e-3,8.324016419238314e-3,8.338167700470262e-3,8.352318981702212e-3,8.36647026293416e-3,8.380621544166108e-3,8.394772825398057e-3,8.408924106630005e-3,8.423075387861953e-3,8.437226669093903e-3,8.45137795032585e-3,8.465529231557798e-3,8.479680512789748e-3,8.493831794021696e-3,8.507983075253644e-3,8.522134356485593e-3,8.536285637717541e-3,8.550436918949491e-3,8.564588200181439e-3,8.578739481413387e-3,8.592890762645335e-3,8.607042043877284e-3,8.621193325109232e-3,8.635344606341182e-3,8.64949588757313e-3,8.663647168805078e-3,8.677798450037027e-3,8.691949731268975e-3,8.706101012500923e-3,8.720252293732873e-3,8.73440357496482e-3,8.748554856196768e-3,8.762706137428718e-3,8.776857418660666e-3],"kdeType":"time","kdePDF":[2.7795723032893136,5.600622738918413,12.803541343009115,27.52535688928007,54.245717892452625,97.97269084901994,162.77854840243896,250.1239227261839,357.7751285154487,479.90308579090583,608.178768616745,733.0474335560667,844.6219360579805,933.6032734114207,993.1051401895346,1021.2850369578108,1022.9857767242689,1008.1763008011659,986.9669485148768,963.9476097051984,935.7048137845438,893.2973467550463,827.9592293294309,736.3914188886027,622.9567641278716,498.50587176223365,377.30219919373485,273.7853851094067,200.28130746313514,165.94599937114162,176.5032604783209,233.94538256067221,335.707219920663,473.927986976819,636.484266658851,811.270784192961,993.1255249134109,1189.7852020792357,1421.6369595395943,1712.0027663907226,2070.2339681977764,2475.84104168331,2873.6978998411364,3185.773168224762,3336.1693514789763,3278.8999077702233,3016.2343989945884,2600.096019364657,2116.7534521405396,1661.6084714106578,1313.3889045753835,1115.4242019138953,1068.040393346764,1132.7638712135933,1246.6148618932743,1342.5641663424235,1370.037287677908,1308.5525902302368,1169.725834097552,987.624417693858,802.3974229335422,644.5846660995325,526.414126880675,442.53310070693703,378.00299164921944,318.315856972742,256.17240659738445,192.55946256857746,133.2920994369606,84.29089470359489,48.486442060445654,25.312269828986544,11.978173537282396,5.134803507122528,1.9933598540969082,0.7006509355579221,0.22298653668158575,6.439315907883615e-2,1.7595513704945033e-2,7.908806665181642e-3,1.7594785496209096e-2,6.438793965981933e-2,0.22295311077966698,0.700456853293203,1.9923376402239,5.129918151803871,11.956979022385074,25.228760408252633,48.187430061288765,83.31726880296911,130.40663611943782,184.76842925471055,236.98412172141198,275.15292740296775,289.19610143786826,275.15292741281826,236.98412180603245,184.76842990614935,130.40664065872127,83.31729743579987,48.187593556302616,25.22960550809592,11.960933368319566,5.146667740730532,2.056561432162932,0.9233767918281218,0.9233767918284924,2.056561432162685,5.1466677407312735,11.960933368319504,25.229605508096753,48.18759355630268,83.31729743580114,130.40664065873042,184.76842990625147,236.98412180709252,275.1529274227712,289.1961015224981,275.1529280544073,236.98412626069674,184.76845788755006,130.40679961455365,83.3181139038632,48.191384417073884,25.24551008074994,12.021203455810904,5.352842545004755,2.6927893027822174]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":2,"reportName":"Int/IntMap/revsorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":2,"samplesSeen":31,"lowSevere":0},"reportMeasured":[[7.5310030006221496e-3,7.531241000000577e-3,15002629,1,null,null,null,null,null,null,null],[1.5792101000442926e-2,1.579239800000032e-2,31458871,2,null,null,null,null,null,null,null],[2.2902593000253546e-2,2.2902477000000587e-2,45622222,3,null,null,null,null,null,null,null],[3.053714999987278e-2,3.053694100000115e-2,60829969,4,null,null,null,null,null,null,null],[3.641659799995978e-2,3.6416337000000354e-2,72541814,5,null,null,null,null,null,null,null],[4.357454299952224e-2,4.357419599999979e-2,86800135,6,null,null,null,null,null,null,null],[4.990588700002263e-2,4.9905448999998825e-2,99411999,7,null,null,null,null,null,null,null],[5.772824099949503e-2,5.772770399999949e-2,114994010,8,null,null,null,null,null,null,null],[6.455245799952536e-2,6.454544900000059e-2,128587691,9,null,null,null,null,null,null,null],[7.194233400059602e-2,7.194153200000031e-2,143307897,10,null,null,null,null,null,null,null],[8.393108999916876e-2,8.39301790000011e-2,167189101,11,null,null,null,null,null,null,null],[9.109348099991621e-2,9.109265200000038e-2,181456822,12,null,null,null,null,null,null,null],[9.726328600027045e-2,9.725631699999937e-2,193746815,13,null,null,null,null,null,null,null],[0.10526152399961575,0.10525331700000073,209678890,14,null,null,null,null,null,null,null],[0.11368188699998427,0.1136805660000011,226452054,15,null,null,null,null,null,null,null],[0.12165439299951686,0.12165304400000032,242333043,16,null,null,null,null,null,null,null],[0.13188344099944516,0.1318819720000004,262709306,17,null,null,null,null,null,null,null],[0.13716816299984202,0.1371667710000004,273236445,18,null,null,null,null,null,null,null],[0.14272178200008057,0.14271470299999933,284299068,19,null,null,null,null,null,null,null],[0.1465893770000548,0.14658170299999895,292002893,20,null,null,null,null,null,null,null],[0.15938492900022538,0.1593830280000006,317491219,21,null,null,null,null,null,null,null],[0.16804903100000956,0.16804709100000004,334750019,22,null,null,null,null,null,null,null],[0.17630220299997745,0.1763001269999993,351190116,23,null,null,null,null,null,null,null],[0.18966936300057569,0.1896614809999999,377817265,25,null,null,null,null,null,null,null],[0.2243043319995195,0.22429415000000041,446809250,26,null,null,null,null,null,null,null],[0.2129039740002554,0.2128824809999994,424099800,27,null,null,null,null,null,null,null],[0.2171951979998994,0.21719259800000046,432647863,28,null,null,null,null,null,null,null],[0.23364544299965928,0.23364259599999926,465416257,30,null,null,null,null,null,null,null],[0.25729104099991673,0.25727712700000005,512521495,31,null,null,null,null,null,null,null],[0.2514050470008442,0.2513960759999989,500792689,33,null,null,null,null,null,null,null],[0.26684604000001855,0.26684281300000023,531551080,35,null,null,null,null,null,null,null],[0.27907214100014244,0.2790688120000002,555905224,36,null,null,null,null,null,null,null],[0.2965459089991782,0.2965244459999994,590712411,38,null,null,null,null,null,null,null],[0.3030382990000362,0.30302147999999995,603644981,40,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":4.195674442251593e-5,"confIntUDX":7.042809224307514e-5,"confIntCL":5.0e-2},"estPoint":1.7274672713066576e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4227653629372838e-4,"confIntUDX":9.171603223023794e-5,"confIntCL":5.0e-2},"estPoint":0.9998546641366959},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":7.010875088004954e-4,"confIntUDX":7.005196404700031e-4,"confIntCL":5.0e-2},"estPoint":8.778527701891882e-5},"iters":{"estError":{"confIntLDX":8.079879093980322e-5,"confIntUDX":7.620113752610305e-5,"confIntCL":5.0e-2},"estPoint":1.7253165168961873e-2}}}],"anStdDev":{"estError":{"confIntLDX":4.619004871269703e-5,"confIntUDX":6.924535064051809e-5,"confIntCL":5.0e-2},"estPoint":1.3506195745557274e-4},"anOutlierVar":{"ovFraction":4.15879017013232e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.699506592778764e-2,1.7000972853250158e-2,1.7006879778712677e-2,1.7012786704175196e-2,1.7018693629637715e-2,1.7024600555100234e-2,1.7030507480562757e-2,1.7036414406025276e-2,1.7042321331487795e-2,1.7048228256950314e-2,1.7054135182412833e-2,1.7060042107875352e-2,1.706594903333787e-2,1.707185595880039e-2,1.707776288426291e-2,1.708366980972543e-2,1.7089576735187947e-2,1.7095483660650466e-2,1.710139058611299e-2,1.7107297511575508e-2,1.7113204437038027e-2,1.7119111362500546e-2,1.7125018287963065e-2,1.7130925213425584e-2,1.7136832138888104e-2,1.7142739064350623e-2,1.714864598981314e-2,1.715455291527566e-2,1.716045984073818e-2,1.7166366766200702e-2,1.717227369166322e-2,1.717818061712574e-2,1.718408754258826e-2,1.718999446805078e-2,1.7195901393513298e-2,1.7201808318975817e-2,1.7207715244438336e-2,1.7213622169900855e-2,1.7219529095363374e-2,1.7225436020825893e-2,1.7231342946288412e-2,1.7237249871750935e-2,1.7243156797213454e-2,1.7249063722675973e-2,1.7254970648138492e-2,1.726087757360101e-2,1.726678449906353e-2,1.727269142452605e-2,1.727859834998857e-2,1.7284505275451088e-2,1.7290412200913607e-2,1.7296319126376126e-2,1.730222605183865e-2,1.7308132977301167e-2,1.7314039902763687e-2,1.7319946828226206e-2,1.7325853753688725e-2,1.7331760679151244e-2,1.7337667604613763e-2,1.7343574530076282e-2,1.73494814555388e-2,1.735538838100132e-2,1.736129530646384e-2,1.736720223192636e-2,1.737310915738888e-2,1.73790160828514e-2,1.738492300831392e-2,1.7390829933776438e-2,1.7396736859238957e-2,1.7402643784701476e-2,1.7408550710163995e-2,1.7414457635626514e-2,1.7420364561089034e-2,1.7426271486551553e-2,1.743217841201407e-2,1.7438085337476594e-2,1.7443992262939113e-2,1.7449899188401632e-2,1.745580611386415e-2,1.746171303932667e-2,1.746761996478919e-2,1.747352689025171e-2,1.7479433815714228e-2,1.7485340741176747e-2,1.7491247666639266e-2,1.7497154592101785e-2,1.7503061517564304e-2,1.7508968443026827e-2,1.7514875368489346e-2,1.7520782293951865e-2,1.7526689219414384e-2,1.7532596144876903e-2,1.7538503070339422e-2,1.754440999580194e-2,1.755031692126446e-2,1.755622384672698e-2,1.75621307721895e-2,1.7568037697652018e-2,1.757394462311454e-2,1.757985154857706e-2,1.758575847403958e-2,1.7591665399502097e-2,1.7597572324964617e-2,1.7603479250427136e-2,1.7609386175889655e-2,1.7615293101352174e-2,1.7621200026814693e-2,1.7627106952277212e-2,1.763301387773973e-2,1.763892080320225e-2,1.7644827728664773e-2,1.7650734654127292e-2,1.765664157958981e-2,1.766254850505233e-2,1.766845543051485e-2,1.7674362355977368e-2,1.7680269281439887e-2,1.7686176206902406e-2,1.7692083132364925e-2,1.7697990057827444e-2,1.7703896983289964e-2,1.7709803908752486e-2,1.7715710834215005e-2,1.7721617759677524e-2,1.7727524685140043e-2,1.7733431610602562e-2,1.773933853606508e-2,1.77452454615276e-2],"kdeType":"time","kdePDF":[903.2314303503553,907.3546793762542,915.5872093668958,927.9012564080563,944.2555895913632,964.5959663915735,988.8556717695703,1016.9560882993056,1048.807238155537,1084.3082353045666,1123.3475880248732,1165.8032980328753,1211.542712847758,1260.4221022068978,1312.285946723254,1366.9659467387323,1424.2797804859406,1484.0296621131074,1546.0007706697277,1609.9596395953456,1675.6526114501344,1742.8044735311173,1811.1173957587903,1880.2702921430148,1949.91872085936,2019.6954254007885,2089.211600647053,2158.0589435678,2225.8125195059015,2292.0344427112364,2356.278335379331,2418.094494429256,2477.035661264138,2532.6632584443346,2584.553930149879,2632.306201945743,2675.5470608932483,2713.938250378404,2747.1820757075534,2775.026526718459,2797.2695421326785,2813.7622664933797,2824.411183277734,2829.179045801061,2828.0845692319012,2821.2008906168144,2808.652847375272,2790.6131663688293,2767.297693563332,2738.959826856815,2705.884340463947,2668.3808072806055,2626.7768352189382,2581.4113343246536,2532.628023689037,2480.769371267062,2426.1711365845226,2369.157657145662,2310.0379855610176,2249.1029475951213,2186.6231531583408,2122.8479544145644,2058.0053092430235,1992.3024757274522,1925.9274353815345,1859.0509204308514,1791.8289043338807,1724.405405205004,1656.9154489502273,1589.4880424952944,1522.2490169545167,1455.3236152081631,1388.8387171903398,1322.9246181782119,1257.7162993816603,1193.3541550159553,1129.9841646905577,1067.7575233502569,1006.829762272096,947.3594130302906,889.5062813486888,833.4294090213098,779.2848094425376,727.2230657851351,677.3868806964883,629.9086628977979,584.9082297238575,542.4906959718971,502.74460901894435,465.7403786147103,431.52903763622834,400.1413579321718,371.5873336501709,345.8560335089558,322.9158136346358,302.7148740190791,285.1821344787435,270.22840021373554,257.7477826397283,247.61933798828258,239.70888410813635,233.87095479905062,229.95085071891262,227.7867462866172,227.2118129454696,228.05632057409306,230.14968068753703,233.3223973459066,237.40789439274795,242.24419080855145,247.67539961959415,253.55302997524288,259.7370767050042,266.09688686730993,272.5117984443193,278.8715523168829,285.0764848234395,291.03751437746104,296.675941568819,301.92308766197834,306.71980117764093,311.0158660624836,314.7693475974766,317.9459134942187,320.5181674620074,322.4650308444052,323.77120474564873,324.4267404939195]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":3,"reportName":"Int/Map/sorted","reportOutliers":{"highSevere":0,"highMild":1,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.7190916000799916e-2,1.7190850000000424e-2,34244620,1,null,null,null,null,null,null,null],[3.536546100076521e-2,3.5365293000001685e-2,70448014,2,null,null,null,null,null,null,null],[5.1582289000180026e-2,5.1581824999999526e-2,102751330,3,null,null,null,null,null,null,null],[6.899046000035014e-2,6.897691100000003e-2,137427964,4,null,null,null,null,null,null,null],[8.624875599980442e-2,8.624786600000078e-2,171806095,5,null,null,null,null,null,null,null],[0.10438896699997713,0.10438176299999924,207940955,6,null,null,null,null,null,null,null],[0.12082024000028468,0.12081882300000046,240671314,7,null,null,null,null,null,null,null],[0.13798402700012957,0.13798251700000108,274861495,8,null,null,null,null,null,null,null],[0.15351822800039372,0.15351653600000148,305805176,9,null,null,null,null,null,null,null],[0.172660876000009,0.17265884400000076,343936651,10,null,null,null,null,null,null,null],[0.19098327299980156,0.19098118800000208,380434741,11,null,null,null,null,null,null,null],[0.20640635900053894,0.20639385600000182,411156552,12,null,null,null,null,null,null,null],[0.2225307620001331,0.2225179879999999,443276027,13,null,null,null,null,null,null,null],[0.2438478590001978,0.2438456120000012,485740553,14,null,null,null,null,null,null,null],[0.2572937049999382,0.2572906049999979,512523002,15,null,null,null,null,null,null,null],[0.27724424300049577,0.2772311639999998,552263544,16,null,null,null,null,null,null,null],[0.2927910759999577,0.2927874999999993,583232752,17,null,null,null,null,null,null,null],[0.31373627999983,0.3137323649999999,624954921,18,null,null,null,null,null,null,null],[0.3297072500008653,0.32969854899999973,656770042,19,null,null,null,null,null,null,null],[0.3418994690000545,0.3418831410000003,681055397,20,null,null,null,null,null,null,null],[0.36184869699991395,0.36184608900000015,720797430,21,null,null,null,null,null,null,null],[0.3805361780005114,0.38051474400000274,758019888,22,null,null,null,null,null,null,null],[0.3963172769999801,0.3963122739999996,789454030,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":2.1347617984970174e-4,"confIntUDX":5.594672966986319e-4,"confIntCL":5.0e-2},"estPoint":3.655746276191305e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.9026630733968153e-3,"confIntUDX":2.248655595314175e-3,"confIntCL":5.0e-2},"estPoint":0.9977042076649039},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":9.563660332681363e-3,"confIntUDX":5.720838236242257e-3,"confIntCL":5.0e-2},"estPoint":-3.927389575096699e-3},"iters":{"estError":{"confIntLDX":9.702000493177973e-4,"confIntUDX":1.4477852307179795e-3,"confIntCL":5.0e-2},"estPoint":3.710133781766325e-2}}}],"anStdDev":{"estError":{"confIntLDX":3.6480456791067144e-4,"confIntUDX":4.8486309032258305e-4,"confIntCL":5.0e-2},"estPoint":6.467792559215952e-4},"anOutlierVar":{"ovFraction":5.859375e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.566617047516729e-2,3.569160173737097e-2,3.5717032999574655e-2,3.574246426177834e-2,3.576789552398202e-2,3.57933267861857e-2,3.581875804838938e-2,3.5844189310593064e-2,3.5869620572796745e-2,3.589505183500043e-2,3.592048309720411e-2,3.594591435940779e-2,3.597134562161147e-2,3.5996776883815154e-2,3.6022208146018836e-2,3.604763940822252e-2,3.60730706704262e-2,3.609850193262988e-2,3.612393319483356e-2,3.6149364457037245e-2,3.6174795719240926e-2,3.620022698144461e-2,3.622565824364829e-2,3.625108950585197e-2,3.627652076805565e-2,3.6301952030259335e-2,3.632738329246302e-2,3.63528145546667e-2,3.637824581687038e-2,3.640367707907406e-2,3.6429108341277744e-2,3.6454539603481426e-2,3.647997086568511e-2,3.6505402127888796e-2,3.653083339009248e-2,3.655626465229616e-2,3.658169591449984e-2,3.660712717670352e-2,3.6632558438907205e-2,3.665798970111089e-2,3.668342096331457e-2,3.670885222551825e-2,3.673428348772193e-2,3.6759714749925614e-2,3.6785146012129295e-2,3.681057727433298e-2,3.683600853653666e-2,3.686143979874034e-2,3.688687106094402e-2,3.6912302323147704e-2,3.6937733585351386e-2,3.696316484755507e-2,3.698859610975875e-2,3.701402737196243e-2,3.703945863416611e-2,3.7064889896369795e-2,3.7090321158573476e-2,3.711575242077716e-2,3.714118368298084e-2,3.716661494518452e-2,3.71920462073882e-2,3.7217477469591885e-2,3.724290873179557e-2,3.726833999399925e-2,3.729377125620293e-2,3.731920251840661e-2,3.7344633780610294e-2,3.7370065042813976e-2,3.739549630501766e-2,3.742092756722134e-2,3.744635882942502e-2,3.74717900916287e-2,3.7497221353832384e-2,3.7522652616036066e-2,3.754808387823975e-2,3.757351514044343e-2,3.759894640264711e-2,3.762437766485079e-2,3.7649808927054475e-2,3.7675240189258156e-2,3.770067145146184e-2,3.772610271366552e-2,3.77515339758692e-2,3.7776965238072883e-2,3.7802396500276565e-2,3.782782776248025e-2,3.785325902468393e-2,3.787869028688761e-2,3.790412154909129e-2,3.7929552811294974e-2,3.7954984073498656e-2,3.798041533570234e-2,3.800584659790602e-2,3.80312778601097e-2,3.805670912231339e-2,3.808214038451707e-2,3.810757164672075e-2,3.8133002908924435e-2,3.815843417112812e-2,3.81838654333318e-2,3.820929669553548e-2,3.823472795773916e-2,3.8260159219942844e-2,3.8285590482146525e-2,3.831102174435021e-2,3.833645300655389e-2,3.836188426875757e-2,3.838731553096125e-2,3.8412746793164934e-2,3.8438178055368616e-2,3.84636093175723e-2,3.848904057977598e-2,3.851447184197966e-2,3.853990310418334e-2,3.8565334366387025e-2,3.8590765628590706e-2,3.861619689079439e-2,3.864162815299807e-2,3.866705941520175e-2,3.869249067740543e-2,3.8717921939609115e-2,3.87433532018128e-2,3.876878446401648e-2,3.879421572622016e-2,3.881964698842384e-2,3.8845078250627524e-2,3.8870509512831206e-2,3.889594077503489e-2],"kdeType":"time","kdePDF":[361.50598587075854,365.07108082850607,372.15409014823763,382.6614578773666,396.4548291531921,413.35333257870536,433.13647731701764,455.5475551292192,480.2974277678315,507.06857967001116,535.5193245164593,565.2880708517991,595.9975747855894,627.259134422521,658.6767083555798,689.8509664284977,720.3833023028009,749.8798518043664,777.9555668308395,804.2383908019771,828.3735681348674,850.0280978414596,868.8953117620878,884.6995236021503,897.200658832244,906.1987409736823,911.538080200411,913.1109886827475,910.8608362931606,904.7842620338585,894.9323717138965,881.4107808098067,864.3784018030071,844.0449252946383,820.667000699856,794.543181568267,766.007758530481,735.4236555594277,703.1746090899805,669.6568817037196,635.2707806489007,600.4122556155888,565.4648402399026,530.7921791429194,496.7313491697952,463.58714275335853,431.6274361640577,401.0797189937993,372.1288164135175,344.9157948521823,319.5380063682803,296.0501979557201,274.4665894447495,254.7638070193333,236.88454775081607,220.74184282436906,206.22378221732336,193.19856060637414,181.5197027188406,171.03132610744038,161.57330072696823,152.9861683501343,145.1156915739266,137.816912727805,130.95761800294818,124.42112183457995,118.10831078412852,111.93891417365309,105.85199932015972,99.80572079877601,93.77638386595781,87.7569100506667,81.7548161360069,75.78983476401099,69.89131460358166,64.09553987620744,58.44310307710834,52.97645157879804,47.73770957987417,42.7668530719855,38.100288889886244,33.76986131546387,29.8022828906214,26.218961624090618,23.036175926758894,20.26553229991406,17.91462957813148,15.987847584049335,14.487177261494077,13.413013339077684,12.764838774694477,12.541741958294054,12.742722154703738,13.366755171694896,14.412608956360707,15.87841697239886,17.761035007428582,20.055223710368747,22.75271386045115,25.841223314633805,29.30350298204912,33.11649330679133,37.250671997328446,41.66966770541626,46.33020287829015,51.18241226910942,56.17056216522839,61.2341702697997,66.30949874162484,71.33136490352015,76.23518756611239,80.95916389168455,85.44645429694896,89.64724287894381,93.52053963314634,97.03559911409441,100.17284824579292,102.92424301437846,105.29300827326556,107.29275465032045,108.94600878641425,110.28223471164215,111.3354618279852,112.14166563308969,112.7360683519384,113.1505360957034,113.41124597809937,113.53678072934825]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":4,"reportName":"Int/Map/random","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":16,"lowSevere":0},"reportMeasured":[[3.593531800015626e-2,3.593526200000241e-2,71583526,1,null,null,null,null,null,null,null],[7.46233879999636e-2,7.462270099999913e-2,148648939,2,null,null,null,null,null,null,null],[0.11060378000001947,0.11059710800000033,220321154,3,null,null,null,null,null,null,null],[0.146031473000221,0.14602284500000096,290892649,4,null,null,null,null,null,null,null],[0.17995737199998985,0.17995529299999902,358471285,5,null,null,null,null,null,null,null],[0.2193120470001304,0.21930498899999762,436864482,6,null,null,null,null,null,null,null],[0.25483090699981403,0.2548230740000008,507617841,7,null,null,null,null,null,null,null],[0.2901135530000829,0.29010437200000183,577899954,8,null,null,null,null,null,null,null],[0.32517910299975483,0.3251750989999991,647748810,9,null,null,null,null,null,null,null],[0.36648852199959947,0.36647592199999934,730036353,10,null,null,null,null,null,null,null],[0.39937830500002747,0.3993620789999994,795552153,11,null,null,null,null,null,null,null],[0.4375588879993302,0.43754683299999897,871607183,12,null,null,null,null,null,null,null],[0.4715958309998314,0.47157841499999975,939407261,13,null,null,null,null,null,null,null],[0.5061948460006533,0.5061703309999999,1008327654,14,null,null,null,null,null,null,null],[0.5471116850003455,0.5470777379999987,1089832954,15,null,null,null,null,null,null,null],[0.6180286920007347,0.6180145259999996,1231097607,16,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":6.001059954778218e-5,"confIntUDX":5.964893258324569e-5,"confIntCL":5.0e-2},"estPoint":1.7112117805356066e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.6449149465879174e-4,"confIntUDX":1.6003092637850713e-4,"confIntCL":5.0e-2},"estPoint":0.9997492243421494},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.0694739224977176e-3,"confIntUDX":1.0027602772205149e-3,"confIntCL":5.0e-2},"estPoint":-1.7352889210684763e-5},"iters":{"estError":{"confIntLDX":1.212230361220222e-4,"confIntUDX":1.2342413863718898e-4,"confIntCL":5.0e-2},"estPoint":1.7100347726272433e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.315984134498294e-5,"confIntUDX":2.7289346932400643e-5,"confIntCL":5.0e-2},"estPoint":1.4683004543950413e-4},"anOutlierVar":{"ovFraction":4.158790170132319e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.683523656425201e-2,1.683986938832499e-2,1.684450221239797e-2,1.6849135036470952e-2,1.6853767860543933e-2,1.6858400684616914e-2,1.6863033508689895e-2,1.6867666332762873e-2,1.6872299156835854e-2,1.6876931980908835e-2,1.6881564804981816e-2,1.6886197629054796e-2,1.6890830453127777e-2,1.689546327720076e-2,1.690009610127374e-2,1.690472892534672e-2,1.69093617494197e-2,1.6913994573492682e-2,1.6918627397565663e-2,1.692326022163864e-2,1.692789304571162e-2,1.6932525869784602e-2,1.6937158693857583e-2,1.6941791517930564e-2,1.6946424342003545e-2,1.6951057166076526e-2,1.6955689990149507e-2,1.6960322814222488e-2,1.696495563829547e-2,1.696958846236845e-2,1.697422128644143e-2,1.697885411051441e-2,1.698348693458739e-2,1.698811975866037e-2,1.699275258273335e-2,1.6997385406806332e-2,1.7002018230879313e-2,1.7006651054952294e-2,1.7011283879025275e-2,1.7015916703098256e-2,1.7020549527171237e-2,1.7025182351244218e-2,1.70298151753172e-2,1.703444799939018e-2,1.703908082346316e-2,1.7043713647536138e-2,1.704834647160912e-2,1.70529792956821e-2,1.705761211975508e-2,1.706224494382806e-2,1.7066877767901042e-2,1.7071510591974023e-2,1.7076143416047004e-2,1.7080776240119985e-2,1.7085409064192966e-2,1.7090041888265947e-2,1.7094674712338928e-2,1.709930753641191e-2,1.7103940360484887e-2,1.7108573184557867e-2,1.711320600863085e-2,1.711783883270383e-2,1.712247165677681e-2,1.712710448084979e-2,1.7131737304922772e-2,1.7136370128995753e-2,1.7141002953068734e-2,1.7145635777141715e-2,1.7150268601214696e-2,1.7154901425287677e-2,1.7159534249360654e-2,1.7164167073433635e-2,1.7168799897506616e-2,1.7173432721579597e-2,1.7178065545652578e-2,1.718269836972556e-2,1.718733119379854e-2,1.719196401787152e-2,1.71965968419445e-2,1.7201229666017483e-2,1.7205862490090464e-2,1.7210495314163445e-2,1.7215128138236425e-2,1.7219760962309403e-2,1.7224393786382384e-2,1.7229026610455365e-2,1.7233659434528346e-2,1.7238292258601327e-2,1.7242925082674308e-2,1.724755790674729e-2,1.725219073082027e-2,1.725682355489325e-2,1.726145637896623e-2,1.7266089203039212e-2,1.7270722027112193e-2,1.7275354851185174e-2,1.727998767525815e-2,1.7284620499331133e-2,1.7289253323404113e-2,1.7293886147477094e-2,1.7298518971550075e-2,1.7303151795623056e-2,1.7307784619696037e-2,1.7312417443769018e-2,1.7317050267842e-2,1.732168309191498e-2,1.732631591598796e-2,1.7330948740060942e-2,1.733558156413392e-2,1.73402143882069e-2,1.734484721227988e-2,1.7349480036352862e-2,1.7354112860425843e-2,1.7358745684498824e-2,1.7363378508571805e-2,1.7368011332644786e-2,1.7372644156717767e-2,1.7377276980790748e-2,1.738190980486373e-2,1.738654262893671e-2,1.739117545300969e-2,1.7395808277082668e-2,1.740044110115565e-2,1.740507392522863e-2,1.740970674930161e-2,1.7414339573374592e-2,1.7418972397447573e-2,1.7423605221520554e-2],"kdeType":"time","kdePDF":[1771.4963327638438,1771.6722242793498,1772.0232266406217,1772.5477818322756,1773.2435611217943,1774.1074749532436,1775.1356860477692,1776.323625633653,1777.666012710568,1779.156876235194,1780.7895800988072,1782.5568507518744,1784.4508073162085,1786.4629940119994,1788.5844147150888,1790.8055694493346,1793.1164926098245,1795.5067927051784,1797.965693401217,1800.4820756439267,1803.0445206369432,1805.6413534476847,1808.260687016838,1810.8904663480264,1813.5185126582376,1816.1325672748178,1818.7203350715456,1821.2695272443864,1823.7679032369,1826.2033116358787,1828.5637298694542,1830.8373025525918,1833.0123783384074,1835.0775451479954,1837.0216636663195,1838.8338990070258,1840.5037504646803,1842.0210792887378,1843.3761344294164,1844.559576221393,1845.562497986745,1846.3764455537098,1846.993434702448,1847.4059665630248,1847.6070410040745,1847.5901680630375,1847.3493774803221,1846.8792264101996,1846.174805390547,1845.2317426617228,1844.0462069317716,1842.614908690826,1840.9351001819236,1839.0045741385118,1836.8216614006578,1834.385227522428,1831.694668482039,1828.7499056043719,1825.5513798021057,1822.100045237422,1818.3973625007175,1814.4452913964199,1810.246283418628,1805.803273991295,1801.1196745388406,1796.1993644438219,1791.0466829384525,1785.6664209667376,1780.0638130436046,1774.2445291271124,1768.2146665094224,1761.9807417220936,1755.5496824413574,1748.928819369605,1742.1258780603118,1735.1489706453806,1728.0065874162167,1720.707588203134,1713.261193491751,1705.6769752101945,1697.9648471169678,1690.1350547166292,1682.1981646286688,1674.165053334509,1666.0468952281215,1657.8551498976087,1649.601548567978,1641.2980796394659,1632.956973260884,1624.5906848837215,1616.2118777498886,1607.8334042741546,1599.4682862912518,1591.1296941473695,1582.8309246261035,1574.5853777098741,1566.4065321891756,1558.3079201437386,1550.3031003315687,1542.405630533846,1534.6290389156084,1526.9867944739535,1519.4922766570141,1512.1587442480668,1504.9993036197363,1498.0268764732293,1491.2541671867234,1484.6936299054557,1478.3574355134704,1472.2574386334284,1466.4051448062082,1460.811678006212,1455.4877486512485,1450.443622267574,1445.689088971113,1441.2334339249844,1437.085408931302,1433.2532053117043,1429.744428226335,1426.5660725749535,1423.7245006166424,1421.2254214362088,1419.0738723759023,1417.274202540614,1415.8300584733163,1414.7443720852903,1414.0193509127255,1413.6564707577347]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":5,"reportName":"Int/Map/revsorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":22,"lowSevere":0},"reportMeasured":[[1.69116210008724e-2,1.6911613999997854e-2,33688293,1,null,null,null,null,null,null,null],[3.4749149000163015e-2,3.475050300000149e-2,69223300,2,null,null,null,null,null,null,null],[5.1696651999918686e-2,5.169624600000233e-2,102979173,3,null,null,null,null,null,null,null],[6.890151600055106e-2,6.890215100000319e-2,137253490,4,null,null,null,null,null,null,null],[8.610558299915283e-2,8.610475300000076e-2,171520966,5,null,null,null,null,null,null,null],[0.10173329300050682,0.1017271270000002,202650816,6,null,null,null,null,null,null,null],[0.11909899200054497,0.11909765399999728,237242777,7,null,null,null,null,null,null,null],[0.13569458599977224,0.13568752800000183,270300855,8,null,null,null,null,null,null,null],[0.15208569500009617,0.1520786830000027,302951433,9,null,null,null,null,null,null,null],[0.16982196599929011,0.16982010299999928,338281873,10,null,null,null,null,null,null,null],[0.1900637969993113,0.1900615340000016,378602699,11,null,null,null,null,null,null,null],[0.20726147999994282,0.20725452900000008,412861434,12,null,null,null,null,null,null,null],[0.22177942899998015,0.22176631299999983,441779325,13,null,null,null,null,null,null,null],[0.2387884589998066,0.23877915199999933,475661148,14,null,null,null,null,null,null,null],[0.2544549209997058,0.2544517820000003,506868050,15,null,null,null,null,null,null,null],[0.2765577669997583,0.2765491769999997,550897048,16,null,null,null,null,null,null,null],[0.2891334919995643,0.289118847000001,575946831,17,null,null,null,null,null,null,null],[0.3074710840000989,0.3074613090000007,612475105,18,null,null,null,null,null,null,null],[0.3291522760000589,0.32914252699999835,655663213,19,null,null,null,null,null,null,null],[0.34356909500002075,0.34355150000000023,684381312,20,null,null,null,null,null,null,null],[0.3545696129995122,0.35456524099999953,706294041,21,null,null,null,null,null,null,null],[0.37692146800054616,0.3769113259999983,750818278,22,null,null,null,null,null,null,null],[0.3927749220001715,0.3927503469999998,782397761,23,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.251605589017886e-4,"confIntUDX":2.2016691634739807e-4,"confIntCL":5.0e-2},"estPoint":2.0442200089708467e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":8.642031904438907e-4,"confIntUDX":4.3926865995269626e-4,"confIntCL":5.0e-2},"estPoint":0.9994482346210234},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.169304343053545e-3,"confIntUDX":1.7339409824313043e-3,"confIntCL":5.0e-2},"estPoint":-3.775721857024442e-4},"iters":{"estError":{"confIntLDX":1.5368303657334326e-4,"confIntUDX":1.7691227575166585e-4,"confIntCL":5.0e-2},"estPoint":2.0470324575330472e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.8955740340971194e-4,"confIntUDX":2.616120267741363e-4,"confIntCL":5.0e-2},"estPoint":3.987887002993838e-4},"anOutlierVar":{"ovFraction":4.535147392290249e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.979469576661965e-2,1.981152857606909e-2,1.9828361385518526e-2,1.9845194194967965e-2,1.9862027004417405e-2,1.9878859813866844e-2,1.989569262331628e-2,1.991252543276572e-2,1.992935824221516e-2,1.9946191051664595e-2,1.9963023861114034e-2,1.9979856670563474e-2,1.9996689480012913e-2,2.001352228946235e-2,2.0030355098911788e-2,2.0047187908361228e-2,2.0064020717810663e-2,2.0080853527260103e-2,2.0097686336709542e-2,2.011451914615898e-2,2.0131351955608418e-2,2.0148184765057857e-2,2.0165017574507296e-2,2.0181850383956732e-2,2.019868319340617e-2,2.021551600285561e-2,2.023234881230505e-2,2.0249181621754486e-2,2.0266014431203926e-2,2.0282847240653365e-2,2.0299680050102804e-2,2.031651285955224e-2,2.033334566900168e-2,2.035017847845112e-2,2.0367011287900555e-2,2.0383844097349994e-2,2.0400676906799434e-2,2.0417509716248873e-2,2.043434252569831e-2,2.045117533514775e-2,2.0468008144597188e-2,2.0484840954046624e-2,2.0501673763496063e-2,2.0518506572945502e-2,2.0535339382394942e-2,2.0552172191844378e-2,2.0569005001293817e-2,2.0585837810743256e-2,2.0602670620192692e-2,2.061950342964213e-2,2.063633623909157e-2,2.065316904854101e-2,2.0670001857990446e-2,2.0686834667439886e-2,2.0703667476889325e-2,2.072050028633876e-2,2.07373330957882e-2,2.075416590523764e-2,2.077099871468708e-2,2.0787831524136515e-2,2.0804664333585954e-2,2.0821497143035394e-2,2.083832995248483e-2,2.085516276193427e-2,2.087199557138371e-2,2.0888828380833148e-2,2.0905661190282584e-2,2.0922493999732023e-2,2.0939326809181463e-2,2.09561596186309e-2,2.0972992428080338e-2,2.0989825237529777e-2,2.1006658046979217e-2,2.1023490856428653e-2,2.1040323665878092e-2,2.105715647532753e-2,2.1073989284776967e-2,2.1090822094226407e-2,2.1107654903675846e-2,2.1124487713125285e-2,2.114132052257472e-2,2.115815333202416e-2,2.11749861414736e-2,2.1191818950923036e-2,2.1208651760372475e-2,2.1225484569821915e-2,2.1242317379271354e-2,2.125915018872079e-2,2.127598299817023e-2,2.129281580761967e-2,2.1309648617069105e-2,2.1326481426518544e-2,2.1343314235967983e-2,2.1360147045417423e-2,2.137697985486686e-2,2.1393812664316298e-2,2.1410645473765737e-2,2.1427478283215173e-2,2.1444311092664613e-2,2.1461143902114052e-2,2.147797671156349e-2,2.1494809521012927e-2,2.1511642330462367e-2,2.1528475139911806e-2,2.1545307949361246e-2,2.156214075881068e-2,2.157897356826012e-2,2.159580637770956e-2,2.1612639187158996e-2,2.1629471996608435e-2,2.1646304806057875e-2,2.1663137615507314e-2,2.167997042495675e-2,2.169680323440619e-2,2.171363604385563e-2,2.1730468853305065e-2,2.1747301662754504e-2,2.1764134472203944e-2,2.1780967281653383e-2,2.179780009110282e-2,2.1814632900552258e-2,2.1831465710001698e-2,2.1848298519451137e-2,2.1865131328900573e-2,2.1881964138350012e-2,2.189879694779945e-2,2.1915629757248888e-2,2.1932462566698327e-2],"kdeType":"time","kdePDF":[286.99771067110277,292.0796492599654,302.2044604566415,317.2934902052201,337.2275384488963,361.8456312969229,390.94375587818064,424.2738382135127,461.543268137857,502.41527114623347,546.5103930368041,593.4092997412927,642.6570048799335,693.7685273817812,746.2358597457327,799.536005149814,853.1397308690647,906.5205985700323,959.1637798414479,1010.5741558139466,1060.283236930622,1107.85452207312,1152.8870395006759,1195.0169649231518,1233.9173802985754,1269.2964041739895,1300.8940736720488,1328.478474084553,1351.8416821480805,1370.7961056608908,1385.1717627516168,1394.8149520362028,1399.588628518463,1399.374632075529,1394.0777312786117,1383.6312619548303,1368.0039737225727,1347.2075632245565,1321.304281245758,1290.4139595811776,1254.7198151453279,1214.4724516025428,1169.9915868089715,1121.665178210864,1069.9457861428316,1015.344193378087,958.420474642524,899.7728692167865,840.0249420345177,779.8116151640291,719.7647066169421,660.498624806446,602.5968358188271,546.5996512715952,492.9937839145893,442.20399533100954,394.5870253928258,350.42785716497536,309.938243870244,273.2573151474381,240.45399500381927,211.53090796362045,186.42942460911624,165.03550192011343,147.18600393469515,132.6752385791291,121.26150986039039,112.6735530395431,106.61678599765433,102.77936566576959,100.83807850716066,100.46411503532761,101.32877900177125,103.10916341169657,105.49379140497199,108.18817560276325,110.92020131620777,113.44519405191802,115.55049667740317,117.05936193450641,117.83396542028602,117.77736416342096,116.83426555817073,114.99052741266777,112.27137702789358,108.7384090388458,104.48549116529077,99.63376726863892,94.32599249879046,88.72046186744447,82.98479947920642,77.28986137942509,71.80397321957422,66.68767918812709,62.089126613072004,58.14015750743408,54.95313001879494,52.61845418208961,51.202800913832725,50.74793223120052,51.27010356077667,52.76000310065046,55.18321431616896,58.481210564694486,62.57291001063535,67.35682927206497,72.71387161097356,78.51076761253479,84.60415295453869,90.84522104499868,97.08483212736132,103.17890079052962,108.9938276915869,114.41169609283588,119.33492643997262,123.69007824614044,127.43051151408658,130.53767073685128,133.0208311972353,134.9152450198987,136.27873589788865,137.18690742945665,137.72724036310657,137.99244854752018,138.07353282378315,138.05300925640609,137.99878849914455,137.9591455114767]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":6,"reportName":"Int/HashMap/sorted","reportOutliers":{"highSevere":1,"highMild":1,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.1916132999649562e-2,2.191631999999899e-2,43657923,1,null,null,null,null,null,null,null],[4.1261475999817776e-2,4.126126399999919e-2,82193002,2,null,null,null,null,null,null,null],[6.526294600007532e-2,6.519380499999983e-2,130003700,3,null,null,null,null,null,null,null],[8.052160600072966e-2,8.052377399999955e-2,160403852,4,null,null,null,null,null,null,null],[9.98642149997977e-2,9.98608090000026e-2,198937162,5,null,null,null,null,null,null,null],[0.12162375400021119,0.12161490800000152,242272408,6,null,null,null,null,null,null,null],[0.14113713200003986,0.14113564000000167,281142556,7,null,null,null,null,null,null,null],[0.16276684700005717,0.16276511199999533,324228343,8,null,null,null,null,null,null,null],[0.18150979000074585,0.18150784000000186,361564154,9,null,null,null,null,null,null,null],[0.20558318099938333,0.20557599400000015,409517631,10,null,null,null,null,null,null,null],[0.22416781700030697,0.22415160699999603,446546221,11,null,null,null,null,null,null,null],[0.24140508100026636,0.2413852669999983,480873919,12,null,null,null,null,null,null,null],[0.2621693299997787,0.2621662979999968,522235400,13,null,null,null,null,null,null,null],[0.2962347900001987,0.29622053599999987,590093079,14,null,null,null,null,null,null,null],[0.30513566099944,0.30512496600000105,607823489,15,null,null,null,null,null,null,null],[0.32493975200031855,0.32493580599999916,647272319,16,null,null,null,null,null,null,null],[0.348437444999945,0.3484234769999972,694079903,17,null,null,null,null,null,null,null],[0.3674023749999833,0.3673688319999968,731861112,18,null,null,null,null,null,null,null],[0.3890681050006606,0.38906355099999956,775014634,19,null,null,null,null,null,null,null],[0.41058566300034727,0.4105682799999997,817876846,20,null,null,null,null,null,null,null],[0.429722861999835,0.4297211989999994,856004866,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":8.198226758400831e-5,"confIntUDX":1.7116448711798626e-4,"confIntCL":5.0e-2},"estPoint":2.0335051349294322e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.2157622312826133e-3,"confIntUDX":9.855755935979094e-4,"confIntCL":5.0e-2},"estPoint":0.9989464746337062},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":4.01829360108183e-3,"confIntUDX":2.7429742945086783e-3,"confIntCL":5.0e-2},"estPoint":-3.5069676672535536e-4},"iters":{"estError":{"confIntLDX":3.279018466556087e-4,"confIntUDX":4.801403352287306e-4,"confIntCL":5.0e-2},"estPoint":2.0369254905192244e-2}}}],"anStdDev":{"estError":{"confIntLDX":1.504603447961434e-4,"confIntUDX":1.3455344989462853e-4,"confIntCL":5.0e-2},"estPoint":2.632425820649563e-4},"anOutlierVar":{"ovFraction":4.535147392290246e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[1.9967912725744878e-2,1.9977672568984264e-2,1.9987432412223647e-2,1.9997192255463033e-2,2.0006952098702416e-2,2.0016711941941802e-2,2.0026471785181185e-2,2.003623162842057e-2,2.0045991471659953e-2,2.005575131489934e-2,2.0065511158138722e-2,2.0075271001378108e-2,2.008503084461749e-2,2.0094790687856877e-2,2.010455053109626e-2,2.0114310374335646e-2,2.012407021757503e-2,2.0133830060814414e-2,2.0143589904053797e-2,2.0153349747293183e-2,2.0163109590532566e-2,2.0172869433771952e-2,2.0182629277011335e-2,2.019238912025072e-2,2.0202148963490103e-2,2.021190880672949e-2,2.0221668649968872e-2,2.0231428493208258e-2,2.024118833644764e-2,2.0250948179687027e-2,2.026070802292641e-2,2.0270467866165796e-2,2.028022770940518e-2,2.0289987552644564e-2,2.0299747395883947e-2,2.0309507239123333e-2,2.0319267082362716e-2,2.0329026925602102e-2,2.0338786768841485e-2,2.034854661208087e-2,2.0358306455320253e-2,2.036806629855964e-2,2.0377826141799026e-2,2.0387585985038408e-2,2.0397345828277794e-2,2.0407105671517177e-2,2.0416865514756563e-2,2.0426625357995946e-2,2.0436385201235332e-2,2.0446145044474714e-2,2.04559048877141e-2,2.0465664730953483e-2,2.047542457419287e-2,2.0485184417432252e-2,2.0494944260671638e-2,2.050470410391102e-2,2.0514463947150407e-2,2.052422379038979e-2,2.0533983633629176e-2,2.0543743476868558e-2,2.0553503320107944e-2,2.0563263163347327e-2,2.0573023006586713e-2,2.0582782849826096e-2,2.0592542693065482e-2,2.0602302536304865e-2,2.061206237954425e-2,2.0621822222783633e-2,2.063158206602302e-2,2.0641341909262402e-2,2.0651101752501788e-2,2.066086159574117e-2,2.0670621438980557e-2,2.068038128221994e-2,2.0690141125459326e-2,2.069990096869871e-2,2.0709660811938094e-2,2.0719420655177477e-2,2.0729180498416863e-2,2.0738940341656246e-2,2.0748700184895632e-2,2.0758460028135015e-2,2.07682198713744e-2,2.0777979714613783e-2,2.078773955785317e-2,2.0797499401092552e-2,2.0807259244331938e-2,2.0817019087571324e-2,2.0826778930810707e-2,2.0836538774050093e-2,2.0846298617289476e-2,2.0856058460528862e-2,2.0865818303768244e-2,2.087557814700763e-2,2.0885337990247013e-2,2.08950978334864e-2,2.0904857676725782e-2,2.0914617519965168e-2,2.092437736320455e-2,2.0934137206443937e-2,2.094389704968332e-2,2.0953656892922706e-2,2.0963416736162088e-2,2.0973176579401474e-2,2.0982936422640857e-2,2.0992696265880243e-2,2.1002456109119626e-2,2.1012215952359012e-2,2.1021975795598394e-2,2.103173563883778e-2,2.1041495482077163e-2,2.105125532531655e-2,2.1061015168555932e-2,2.1070775011795318e-2,2.10805348550347e-2,2.1090294698274087e-2,2.110005454151347e-2,2.1109814384752856e-2,2.111957422799224e-2,2.1129334071231624e-2,2.1139093914471007e-2,2.1148853757710393e-2,2.1158613600949776e-2,2.1168373444189162e-2,2.1178133287428545e-2,2.118789313066793e-2,2.1197652973907313e-2,2.12074128171467e-2],"kdeType":"time","kdePDF":[872.5945396938032,880.0347005633495,894.8309429505259,916.8167659521034,945.7464550658823,981.2996355541915,1023.086889441229,1070.6561048689782,1123.4992092917603,1181.058954462791,1242.735469415216,1307.8923724998515,1375.862327131711,1445.9520284045666,1517.446708392788,1589.61433613731,1661.7097545741879,1732.9790337320644,1802.6643230172992,1870.0094542852746,1934.2664840830062,1994.7032735820983,2050.612096605257,2101.319149927415,2146.194726688319,2184.6637140387284,2216.2159995395414,2240.416324659411,2256.913112457887,2265.445821477113,2265.8504370144537,2258.062799331502,2242.1195785379155,2218.156828741414,2186.40617964551,2147.188842299612,2100.9077083650614,2048.0379020084847,1989.1161956155495,1924.7297227717106,1855.504414854375,1782.093554028564,1705.1667803563223,1625.3998204806053,1543.4651270564761,1460.023538976385,1375.7169990838368,1291.1623039592112,1206.9458134037798,1123.6190175640825,1041.6948475060728,961.6446190334456,883.8955167807477,808.8285522035933,736.7769605738548,668.0250339323857,602.8074149997905,541.3088979094765,483.66479295945135,429.96191322998624,380.2402309436763,334.49523202472386,292.68097051574733,254.71379302733772,220.4766702219318,189.82404045064936,162.58704274584542,138.57899457469134,117.60095555230264,99.44721243319388,83.91052316194003,70.78696795841778,59.88027224321618,51.00548826960235,43.99194807736143,38.68542830785272,34.94949615483249,32.666034143415416,31.734968660755786,32.07325258594272,33.6131755512899,36.30009599746068,40.08970697332486,44.94496225032898,50.832800349882895,57.720811000922,65.5739907599809,74.3517314453443,84.00517616639713,94.47506279760067,105.69015381928008,117.56632502903344,130.00635471605116,142.90042098197833,156.12727991544497,169.55606351760358,183.04860598515535,196.4621824282588,209.65252722383397,222.47699128970635,234.7976991575719,246.48457749518624,257.418145464335,267.49198198525227,276.6148129861657,284.71219009137775,291.72775798448356,297.6241282636724,302.3833910420879,306.0073008187657,308.5171703067666,309.95349609545406,310.37532535454477,309.85935609094685,308.49874794983543,306.4016093732329,303.689122795791,300.4932743317436,296.9541688282181,293.216934690717,289.4282537179749,285.73258640069065,282.2681990313875,279.16313145362045,276.531269363801,274.4686993675433,273.05052609198003,272.32831749400736]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":7,"reportName":"Int/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":20,"lowSevere":0},"reportMeasured":[[2.22767590003059e-2,2.2271850999999288e-2,44376146,1,null,null,null,null,null,null,null],[4.194340499998361e-2,4.194328399999847e-2,83551258,2,null,null,null,null,null,null,null],[6.062047999967035e-2,6.062012299999964e-2,120755884,3,null,null,null,null,null,null,null],[8.087500500005262e-2,8.086553599999746e-2,161102225,4,null,null,null,null,null,null,null],[0.10064001899991126,0.10062834600000059,200473330,5,null,null,null,null,null,null,null],[0.12170766700000968,0.12170648400000061,242440067,6,null,null,null,null,null,null,null],[0.14254838899978495,0.14254695099999992,283953877,7,null,null,null,null,null,null,null],[0.16357909700036544,0.16357726400000416,325846104,8,null,null,null,null,null,null,null],[0.18331975399996736,0.18331249999999955,365169800,9,null,null,null,null,null,null,null],[0.20302739399994607,0.20300530299999764,404426197,10,null,null,null,null,null,null,null],[0.22220905699941795,0.22220049899999594,442635745,11,null,null,null,null,null,null,null],[0.2430346669998471,0.24303193800000145,484120046,12,null,null,null,null,null,null,null],[0.26566770799945516,0.26566467199999977,529204162,13,null,null,null,null,null,null,null],[0.28423458199995366,0.2842209280000034,566189237,14,null,null,null,null,null,null,null],[0.30207220099964616,0.3020568279999978,601721337,15,null,null,null,null,null,null,null],[0.3253867399998853,0.3253767699999983,648162910,16,null,null,null,null,null,null,null],[0.3442265089997818,0.344204677999997,685691439,17,null,null,null,null,null,null,null],[0.36131352199936373,0.36130930600000255,719728469,18,null,null,null,null,null,null,null],[0.38463966400013305,0.384635111999998,766193214,19,null,null,null,null,null,null,null],[0.4014240880005673,0.4014053890000042,799627694,20,null,null,null,null,null,null,null],[0.44318654400012747,0.4431680799999995,882817489,21,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.4537442624461897e-3,"confIntUDX":2.6233871295563843e-3,"confIntCL":5.0e-2},"estPoint":2.5066571560804135e-2},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.0148889811077106e-2,"confIntUDX":2.716982453801997e-2,"confIntCL":5.0e-2},"estPoint":0.9564440083435568},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.5629695839453452e-2,"confIntUDX":1.622053787420327e-2,"confIntCL":5.0e-2},"estPoint":3.3372510350474847e-3},"iters":{"estError":{"confIntLDX":2.2421682853189136e-3,"confIntUDX":2.8975875351205417e-3,"confIntCL":5.0e-2},"estPoint":2.392300415965444e-2}}}],"anStdDev":{"estError":{"confIntLDX":2.0822554758749725e-3,"confIntUDX":1.8387240329736237e-3,"confIntCL":5.0e-2},"estPoint":4.368889121877977e-3},"anOutlierVar":{"ovFraction":0.7221439400415633,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[1.9263874025068618e-2,1.9412636440028483e-2,1.9561398854988348e-2,1.971016126994821e-2,1.9858923684908075e-2,2.000768609986794e-2,2.0156448514827806e-2,2.030521092978767e-2,2.0453973344747533e-2,2.0602735759707398e-2,2.0751498174667263e-2,2.090026058962713e-2,2.1049023004586994e-2,2.1197785419546856e-2,2.134654783450672e-2,2.1495310249466586e-2,2.164407266442645e-2,2.1792835079386313e-2,2.194159749434618e-2,2.2090359909306044e-2,2.223912232426591e-2,2.2387884739225775e-2,2.2536647154185636e-2,2.26854095691455e-2,2.2834171984105367e-2,2.2982934399065232e-2,2.3131696814025098e-2,2.328045922898496e-2,2.3429221643944825e-2,2.357798405890469e-2,2.3726746473864555e-2,2.387550888882442e-2,2.4024271303784282e-2,2.4173033718744148e-2,2.4321796133704013e-2,2.4470558548663878e-2,2.4619320963623743e-2,2.4768083378583605e-2,2.491684579354347e-2,2.5065608208503336e-2,2.52143706234632e-2,2.5363133038423066e-2,2.5511895453382928e-2,2.5660657868342793e-2,2.580942028330266e-2,2.5958182698262524e-2,2.610694511322239e-2,2.625570752818225e-2,2.6404469943142116e-2,2.655323235810198e-2,2.6701994773061847e-2,2.6850757188021712e-2,2.6999519602981574e-2,2.714828201794144e-2,2.7297044432901305e-2,2.744580684786117e-2,2.7594569262821035e-2,2.7743331677780897e-2,2.7892094092740762e-2,2.8040856507700627e-2,2.8189618922660493e-2,2.8338381337620358e-2,2.848714375258022e-2,2.8635906167540085e-2,2.878466858249995e-2,2.8933430997459816e-2,2.908219341241968e-2,2.9230955827379543e-2,2.9379718242339408e-2,2.9528480657299273e-2,2.967724307225914e-2,2.9826005487219004e-2,2.9974767902178866e-2,3.012353031713873e-2,3.0272292732098596e-2,3.042105514705846e-2,3.0569817562018327e-2,3.071857997697819e-2,3.0867342391938054e-2,3.101610480689792e-2,3.1164867221857784e-2,3.131362963681765e-2,3.146239205177751e-2,3.161115446673737e-2,3.175991688169724e-2,3.1908679296657104e-2,3.205744171161697e-2,3.2206204126576835e-2,3.23549665415367e-2,3.2503728956496565e-2,3.265249137145643e-2,3.2801253786416296e-2,3.295001620137616e-2,3.309877861633602e-2,3.324754103129589e-2,3.339630344625575e-2,3.354506586121562e-2,3.369382827617548e-2,3.384259069113535e-2,3.399135310609521e-2,3.414011552105507e-2,3.428887793601494e-2,3.44376403509748e-2,3.4586402765934665e-2,3.4735165180894534e-2,3.4883927595854396e-2,3.503269001081426e-2,3.5181452425774126e-2,3.5330214840733995e-2,3.547897725569386e-2,3.562773967065372e-2,3.577650208561359e-2,3.592526450057345e-2,3.607402691553331e-2,3.622278933049318e-2,3.637155174545305e-2,3.65203141604129e-2,3.666907657537277e-2,3.681783899033264e-2,3.69666014052925e-2,3.7115363820252364e-2,3.726412623521223e-2,3.7412888650172095e-2,3.756165106513196e-2,3.7710413480091826e-2,3.7859175895051694e-2,3.800793831001155e-2,3.815670072497142e-2],"kdeType":"time","kdePDF":[97.83839744771048,97.82462227134631,97.79694267019318,97.7551014204561,97.69871585703935,97.62728164468203,97.54017775057075,97.43667257158747,97.31593115861757,97.17702347023618,97.01893357872581,96.84056974284599,96.64077525416646,96.41833995716361,96.17201233772597,95.90051207026617,95.60254291033237,95.27680581746469,94.92201219206484,94.53689711022535,94.12023244178158,93.67083973926486,93.1876027889077,92.66947971931452,92.11551456880525,91.52484821867381,90.89672860660474,90.23052014215666,89.5257122544583,88.7819270109687,87.9989257552231,87.17661472081686,86.315049588367,85.41443896173318,84.47514674927695,83.49769344529902,82.48275631592547,81.43116850253722,80.34391706427346,79.222139989125,78.0671222106023,76.88029067387312,75.66320850156066,74.41756831505937,73.14518477221276,71.84798638652023,70.52800669665251,69.18737485799885,67.82830573020611,66.45308953625859,65.06408116956185,63.66368922580455,62.254364836061505,60.83859037675035,59.41886813065087,57.99770897132801,56.5776211409591,55.16109918884291,53.75061313475747,52.34859791792595,50.957443188638095,49.57948349565135,48.21698891834765,46.87215618834228,45.547100340812136,44.243846931321215,42.964324849351584,41.71035975518083,40.48366816216009,39.285852181917946,38.11839494551874,36.982656709212755,35.87987164910179,34.81114534487564,33.77745294872225,32.77963803164237,31.81841209567537,30.894354737028728,30.007914441766125,29.159409992605955,28.349032462479997,27.576847767855924,26.84279975240221,26.146713769422362,25.488300729572316,24.867161578746583,24.28279216964319,23.734588489433467,23.22185220514002,22.743796487795684,22.299552076190025,21.888173541029797,21.50864571061899,21.159890219716566,20.840772144028602,20.55010668384216,20.286665861583753,20.049185199582766,19.836370346012856,19.646903618861103,19.47945043980862,19.332665632079486,19.205199558599972,19.095704079183673,19.002838307894027,18.92527415420507,18.86170163405955,18.81083393938055,18.7714122570034,18.742210330331304,18.722038759256534,18.709749036002435,18.70423731651284,18.704447928817146,18.70937662142168,18.71807355619753,18.72964605144747,18.743261081822812,18.75814754252676,18.773598285773897,18.788971937784027,18.803694504669114,18.817260775441007,18.829235530025823,18.83925455964266,18.847025506197287,18.852328526482548,18.855016785983484]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":8,"reportName":"Int/HashMap/revsorted","reportOutliers":{"highSevere":0,"highMild":2,"lowMild":0,"samplesSeen":18,"lowSevere":0},"reportMeasured":[[2.794468299998698e-2,2.794587199999654e-2,55669675,1,null,null,null,null,null,null,null],[7.316459699995903e-2,7.316482899999954e-2,145745678,2,null,null,null,null,null,null,null],[0.10409891699964646,0.10409865200000468,207365305,3,null,null,null,null,null,null,null],[9.984500700011267e-2,9.98442300000022e-2,198890201,4,null,null,null,null,null,null,null],[0.12185803800002759,0.12185709900000319,242740081,5,null,null,null,null,null,null,null],[0.1366814399998475,0.1366743669999977,272266985,6,null,null,null,null,null,null,null],[0.14857402100005856,0.14857253099999923,295957179,7,null,null,null,null,null,null,null],[0.19811703499999567,0.19810328199999816,394646214,8,null,null,null,null,null,null,null],[0.1939829370003281,0.19396143199999472,386410636,9,null,null,null,null,null,null,null],[0.22980951399949845,0.2298071140000033,457776439,10,null,null,null,null,null,null,null],[0.24752238800010673,0.24748755099999897,493059603,11,null,null,null,null,null,null,null],[0.2500593150007262,0.25004241299999563,498112930,12,null,null,null,null,null,null,null],[0.31981034799991903,0.3198081899999963,637059914,13,null,null,null,null,null,null,null],[0.3752840639999704,0.3752736129999974,747557200,14,null,null,null,null,null,null,null],[0.31829379800001334,0.3182500149999967,634034753,15,null,null,null,null,null,null,null],[0.44437383500007854,0.44435623700000093,885182194,16,null,null,null,null,null,null,null],[0.4625148180002725,0.46181722899999755,921318254,17,null,null,null,null,null,null,null],[0.4224695140001131,0.42246444999999966,841549643,18,null,null,null,null,null,null,null],[0.43437429099958536,0.4343594039999985,865263548,19,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.273948075541962e-4,"confIntUDX":3.311561734108386e-4,"confIntCL":5.0e-2},"estPoint":6.799653267933072e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":4.208388877836944e-2,"confIntUDX":3.545929954228477e-2,"confIntCL":5.0e-2},"estPoint":0.9373087736258467},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.185399860915975e-3,"confIntUDX":1.0164662011635944e-2,"confIntCL":5.0e-2},"estPoint":1.7856901310107545e-2},"iters":{"estError":{"confIntLDX":4.0855192217469256e-4,"confIntUDX":5.541358721524673e-4,"confIntCL":5.0e-2},"estPoint":5.63380987932288e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.2097251902340401e-4,"confIntUDX":1.720021043338019e-4,"confIntCL":5.0e-2},"estPoint":9.861316275568532e-4},"anOutlierVar":{"ovFraction":0.7452584292183818,"ovDesc":"a severe","ovEffect":"Severe"}},"reportKDEs":[{"kdeValues":[5.270948137352351e-3,5.3008201699593065e-3,5.330692202566262e-3,5.360564235173218e-3,5.390436267780173e-3,5.420308300387129e-3,5.450180332994084e-3,5.48005236560104e-3,5.5099243982079955e-3,5.539796430814951e-3,5.569668463421907e-3,5.599540496028862e-3,5.629412528635818e-3,5.659284561242773e-3,5.689156593849729e-3,5.719028626456684e-3,5.74890065906364e-3,5.7787726916705955e-3,5.808644724277551e-3,5.838516756884507e-3,5.868388789491462e-3,5.898260822098418e-3,5.928132854705373e-3,5.958004887312329e-3,5.9878769199192845e-3,6.01774895252624e-3,6.047620985133196e-3,6.077493017740151e-3,6.107365050347107e-3,6.137237082954062e-3,6.167109115561018e-3,6.196981148167973e-3,6.226853180774929e-3,6.2567252133818845e-3,6.28659724598884e-3,6.316469278595796e-3,6.346341311202751e-3,6.376213343809707e-3,6.406085376416662e-3,6.435957409023618e-3,6.4658294416305735e-3,6.495701474237529e-3,6.525573506844485e-3,6.55544553945144e-3,6.585317572058396e-3,6.615189604665351e-3,6.645061637272307e-3,6.674933669879262e-3,6.704805702486218e-3,6.7346777350931735e-3,6.764549767700129e-3,6.794421800307085e-3,6.82429383291404e-3,6.854165865520996e-3,6.884037898127951e-3,6.913909930734907e-3,6.9437819633418624e-3,6.973653995948818e-3,7.003526028555774e-3,7.033398061162729e-3,7.063270093769685e-3,7.09314212637664e-3,7.123014158983596e-3,7.152886191590551e-3,7.182758224197507e-3,7.2126302568044625e-3,7.242502289411418e-3,7.272374322018374e-3,7.302246354625329e-3,7.332118387232285e-3,7.36199041983924e-3,7.391862452446196e-3,7.4217344850531514e-3,7.451606517660107e-3,7.4814785502670626e-3,7.511350582874018e-3,7.541222615480974e-3,7.571094648087929e-3,7.600966680694885e-3,7.63083871330184e-3,7.660710745908796e-3,7.6905827785157515e-3,7.720454811122707e-3,7.750326843729663e-3,7.780198876336618e-3,7.810070908943574e-3,7.83994294155053e-3,7.869814974157485e-3,7.89968700676444e-3,7.929559039371396e-3,7.959431071978352e-3,7.989303104585307e-3,8.019175137192263e-3,8.049047169799218e-3,8.078919202406174e-3,8.10879123501313e-3,8.138663267620085e-3,8.16853530022704e-3,8.198407332833996e-3,8.228279365440952e-3,8.258151398047907e-3,8.288023430654863e-3,8.317895463261818e-3,8.347767495868774e-3,8.37763952847573e-3,8.407511561082685e-3,8.43738359368964e-3,8.467255626296596e-3,8.497127658903552e-3,8.526999691510507e-3,8.556871724117463e-3,8.586743756724418e-3,8.616615789331374e-3,8.64648782193833e-3,8.676359854545285e-3,8.70623188715224e-3,8.736103919759196e-3,8.765975952366152e-3,8.795847984973107e-3,8.825720017580063e-3,8.855592050187018e-3,8.885464082793974e-3,8.91533611540093e-3,8.945208148007885e-3,8.97508018061484e-3,9.004952213221796e-3,9.034824245828752e-3,9.064696278435707e-3],"kdeType":"time","kdePDF":[346.12340375180366,346.0596212051218,345.9322138601291,345.74149633725466,345.48793838159776,345.17216225491705,344.7949392825998,344.3571855762806,343.8599569577356,343.30444311448434,342.691961022177,342.02394767328775,341.3019521558619,340.5276271300383,339.70271975377756,338.8290621126398,337.908561211552,336.9431885892701,335.9349696186496,334.8859725578763,333.7982974194666,332.67406472509634,331.5154042151694,330.3244435824628,329.1032972991914,327.8540556064139,326.5787737338508,325.27946141690944,323.95807277601125,322.61649662120544,321.2565472425326,319.87995574369415,318.4883619732995,317.08330710431744,315.6662269083825,314.2384457673188,312.80117145966324,311.3554907551451,309.9023658450143,308.44263163086646,306.97699388919756,305.5060283233966,304.03018050926084,302.5497667344626,301.06497572671714,299.5758712597709,298.08239562074584,296.58437391692814,295.08151919475984,293.57343833867577,292.0596387124979,290.53953550145883,289.0124597085354,287.4776667547284,285.93434562919566,284.3816285318114,282.81860094774675,281.2443120911352,279.65778565273604,278.05803078483433,276.4440532553491,274.8148667023368,273.1695039197073,271.50702810508864,269.82654400129763,268.1272088638676,266.4082431884667,264.66894113386223,262.908680578268,261.1269327494924,259.32327137220204,257.4973812788642,255.64906643444374,253.7782573287373,251.88501769423993,249.96955051168428,248.03220326977984,246.0734724502364,244.0940072137826,242.0946122676322,240.0762498995873,238.04004116875942,235.9872662476139,233.9193639147601,231.83793020250343,229.74471620770345,227.64162507883947,225.53070819642127,223.41416056791064,221.29431546218166,219.1736383121641,217.05471991773575,214.94026898407756,212.83310403362978,210.73614473242776,208.65240267398931,206.58497166603146,204.5370175671426,202.5117677220959,200.51250004579217,198.54253180684208,196.6052081625642,194.7038904976776,192.84194461922505,191.02272886027185,189.24958214470882,187.52581206504115,185.8546830243914,184.2394044930916,182.6831194291893,181.1888929109771,179.75970102826273,178.39842007756044,177.10781610470067,175.89053483654308,174.74909204154744,173.68586435692032,172.70308061791468,171.80281372263997,170.98697306343638,170.25729755349323,169.61534927496245,169.06250777232748,168.59996501225694,168.22872102860012,167.9495802685733,167.7631486535525,167.66983136523197]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":9,"reportName":"ByteString/Map/sorted","reportOutliers":{"highSevere":0,"highMild":0,"lowMild":0,"samplesSeen":32,"lowSevere":0},"reportMeasured":[[5.268668000098842e-3,5.268733000001191e-3,10495678,1,null,null,null,null,null,null,null],[1.088318399979471e-2,1.0883222000003911e-2,21679741,2,null,null,null,null,null,null,null],[1.8716007999501016e-2,1.8715995999997403e-2,37282649,3,null,null,null,null,null,null,null],[2.2553118000359973e-2,2.2553040000005353e-2,44925993,4,null,null,null,null,null,null,null],[2.838538600008178e-2,2.8385294000003114e-2,56543936,5,null,null,null,null,null,null,null],[3.3918402999916e-2,3.391824900000273e-2,67565467,6,null,null,null,null,null,null,null],[4.921759899934841e-2,4.9219360000002155e-2,98045252,7,null,null,null,null,null,null,null],[4.59771499999988e-2,4.5976885999998274e-2,91586282,8,null,null,null,null,null,null,null],[7.413082600032794e-2,7.41301039999982e-2,147667501,9,null,null,null,null,null,null,null],[7.0292215000336e-2,7.029163699999685e-2,140021366,10,null,null,null,null,null,null,null],[8.485722800014628e-2,8.485637899999432e-2,169034324,11,null,null,null,null,null,null,null],[9.985746099937387e-2,9.983587500000368e-2,198914684,12,null,null,null,null,null,null,null],[0.10295746300016617,0.10294534100000163,205089441,13,null,null,null,null,null,null,null],[0.10752186900026572,0.1075213480000059,214182854,14,null,null,null,null,null,null,null],[0.11492188699958206,0.11492063499999716,228922327,15,null,null,null,null,null,null,null],[0.1188515150006424,0.11885024999999416,236749779,16,null,null,null,null,null,null,null],[0.12236560000019381,0.12236445100000282,243750362,17,null,null,null,null,null,null,null],[0.1291521240000293,0.12915301000000312,257273098,18,null,null,null,null,null,null,null],[0.13736583500030974,0.13736501300000015,273631185,19,null,null,null,null,null,null,null],[0.1749710120002419,0.17494040400000443,348538762,20,null,null,null,null,null,null,null],[0.14640440499988472,0.14640285999999492,291634679,21,null,null,null,null,null,null,null],[0.1576957669994954,0.1576856719999995,314126629,22,null,null,null,null,null,null,null],[0.1521126509996975,0.1521033309999993,303005727,23,null,null,null,null,null,null,null],[0.19041092000043136,0.19040863700000443,379294179,25,null,null,null,null,null,null,null],[0.1583251020001626,0.15832455299999992,315382846,26,null,null,null,null,null,null,null],[0.17709199799992348,0.17708197400000358,352763570,27,null,null,null,null,null,null,null],[0.17102690899992012,0.17101550000000287,340682173,28,null,null,null,null,null,null,null],[0.2491226860001916,0.24911977900000437,496246763,30,null,null,null,null,null,null,null],[0.1811217040003612,0.18111969800000338,360790631,31,null,null,null,null,null,null,null],[0.18597984999996697,0.18597768400000092,370467684,33,null,null,null,null,null,null,null],[0.1983363890003602,0.19833410600000434,395081535,35,null,null,null,null,null,null,null],[0.2033770950001781,0.20337475499999869,405122666,36,null,null,null,null,null,null,null],[0.2123095649994866,0.21229444599999425,422916008,38,null,null,null,null,null,null,null],[0.22420824300024833,0.22420565800000247,446617870,40,null,null,null,null,null,null,null],[0.24246396499984257,0.24246101399999986,482982480,42,null,null,null,null,null,null,null],[0.2549935010001718,0.2549679999999981,507940920,44,null,null,null,null,null,null,null],[0.27398793599968485,0.27398464800000255,545777607,47,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.858320849709265e-4,"confIntUDX":2.94720572459925e-4,"confIntCL":5.0e-2},"estPoint":8.64794121917834e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.7372023516920798e-2,"confIntUDX":1.4506897591844314e-2,"confIntCL":5.0e-2},"estPoint":0.9799356136641313},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":5.1907539084835854e-3,"confIntUDX":3.4993608773215786e-3,"confIntCL":5.0e-2},"estPoint":-2.562478723368102e-5},"iters":{"estError":{"confIntLDX":3.3369302088950316e-4,"confIntUDX":4.91037106811221e-4,"confIntCL":5.0e-2},"estPoint":8.659140651168608e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.6123901941357825e-4,"confIntUDX":1.948333034271641e-4,"confIntCL":5.0e-2},"estPoint":6.522594847018913e-4},"anOutlierVar":{"ovFraction":0.4210710119243513,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[7.708719262449757e-3,7.73082710716894e-3,7.752934951888124e-3,7.775042796607307e-3,7.79715064132649e-3,7.819258486045673e-3,7.841366330764857e-3,7.863474175484041e-3,7.885582020203223e-3,7.907689864922407e-3,7.92979770964159e-3,7.951905554360773e-3,7.974013399079957e-3,7.99612124379914e-3,8.018229088518323e-3,8.040336933237507e-3,8.06244477795669e-3,8.084552622675873e-3,8.106660467395057e-3,8.12876831211424e-3,8.150876156833423e-3,8.172984001552606e-3,8.19509184627179e-3,8.217199690990972e-3,8.239307535710156e-3,8.26141538042934e-3,8.283523225148522e-3,8.305631069867706e-3,8.32773891458689e-3,8.349846759306072e-3,8.371954604025256e-3,8.39406244874444e-3,8.416170293463622e-3,8.438278138182806e-3,8.46038598290199e-3,8.482493827621172e-3,8.504601672340356e-3,8.52670951705954e-3,8.548817361778722e-3,8.570925206497906e-3,8.59303305121709e-3,8.615140895936272e-3,8.637248740655456e-3,8.65935658537464e-3,8.681464430093822e-3,8.703572274813005e-3,8.72568011953219e-3,8.747787964251373e-3,8.769895808970555e-3,8.792003653689739e-3,8.814111498408921e-3,8.836219343128105e-3,8.858327187847289e-3,8.880435032566473e-3,8.902542877285655e-3,8.924650722004839e-3,8.946758566724021e-3,8.968866411443205e-3,8.990974256162389e-3,9.013082100881573e-3,9.035189945600755e-3,9.057297790319939e-3,9.07940563503912e-3,9.101513479758305e-3,9.123621324477488e-3,9.145729169196672e-3,9.167837013915854e-3,9.189944858635038e-3,9.21205270335422e-3,9.234160548073404e-3,9.256268392792588e-3,9.278376237511772e-3,9.300484082230954e-3,9.322591926950138e-3,9.344699771669322e-3,9.366807616388504e-3,9.388915461107688e-3,9.411023305826872e-3,9.433131150546054e-3,9.455238995265238e-3,9.477346839984422e-3,9.499454684703604e-3,9.521562529422788e-3,9.543670374141972e-3,9.565778218861154e-3,9.587886063580338e-3,9.609993908299521e-3,9.632101753018703e-3,9.654209597737887e-3,9.676317442457071e-3,9.698425287176253e-3,9.720533131895437e-3,9.742640976614621e-3,9.764748821333803e-3,9.786856666052987e-3,9.808964510772171e-3,9.831072355491353e-3,9.853180200210537e-3,9.87528804492972e-3,9.897395889648903e-3,9.919503734368087e-3,9.94161157908727e-3,9.963719423806453e-3,9.985827268525637e-3,1.000793511324482e-2,1.0030042957964003e-2,1.0052150802683187e-2,1.007425864740237e-2,1.0096366492121553e-2,1.0118474336840736e-2,1.014058218155992e-2,1.0162690026279102e-2,1.0184797870998286e-2,1.020690571571747e-2,1.0229013560436652e-2,1.0251121405155836e-2,1.027322924987502e-2,1.0295337094594202e-2,1.0317444939313386e-2,1.033955278403257e-2,1.0361660628751754e-2,1.0383768473470936e-2,1.040587631819012e-2,1.0427984162909302e-2,1.0450092007628486e-2,1.047219985234767e-2,1.0494307697066853e-2,1.0516415541786036e-2],"kdeType":"time","kdePDF":[192.85843539548247,198.55820729258429,209.9067949869576,226.80045328064986,249.07916518889093,276.52187303832704,308.8409586123427,345.67666205505986,386.59225311209246,431.0708446764867,478.5147490445483,528.2482049637861,579.5241373523888,631.5353500894588,683.4302070340487,734.3324533042357,783.3644070660172,829.6723604661657,872.4527189944723,910.9772288236278,944.615625695085,972.8542004199242,995.3091039412916,1011.7336728628221,1022.0195870830836,1026.1922047371445,1024.4008846609647,1016.9054423719783,1004.0600527289315,986.2958999417108,964.1037025330952,938.0169525558506,908.5963675162615,876.4157277875089,842.0490214675415,806.0586828624682,768.9847035906334,731.3345018757492,693.5736169082901,656.11749705167,619.3248158534884,583.4928301859537,548.8552615867792,515.5830313504846,483.78793406620474,453.5290357467228,424.8212857171754,397.6455907087354,371.95945917964985,347.7073085882042,324.8296392734156,303.2704934936846,282.98289633129644,263.93226581791464,246.0980319183941,229.47387660518854,214.06707576964914,199.8973845656889,186.99577799845687,175.4031717925607,165.1690481490942,156.34974163483383,149.0060399682647,143.19974715835605,138.9889490172828,136.42190177269669,135.52970544040357,136.31818554906806,138.75964567239967,142.78532718838687,148.27948865557264,155.0759758545614,162.95799225172905,171.66151291244284,180.88244243186034,190.28724014597123,199.5263702720886,208.2496266402761,216.12217046739408,222.8400322885705,228.14387705816773,231.83000862790212,233.7578738525021,233.85368155153736,232.11013301734917,228.5826218152307,223.3825583539388,216.66867592883614,208.6372604758195,199.51221309341304,189.53571536326976,178.96004885476034,168.04085717691507,157.03187039845332,146.1808745204433,135.72653310380184,125.8955740130319,116.89984942794922,108.9328577322189,102.16546716452348,96.74078102212079,92.76830595891383,90.31780034347499,89.41336201121516,90.02844111351062,92.08251674594543,95.44014508844333,99.91296911641776,105.26508101631048,111.22186208795816,117.48211282364694,123.73295629753633,129.66668370483418,134.9984460154384,139.48351217280361,142.9327378505614,145.22493551640326,146.3150100805324,146.23701472307494,145.1016654681779,143.08829669582363,140.43170189396338,137.40474086604542,134.29796496199947,131.39778104354033,128.96481824030866,127.21416657121439,126.2990232822616]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":10,"reportName":"ByteString/Map/random","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":30,"lowSevere":0},"reportMeasured":[[1.005231300041487e-2,1.0052598000001467e-2,20025096,1,null,null,null,null,null,null,null],[1.9699227000273822e-2,1.969939399999987e-2,39241513,2,null,null,null,null,null,null,null],[3.0796312000347825e-2,3.0796467999998356e-2,61347827,3,null,null,null,null,null,null,null],[3.530741799932002e-2,3.530734799999635e-2,70332637,4,null,null,null,null,null,null,null],[4.243936399961967e-2,4.243899900000514e-2,84538828,5,null,null,null,null,null,null,null],[4.865947199959919e-2,4.86529200000021e-2,96929313,6,null,null,null,null,null,null,null],[5.7684898999468714e-2,5.768456699999547e-2,114908101,7,null,null,null,null,null,null,null],[7.253194900022208e-2,7.253130099999794e-2,144482647,8,null,null,null,null,null,null,null],[7.364764199974161e-2,7.364090799999445e-2,146707433,9,null,null,null,null,null,null,null],[8.253616299953137e-2,8.253531300000105e-2,164410518,10,null,null,null,null,null,null,null],[9.276555499945971e-2,9.275186099999644e-2,184788186,11,null,null,null,null,null,null,null],[0.10018211700025859,0.10016250999999698,199560933,12,null,null,null,null,null,null,null],[0.10642467300021963,0.10641797800000319,211995873,13,null,null,null,null,null,null,null],[0.11410040999999183,0.11409916999999581,227285775,14,null,null,null,null,null,null,null],[0.12336995900022885,0.12336876100000183,245751278,15,null,null,null,null,null,null,null],[0.12825289299962606,0.12824530700000025,255477269,16,null,null,null,null,null,null,null],[0.14549820499996713,0.1454886399999964,289829482,17,null,null,null,null,null,null,null],[0.16991017300006206,0.16989852900000102,338457586,18,null,null,null,null,null,null,null],[0.18149093400006677,0.1814888429999968,361525955,19,null,null,null,null,null,null,null],[0.1649136410005667,0.16491175800000235,328504075,20,null,null,null,null,null,null,null],[0.1667965730002834,0.16679473699999647,332255295,21,null,null,null,null,null,null,null],[0.19235600899992278,0.1923537309999972,383168755,22,null,null,null,null,null,null,null],[0.22425931899942952,0.22425875300000087,446726143,23,null,null,null,null,null,null,null],[0.21758937799950218,0.2175805440000005,433433355,25,null,null,null,null,null,null,null],[0.2167109749998417,0.2167012699999944,431683137,26,null,null,null,null,null,null,null],[0.27762590299971635,0.277622633,553024427,27,null,null,null,null,null,null,null],[0.2656790169994565,0.26565922799999697,529226566,28,null,null,null,null,null,null,null],[0.24561053100023855,0.24560976800000134,489254877,30,null,null,null,null,null,null,null],[0.2500008759998309,0.24999787800000206,497995809,31,null,null,null,null,null,null,null],[0.2795256050003445,0.27952251100000325,556808921,33,null,null,null,null,null,null,null],[0.2945494880004844,0.2945459430000028,586735513,35,null,null,null,null,null,null,null],[0.3047629499997129,0.30474784300000124,607081324,36,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.0146217357556806e-4,"confIntUDX":1.8120545813261803e-4,"confIntCL":5.0e-2},"estPoint":6.0200457824953705e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":1.4863364800033585e-2,"confIntUDX":1.3585850286056411e-2,"confIntCL":5.0e-2},"estPoint":0.9845165665462834},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":3.999391374731412e-3,"confIntUDX":2.7250428196408825e-3,"confIntCL":5.0e-2},"estPoint":-1.831304674123719e-3},"iters":{"estError":{"confIntLDX":1.7752643444074283e-4,"confIntUDX":3.1884684952994836e-4,"confIntCL":5.0e-2},"estPoint":6.161397548473027e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.52785339144139e-4,"confIntUDX":2.0805521912514502e-4,"confIntCL":5.0e-2},"estPoint":4.05037207706454e-4},"anOutlierVar":{"ovFraction":0.4049491808491435,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[5.473953688048519e-3,5.490644426181652e-3,5.507335164314784e-3,5.524025902447917e-3,5.5407166405810485e-3,5.557407378714181e-3,5.5740981168473135e-3,5.590788854980446e-3,5.6074795931135785e-3,5.624170331246711e-3,5.640861069379843e-3,5.657551807512975e-3,5.674242545646108e-3,5.69093328377924e-3,5.707624021912373e-3,5.724314760045505e-3,5.741005498178637e-3,5.757696236311769e-3,5.774386974444902e-3,5.791077712578034e-3,5.807768450711167e-3,5.824459188844299e-3,5.841149926977431e-3,5.857840665110563e-3,5.874531403243696e-3,5.891222141376828e-3,5.907912879509961e-3,5.924603617643093e-3,5.941294355776225e-3,5.9579850939093576e-3,5.97467583204249e-3,5.991366570175623e-3,6.008057308308755e-3,6.024748046441888e-3,6.041438784575019e-3,6.058129522708152e-3,6.074820260841284e-3,6.091510998974417e-3,6.108201737107549e-3,6.124892475240682e-3,6.141583213373814e-3,6.158273951506946e-3,6.174964689640078e-3,6.191655427773211e-3,6.208346165906343e-3,6.225036904039476e-3,6.2417276421726075e-3,6.25841838030574e-3,6.2751091184388725e-3,6.291799856572005e-3,6.3084905947051375e-3,6.32518133283827e-3,6.3418720709714025e-3,6.358562809104534e-3,6.375253547237667e-3,6.391944285370799e-3,6.408635023503932e-3,6.425325761637064e-3,6.442016499770196e-3,6.458707237903328e-3,6.475397976036461e-3,6.492088714169593e-3,6.508779452302726e-3,6.525470190435858e-3,6.542160928568991e-3,6.558851666702122e-3,6.575542404835255e-3,6.592233142968387e-3,6.60892388110152e-3,6.625614619234652e-3,6.642305357367784e-3,6.6589960955009166e-3,6.675686833634049e-3,6.6923775717671816e-3,6.709068309900314e-3,6.725759048033447e-3,6.742449786166579e-3,6.759140524299711e-3,6.775831262432843e-3,6.792522000565976e-3,6.809212738699108e-3,6.825903476832241e-3,6.842594214965372e-3,6.859284953098505e-3,6.875975691231637e-3,6.89266642936477e-3,6.909357167497902e-3,6.926047905631035e-3,6.942738643764167e-3,6.9594293818973e-3,6.9761201200304315e-3,6.992810858163564e-3,7.0095015962966965e-3,7.026192334429829e-3,7.042883072562961e-3,7.059573810696093e-3,7.076264548829226e-3,7.092955286962358e-3,7.109646025095491e-3,7.126336763228623e-3,7.143027501361756e-3,7.159718239494888e-3,7.17640897762802e-3,7.193099715761152e-3,7.209790453894285e-3,7.226481192027417e-3,7.243171930160549e-3,7.259862668293681e-3,7.276553406426814e-3,7.293244144559946e-3,7.309934882693079e-3,7.326625620826211e-3,7.343316358959344e-3,7.360007097092476e-3,7.376697835225608e-3,7.3933885733587406e-3,7.410079311491873e-3,7.426770049625006e-3,7.443460787758137e-3,7.46015152589127e-3,7.476842264024402e-3,7.493533002157535e-3,7.510223740290667e-3,7.5269144784238e-3,7.543605216556932e-3,7.560295954690065e-3,7.576986692823197e-3,7.593677430956329e-3],"kdeType":"time","kdePDF":[121.82478688616182,135.24390771338489,162.38174256622165,203.76020146301767,259.9756927030033,331.4948828882259,418.41633889232446,520.2286133922315,635.6020114619961,762.2540623050751,896.9252965533394,1035.4908069911132,1173.2143997344922,1305.1281778906407,1426.49536782347,1533.2934928235456,1622.643852543284,1693.1152780869209,1744.8461265286785,1779.4560917448696,1799.7535657708738,1809.2784170978305,1811.747661472214,1810.4875939812632,1807.937962421923,1805.3018078707762,1802.3911531523124,1797.687938326534,1788.6065307170775,1771.9139586046367,1744.2413678899177,1702.6085361827243,1644.884316696557,1570.1192165668717,1478.7093479437697,1372.379347059022,1254.0002287538111,1127.2814364596047,996.3907991119163,865.560061236524,738.7277577088759,619.2580029546332,509.75684915742363,411.99089666018995,326.8987047953034,254.6759150552004,194.91024226377246,146.74199265646635,109.0283511073982,80.49404403511032,59.856029561749814,45.91484512390338,37.609767250695825,34.03888851246462,34.44860487457091,38.19984447353418,44.720570239878,53.45543279659407,63.82361577201444,75.19458846743893,86.88850537433555,98.2035246455894,108.46691690786108,117.10143791890938,123.6941949616943,128.05324065416764,130.23810201365407,130.55449820795042,129.50999378804053,127.73501878879114,125.88094434792201,124.51212982185848,124.01085032506322,124.51225269557929,125.88126207827611,127.73570628241384,129.51139778408506,130.55725671958388,130.24332766229838,128.06277019336883,123.71087077263591,117.12930228379659,108.51103152510753,98.26882891038359,86.97664191676168,75.29690108315467,63.907535761525885,53.4402443860973,44.43721018818427,37.32820543067468,32.42519196449465,29.928179055426508,29.934868570822797,32.44759165082797,37.373801884844724,44.520136699658735,53.58378657738896,64.1476174310892,75.68637871053703,87.5899926852536,99.20647139045623,109.90211173859194,119.13139988503974,126.50486730827798,131.84123966924417,135.19141265493374,136.82616231272078,137.18631441877363,136.80192130340873,136.19401550375792,135.77699734064092,135.78047138198988,136.2060406303975,136.82783598474768,137.23687303852284,136.92063477365733,135.36251798991336,132.14240937939562,127.02029223719038,119.98907401951824,111.28956635152001,101.38803502289359,90.92322285601676,80.63390959545555,71.27932694451422,63.5633401046598,58.07015853091618,55.21569366030053]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":11,"reportName":"ByteString/Map/revsorted","reportOutliers":{"highSevere":2,"highMild":2,"lowMild":0,"samplesSeen":33,"lowSevere":0},"reportMeasured":[[5.730931000471173e-3,5.731085999997276e-3,11416584,1,null,null,null,null,null,null,null],[1.107358699937322e-2,1.1073656999997183e-2,22059137,2,null,null,null,null,null,null,null],[1.808070199967915e-2,1.8080931999996608e-2,36017559,3,null,null,null,null,null,null,null],[2.334339099979843e-2,2.3343320999998696e-2,46500372,4,null,null,null,null,null,null,null],[2.8997962000175903e-2,2.8997803999999405e-2,57763925,5,null,null,null,null,null,null,null],[3.3903583999745024e-2,3.389761000000391e-2,67535691,6,null,null,null,null,null,null,null],[4.077235399927304e-2,4.077211200000619e-2,81218328,7,null,null,null,null,null,null,null],[4.577922699991177e-2,4.5773125000003745e-2,91191746,8,null,null,null,null,null,null,null],[5.5217939000613114e-2,5.5217460999998025e-2,109993545,9,null,null,null,null,null,null,null],[5.968087399924116e-2,5.9672932999994543e-2,118883504,10,null,null,null,null,null,null,null],[6.466178800019406e-2,6.466127899999918e-2,128805428,11,null,null,null,null,null,null,null],[7.037373799994384e-2,7.037298899999911e-2,140183258,12,null,null,null,null,null,null,null],[7.487446000050113e-2,7.48738160000002e-2,149148899,13,null,null,null,null,null,null,null],[8.054586500020378e-2,8.050665199999685e-2,160446037,14,null,null,null,null,null,null,null],[8.56363800003237e-2,8.563551999999675e-2,170586216,15,null,null,null,null,null,null,null],[9.200188300019363e-2,9.200142699999958e-2,183267166,16,null,null,null,null,null,null,null],[9.7334692000004e-2,9.733374400000372e-2,193889014,17,null,null,null,null,null,null,null],[0.10428558500007057,0.10428442999999987,207734819,18,null,null,null,null,null,null,null],[0.1093070169999919,0.10930587599999342,217737682,19,null,null,null,null,null,null,null],[0.11519934300031309,0.11519272900000033,229474888,20,null,null,null,null,null,null,null],[0.12531965200014383,0.125305455000003,249634337,21,null,null,null,null,null,null,null],[0.14925606300039362,0.14924727200000376,297315215,22,null,null,null,null,null,null,null],[0.1378330100005769,0.13782502499999794,274560627,23,null,null,null,null,null,null,null],[0.14632629599964275,0.14632471200000197,291478967,25,null,null,null,null,null,null,null],[0.15559459799987962,0.15559306600000156,309941712,26,null,null,null,null,null,null,null],[0.1631769780005925,0.16316835800000007,325045074,27,null,null,null,null,null,null,null],[0.2076769459999923,0.2076607569999993,413687776,28,null,null,null,null,null,null,null],[0.18284677700012253,0.18283772600000248,364226884,30,null,null,null,null,null,null,null],[0.20314648399926227,0.20314410099999947,404663308,31,null,null,null,null,null,null,null],[0.19946302300013485,0.19946075600000057,397325913,33,null,null,null,null,null,null,null],[0.21055673599948932,0.21055421300000177,419424100,35,null,null,null,null,null,null,null],[0.2593114110004535,0.2592952200000056,516542599,36,null,null,null,null,null,null,null],[0.22768934899977467,0.22766971800000135,453551700,38,null,null,null,null,null,null,null],[0.23597945500023343,0.23597134300000278,470066048,40,null,null,null,null,null,null,null],[0.25315554200005863,0.2531525549999998,504279991,42,null,null,null,null,null,null,null],[0.25404201800029114,0.2540246359999969,506045690,44,null,null,null,null,null,null,null],[0.27939415200035,0.2793907840000003,556546542,47,null,null,null,null,null,null,null],[0.295088451999618,0.2950853769999995,587810133,49,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":5.4239401475972455e-5,"confIntUDX":7.185268770627026e-5,"confIntCL":5.0e-2},"estPoint":4.183210063607106e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":5.743859002251495e-3,"confIntUDX":4.335195471424913e-3,"confIntCL":5.0e-2},"estPoint":0.9937076277093424},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":2.1241331929631735e-3,"confIntUDX":2.2072736389632704e-3,"confIntCL":5.0e-2},"estPoint":1.7202057697345626e-3},"iters":{"estError":{"confIntLDX":7.72167674596624e-5,"confIntUDX":1.392972994530622e-4,"confIntCL":5.0e-2},"estPoint":4.113512390105684e-3}}}],"anStdDev":{"estError":{"confIntLDX":4.7329458662270335e-5,"confIntUDX":5.825264413319379e-5,"confIntCL":5.0e-2},"estPoint":1.9627155674962126e-4},"anOutlierVar":{"ovFraction":0.2607287134452999,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.906951581783667e-3,3.914047188226286e-3,3.921142794668904e-3,3.928238401111523e-3,3.935334007554142e-3,3.942429613996761e-3,3.94952522043938e-3,3.956620826881999e-3,3.9637164333246174e-3,3.970812039767236e-3,3.977907646209855e-3,3.985003252652474e-3,3.992098859095092e-3,3.999194465537711e-3,4.00629007198033e-3,4.013385678422949e-3,4.020481284865568e-3,4.027576891308187e-3,4.034672497750805e-3,4.041768104193424e-3,4.048863710636043e-3,4.0559593170786615e-3,4.06305492352128e-3,4.070150529963899e-3,4.077246136406518e-3,4.084341742849137e-3,4.091437349291756e-3,4.098532955734375e-3,4.105628562176993e-3,4.112724168619612e-3,4.119819775062231e-3,4.1269153815048495e-3,4.134010987947468e-3,4.141106594390087e-3,4.1482022008327065e-3,4.155297807275325e-3,4.162393413717944e-3,4.169489020160563e-3,4.176584626603181e-3,4.1836802330458e-3,4.190775839488419e-3,4.1978714459310375e-3,4.204967052373656e-3,4.212062658816275e-3,4.219158265258894e-3,4.226253871701513e-3,4.233349478144132e-3,4.240445084586751e-3,4.247540691029369e-3,4.254636297471988e-3,4.261731903914607e-3,4.2688275103572254e-3,4.275923116799844e-3,4.283018723242463e-3,4.2901143296850824e-3,4.297209936127701e-3,4.30430554257032e-3,4.311401149012939e-3,4.318496755455557e-3,4.325592361898176e-3,4.332687968340795e-3,4.339783574783413e-3,4.346879181226032e-3,4.353974787668651e-3,4.36107039411127e-3,4.368166000553889e-3,4.375261606996508e-3,4.3823572134391265e-3,4.389452819881745e-3,4.396548426324364e-3,4.403644032766983e-3,4.410739639209601e-3,4.41783524565222e-3,4.42493085209484e-3,4.432026458537458e-3,4.439122064980077e-3,4.446217671422696e-3,4.4533132778653145e-3,4.460408884307933e-3,4.467504490750552e-3,4.474600097193171e-3,4.481695703635789e-3,4.488791310078408e-3,4.495886916521027e-3,4.502982522963646e-3,4.510078129406265e-3,4.517173735848884e-3,4.5242693422915025e-3,4.531364948734121e-3,4.53846055517674e-3,4.545556161619359e-3,4.552651768061977e-3,4.559747374504596e-3,4.566842980947216e-3,4.573938587389834e-3,4.581034193832453e-3,4.588129800275072e-3,4.59522540671769e-3,4.602321013160309e-3,4.609416619602928e-3,4.6165122260455466e-3,4.623607832488165e-3,4.630703438930784e-3,4.637799045373403e-3,4.644894651816022e-3,4.651990258258641e-3,4.65908586470126e-3,4.666181471143878e-3,4.673277077586497e-3,4.680372684029116e-3,4.6874682904717345e-3,4.694563896914353e-3,4.701659503356973e-3,4.7087551097995915e-3,4.71585071624221e-3,4.722946322684829e-3,4.730041929127448e-3,4.737137535570066e-3,4.744233142012685e-3,4.751328748455304e-3,4.7584243548979225e-3,4.765519961340541e-3,4.77261556778316e-3,4.7797111742257795e-3,4.786806780668398e-3,4.793902387111017e-3,4.800997993553636e-3,4.808093599996254e-3],"kdeType":"time","kdePDF":[776.9589937378233,803.7244297328687,856.6539684841589,934.5515040579273,1035.6413032489331,1157.595307937139,1297.5768482589162,1452.3046068430856,1618.1391401915098,1791.1917971107052,1967.4528494282918,2142.932563490089,2313.806326477114,2476.553278447414,2628.0775281244005,2765.802085632588,2887.728039280513,2992.4549332266306,3079.1623024657683,3147.5563395073177,3197.7891562140635,3230.3606075569587,3246.0138615293044,3245.635725506639,3230.171266411974,3200.559753391602,3157.695790620016,3102.4161345011385,3035.5095367016506,2957.7443918276854,2869.9072619728418,2772.8446388538,2667.500594695041,2554.944150257121,2436.382037632519,2313.1547737608444,2186.7162744003854,2058.5993229977043,1930.3708075567881,1803.5815745423074,1679.7159479937548,1560.1454609467046,1446.0902835763204,1338.5904241268265,1238.4872804767851,1146.4147839483373,1062.7984081451154,987.8598401239741,921.6251576575407,863.934856395016,814.4548769387183,772.6886986849581,737.9913887567093,709.5870411591034,686.5911907839203,668.0394916714708,652.9232419037338,640.231323957802,628.9969685205397,618.3466292396907,607.5473629021537,596.0486030061796,583.5142014714967,569.8411315011855,555.1622567779793,539.8319684957883,524.3951046957152,509.541194406985,496.04750619730265,484.7154476501718,476.305433703684,471.47536470660236,470.7273546313584,474.36642159838647,482.4736425056361,494.8949493258631,511.24546720315,530.928191333553,553.1649488551963,577.0370184207278,601.5324634691792,625.597127080742,648.1862809852012,668.3140743063011,685.0981669922411,697.797260539488,705.8396719733233,708.8416538104636,706.6148439393402,699.163006234,686.6690318690502,669.4739205585521,648.0500451743326,622.9713265847731,594.8829448214371,564.472875373796,532.446912213722,499.5080236079008,466.34002276901214,433.59477560216135,401.8816484975329,371.75771351339046,343.7174079718224,318.1808537254534,295.4807794693755,275.8488147756292,259.4026761133526,246.13629253599285,235.91510824329322,228.47859323757095,223.4513997482925,220.3636929721952,218.68008411194816,217.83545819754795,217.2749832774392,216.4948589399106,215.08001994282938,212.7351104932141,209.30558160323108,204.78667532815376,199.31923599631008,193.1725902999046,186.71601607542584,180.38143451136557,174.62079948915718,169.86214504720317,166.46835331710525,164.70242641517314]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":12,"reportName":"ByteString/HashMap/sorted","reportOutliers":{"highSevere":0,"highMild":3,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.508691000206454e-3,3.5088439999952925e-3,6990017,1,null,null,null,null,null,null,null],[8.737513999221846e-3,8.738131999997734e-3,17406720,2,null,null,null,null,null,null,null],[1.2593759000083082e-2,1.2593860999999151e-2,25087545,3,null,null,null,null,null,null,null],[1.6463273000226764e-2,1.6463348000002043e-2,32795496,4,null,null,null,null,null,null,null],[2.1917132999988098e-2,2.191174700000431e-2,43659239,5,null,null,null,null,null,null,null],[2.5211938999746053e-2,2.5211960000000033e-2,50222441,6,null,null,null,null,null,null,null],[2.7821570000014617e-2,2.7821529000000567e-2,55420970,7,null,null,null,null,null,null,null],[3.26131069996336e-2,3.261292899999546e-2,64965278,8,null,null,null,null,null,null,null],[3.607944499981386e-2,3.607341600000069e-2,71870360,9,null,null,null,null,null,null,null],[4.100149399982911e-2,4.100118900000638e-2,81674751,10,null,null,null,null,null,null,null],[4.412657200009562e-2,4.41269009999985e-2,87901288,11,null,null,null,null,null,null,null],[4.975815400030115e-2,4.975105100000121e-2,99117905,12,null,null,null,null,null,null,null],[5.236958400018921e-2,5.236255799999867e-2,104319582,13,null,null,null,null,null,null,null],[5.5950605000361975e-2,5.595015800000169e-2,111453277,14,null,null,null,null,null,null,null],[6.0200064000127895e-2,6.0199649999994165e-2,119917993,15,null,null,null,null,null,null,null],[6.371274799948878e-2,6.371221399999882e-2,126915144,16,null,null,null,null,null,null,null],[7.076924099965254e-2,7.076855000000393e-2,140971421,17,null,null,null,null,null,null,null],[7.626865299971541e-2,7.626798100000087e-2,151926194,18,null,null,null,null,null,null,null],[8.47573149994787e-2,8.473508800000218e-2,168836970,19,null,null,null,null,null,null,null],[8.437865900032193e-2,8.437792600000193e-2,168081186,20,null,null,null,null,null,null,null],[8.7004741999408e-2,8.699320500000596e-2,173313508,21,null,null,null,null,null,null,null],[0.10007723300077487,0.10007631500000258,199352341,22,null,null,null,null,null,null,null],[0.10371524800029874,0.10369821199999762,206598956,23,null,null,null,null,null,null,null],[0.11516233000020293,0.11516118899999839,229401564,25,null,null,null,null,null,null,null],[0.1116999180003404,0.11169891699999823,222505090,26,null,null,null,null,null,null,null],[0.1222060860000056,0.12220493799999588,243432767,27,null,null,null,null,null,null,null],[0.11628019599993422,0.1162788990000081,231628158,28,null,null,null,null,null,null,null],[0.12317499900018447,0.1231736360000042,245362339,30,null,null,null,null,null,null,null],[0.12817238499974337,0.12817092799998875,255316711,31,null,null,null,null,null,null,null],[0.1355673489997571,0.13556061900000316,270047859,33,null,null,null,null,null,null,null],[0.1414783210002497,0.14146428699999092,281822168,35,null,null,null,null,null,null,null],[0.14710562999971444,0.14709189799999933,293031500,36,null,null,null,null,null,null,null],[0.15307397800006584,0.1530722580000088,304920218,38,null,null,null,null,null,null,null],[0.17381271700014622,0.1738111100000026,346231840,40,null,null,null,null,null,null,null],[0.1734175130004587,0.17341569399999912,345444344,42,null,null,null,null,null,null,null],[0.2082519309997224,0.20822998500000267,414837678,44,null,null,null,null,null,null,null],[0.20506827400004113,0.20505860100000461,408491596,47,null,null,null,null,null,null,null],[0.20512327200049185,0.20512096000000213,408601228,49,null,null,null,null,null,null,null],[0.2106375029998162,0.2106349310000013,419584902,52,null,null,null,null,null,null,null],[0.2206458090004162,0.2206432110000094,439521530,54,null,null,null,null,null,null,null],[0.23217467900030897,0.23217183599999203,462486496,57,null,null,null,null,null,null,null],[0.24098477400002594,0.24096993300000236,480037110,60,null,null,null,null,null,null,null],[0.2523891589999039,0.252386247000004,502753696,63,null,null,null,null,null,null,null],[0.26778634800029977,0.26777832100000865,533424214,66,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":1.321278156905456e-5,"confIntUDX":2.0014747469060228e-5,"confIntCL":5.0e-2},"estPoint":4.002405826920141e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":3.3645344876553906e-4,"confIntUDX":3.8844563372608665e-4,"confIntCL":5.0e-2},"estPoint":0.9995180362322155},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":8.54357532900292e-4,"confIntUDX":6.868039487090028e-4,"confIntCL":5.0e-2},"estPoint":-5.172148492991144e-4},"iters":{"estError":{"confIntLDX":3.3403718698032936e-5,"confIntUDX":4.5042943381931946e-5,"confIntCL":5.0e-2},"estPoint":4.028950101154401e-3}}}],"anStdDev":{"estError":{"confIntLDX":1.3773554110513053e-5,"confIntUDX":2.368984051155525e-5,"confIntCL":5.0e-2},"estPoint":5.010562152886564e-5},"anOutlierVar":{"ovFraction":2.1728395061728405e-2,"ovDesc":"a slight","ovEffect":"Slight"}},"reportKDEs":[{"kdeValues":[3.9043660463083584e-3,3.906722081311098e-3,3.909078116313837e-3,3.9114341513165765e-3,3.913790186319316e-3,3.916146221322055e-3,3.918502256324795e-3,3.920858291327534e-3,3.923214326330273e-3,3.925570361333013e-3,3.927926396335752e-3,3.930282431338491e-3,3.932638466341231e-3,3.9349945013439705e-3,3.937350536346709e-3,3.939706571349449e-3,3.942062606352189e-3,3.944418641354927e-3,3.946774676357667e-3,3.949130711360407e-3,3.9514867463631455e-3,3.953842781365885e-3,3.956198816368625e-3,3.958554851371364e-3,3.960910886374103e-3,3.963266921376843e-3,3.965622956379582e-3,3.967978991382321e-3,3.970335026385061e-3,3.9726910613878e-3,3.975047096390539e-3,3.977403131393279e-3,3.979759166396018e-3,3.9821152013987575e-3,3.984471236401497e-3,3.986827271404236e-3,3.989183306406976e-3,3.991539341409715e-3,3.993895376412454e-3,3.996251411415194e-3,3.998607446417933e-3,4.000963481420672e-3,4.003319516423412e-3,4.0056755514261515e-3,4.00803158642889e-3,4.01038762143163e-3,4.01274365643437e-3,4.015099691437108e-3,4.017455726439848e-3,4.019811761442588e-3,4.0221677964453265e-3,4.024523831448066e-3,4.026879866450806e-3,4.0292359014535446e-3,4.031591936456284e-3,4.033947971459024e-3,4.036304006461763e-3,4.038660041464502e-3,4.041016076467242e-3,4.043372111469981e-3,4.04572814647272e-3,4.04808418147546e-3,4.050440216478199e-3,4.0527962514809385e-3,4.055152286483678e-3,4.057508321486417e-3,4.059864356489157e-3,4.062220391491896e-3,4.064576426494636e-3,4.066932461497375e-3,4.069288496500114e-3,4.071644531502854e-3,4.074000566505593e-3,4.0763566015083325e-3,4.078712636511072e-3,4.081068671513811e-3,4.0834247065165506e-3,4.08578074151929e-3,4.088136776522029e-3,4.090492811524769e-3,4.092848846527508e-3,4.095204881530247e-3,4.097560916532987e-3,4.099916951535726e-3,4.102272986538465e-3,4.104629021541205e-3,4.1069850565439445e-3,4.109341091546683e-3,4.111697126549423e-3,4.114053161552163e-3,4.116409196554901e-3,4.118765231557641e-3,4.121121266560381e-3,4.1234773015631195e-3,4.125833336565859e-3,4.128189371568599e-3,4.130545406571338e-3,4.132901441574077e-3,4.135257476576817e-3,4.137613511579556e-3,4.139969546582295e-3,4.142325581585035e-3,4.144681616587774e-3,4.1470376515905134e-3,4.149393686593253e-3,4.151749721595992e-3,4.1541057565987315e-3,4.156461791601471e-3,4.15881782660421e-3,4.16117386160695e-3,4.163529896609689e-3,4.165885931612428e-3,4.168241966615168e-3,4.170598001617907e-3,4.172954036620646e-3,4.175310071623386e-3,4.1776661066261255e-3,4.180022141628864e-3,4.182378176631604e-3,4.184734211634344e-3,4.187090246637082e-3,4.189446281639822e-3,4.191802316642562e-3,4.1941583516453005e-3,4.19651438664804e-3,4.19887042165078e-3,4.2012264566535186e-3,4.203582491656258e-3],"kdeType":"time","kdePDF":[839.7206085805137,897.691586990269,1012.1844198318238,1180.243883175856,1397.3218444202835,1657.2078896178332,1952.0327057488844,2272.393786754268,2607.6354604376756,2946.290771492242,3276.6676499708597,3587.541608134861,3868.9051364906854,4112.720048339064,4313.62052419102,4469.517483491529,4582.055741324405,4656.873116360344,4703.607308890328,4735.596703809347,4769.231075091032,4822.9321270706305,4915.78333675714,5065.880630536278,5288.532507311854,5594.4894532644585,5988.415792600895,6467.821713921061,7022.642195132035,7635.58198785113,8283.248043463243,8937.976426065841,9570.14935580374,10150.711689939091,10653.555028964338,11057.45471547211,11347.321688226895,11514.655201084466,11557.229216041082,11478.182905157486,11284.782607195013,10987.156005768908,10597.26174529848,10128.25953286503,9594.312750048597,9010.722082907372,8394.188452732975,7762.960968116527,7136.649751322013,6535.566486979087,5979.575676202882,5486.567474998964,5070.7691103330035,4741.173204397674,4500.365875957544,4343.985687200751,4260.948058196062,4234.448314592861,4243.63325468424,4265.7281877160995,4278.340987770073,4261.6462516393585,4200.1816309673795,4084.056915299384,3909.470251190093,3678.5276182517423,3398.4543273086156,3080.357283858767,2737.7359847212238,2384.94677733543,2035.8024695444449,1702.4456115646058,1394.5783854025387,1119.0748060500905,879.9501458569757,678.623929765606,514.3894144727395,384.99429991446647,287.24245418716833,217.54118609568775,172.33909146539426,148.4220538133988,143.05678267780382,153.99057433877525,179.3319392832749,217.3490189979365,266.2310038395179,323.8614730852015,387.6508332877725,454.4670238210268,520.6892330696026,582.3896006292911,635.6253665076508,676.8025690234175,703.0566284007224,712.5888119247172,704.9026953668136,680.9007567083646,642.8249169767629,594.0509667405234,538.7695660452753,481.60104867850623,427.19508022496655,379.859739344735,343.250921669579,320.1368363020303,312.2386178075357,320.14018517476137,343.2595575300304,379.8784276004754,427.2334821622779,481.6775974055273,538.9182037958242,594.3323358974968,643.3442381845389,681.8353036574775,706.5423326169004,715.3932303585547,707.7322969618108,684.4005210233889,647.6572248560572,600.9533046718876,548.58767081106,495.29267827112614,445.79889168905726,404.42478547747,374.7257496856452,359.22324801996194]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":13,"reportName":"ByteString/HashMap/random","reportOutliers":{"highSevere":2,"highMild":0,"lowMild":0,"samplesSeen":38,"lowSevere":0},"reportMeasured":[[3.6986209997849073e-3,3.6989480000073627e-3,7368635,1,null,null,null,null,null,null,null],[8.227787000578246e-3,8.227860999994618e-3,16390368,2,null,null,null,null,null,null,null],[1.1789797999881557e-2,1.1789871000004837e-2,23485953,3,null,null,null,null,null,null,null],[1.5494723999836424e-2,1.5494763000006628e-2,30865921,4,null,null,null,null,null,null,null],[2.0106359999772394e-2,2.0106253999998103e-2,40052124,5,null,null,null,null,null,null,null],[2.402420999987953e-2,2.4024095000001466e-2,47856403,6,null,null,null,null,null,null,null],[2.8131004999522702e-2,2.8130798999995932e-2,56037057,7,null,null,null,null,null,null,null],[3.14344060006988e-2,3.143435100000147e-2,62617652,8,null,null,null,null,null,null,null],[3.5935726999923645e-2,3.593547699999533e-2,71584030,9,null,null,null,null,null,null,null],[3.98295800005144e-2,3.982920500000375e-2,79340101,10,null,null,null,null,null,null,null],[4.389816100047028e-2,4.3897825000001944e-2,87444933,11,null,null,null,null,null,null,null],[4.727952099983668e-2,4.7273438999994255e-2,94180530,12,null,null,null,null,null,null,null],[5.1878640999348136e-2,5.187826899999948e-2,103341875,13,null,null,null,null,null,null,null],[5.591469099999813e-2,5.591427800000304e-2,111381751,14,null,null,null,null,null,null,null],[6.084711699986656e-2,6.084653000000628e-2,121206722,15,null,null,null,null,null,null,null],[6.302184199921612e-2,6.302139299999965e-2,125538990,16,null,null,null,null,null,null,null],[6.833554000058939e-2,6.833488899999907e-2,136123648,17,null,null,null,null,null,null,null],[7.306696799969359e-2,7.306639000000814e-2,145548663,18,null,null,null,null,null,null,null],[7.696347900036926e-2,7.69564410000072e-2,153309960,19,null,null,null,null,null,null,null],[7.900796200010518e-2,7.90082219999988e-2,157384800,20,null,null,null,null,null,null,null],[8.329252900057327e-2,8.32918029999945e-2,165917614,21,null,null,null,null,null,null,null],[8.649809500002448e-2,8.64972730000062e-2,172302994,22,null,null,null,null,null,null,null],[9.088428799987014e-2,9.087754100001177e-2,181040132,23,null,null,null,null,null,null,null],[9.87212569998519e-2,9.871439100000146e-2,196650849,25,null,null,null,null,null,null,null],[0.10432727899933525,0.10432632100000205,207818627,26,null,null,null,null,null,null,null],[0.10755400299967732,0.10755292499999314,214245840,27,null,null,null,null,null,null,null],[0.11128935600027035,0.1112883329999903,221686773,28,null,null,null,null,null,null,null],[0.12033553099990968,0.12032691599999623,239705959,30,null,null,null,null,null,null,null],[0.12424444999942352,0.12423523700000771,247492506,31,null,null,null,null,null,null,null],[0.1378953769999498,0.13787743199999625,274684888,33,null,null,null,null,null,null,null],[0.14161267100007535,0.1416048520000004,282089391,35,null,null,null,null,null,null,null],[0.14346379500057083,0.1434623110000075,285777308,36,null,null,null,null,null,null,null],[0.1526866219992371,0.15268497800001057,304148796,38,null,null,null,null,null,null,null],[0.16002913499960414,0.16002722200001074,318774503,40,null,null,null,null,null,null,null],[0.16993233499943017,0.16993046899999342,338501726,42,null,null,null,null,null,null,null],[0.17633686099998158,0.1763347770000081,351259067,44,null,null,null,null,null,null,null],[0.18823027999951591,0.1882221950000087,374950585,47,null,null,null,null,null,null,null],[0.1956163690001631,0.19560684799999706,389663671,49,null,null,null,null,null,null,null],[0.2076564619992496,0.2076541619999972,413647371,52,null,null,null,null,null,null,null],[0.2184238390000246,0.21842126500000347,435095302,54,null,null,null,null,null,null,null],[0.2284621260005224,0.2284532850000005,455091479,57,null,null,null,null,null,null,null],[0.23935541700029717,0.2393440620000007,476791407,60,null,null,null,null,null,null,null],[0.25077386800057866,0.25077085200000226,499535800,63,null,null,null,null,null,null,null],[0.2629461740007173,0.26294295799999645,523782551,66,null,null,null,null,null,null,null],[0.28482179700040433,0.2848195099999913,567361141,69,null,null,null,null,null,null,null]]},{"reportAnalysis":{"anMean":{"estError":{"confIntLDX":3.495646704464693e-5,"confIntUDX":4.9630669471754235e-5,"confIntCL":5.0e-2},"estPoint":4.109310544482966e-3},"anRegress":[{"regRSquare":{"estError":{"confIntLDX":2.142496691383111e-3,"confIntUDX":1.3757930319761025e-3,"confIntCL":5.0e-2},"estPoint":0.9979520202303545},"regResponder":"time","regCoeffs":{"y":{"estError":{"confIntLDX":1.1416344066406223e-3,"confIntUDX":8.217696948966812e-4,"confIntCL":5.0e-2},"estPoint":-8.348309251168644e-4},"iters":{"estError":{"confIntLDX":4.2730611292938515e-5,"confIntUDX":6.710230883255446e-5,"confIntCL":5.0e-2},"estPoint":4.162001192155132e-3}}}],"anStdDev":{"estError":{"confIntLDX":3.1104105138616135e-5,"confIntUDX":5.869870754241165e-5,"confIntCL":5.0e-2},"estPoint":1.1867642757769951e-4},"anOutlierVar":{"ovFraction":0.12844640214234063,"ovDesc":"a moderate","ovEffect":"Moderate"}},"reportKDEs":[{"kdeValues":[3.917860838911717e-3,3.922891731729505e-3,3.927922624547293e-3,3.932953517365081e-3,3.937984410182869e-3,3.943015303000657e-3,3.948046195818445e-3,3.953077088636233e-3,3.95810798145402e-3,3.963138874271808e-3,3.968169767089596e-3,3.9732006599073845e-3,3.9782315527251725e-3,3.983262445542961e-3,3.988293338360749e-3,3.993324231178537e-3,3.998355123996325e-3,4.003386016814113e-3,4.008416909631901e-3,4.013447802449689e-3,4.018478695267477e-3,4.023509588085265e-3,4.028540480903053e-3,4.033571373720841e-3,4.0386022665386285e-3,4.0436331593564166e-3,4.048664052174205e-3,4.053694944991993e-3,4.058725837809781e-3,4.063756730627569e-3,4.068787623445357e-3,4.073818516263145e-3,4.078849409080933e-3,4.083880301898721e-3,4.088911194716509e-3,4.093942087534297e-3,4.098972980352085e-3,4.104003873169873e-3,4.1090347659876614e-3,4.1140656588054495e-3,4.119096551623237e-3,4.124127444441025e-3,4.129158337258813e-3,4.134189230076601e-3,4.139220122894389e-3,4.144251015712177e-3,4.149281908529965e-3,4.154312801347753e-3,4.159343694165541e-3,4.164374586983329e-3,4.169405479801117e-3,4.1744363726189055e-3,4.1794672654366935e-3,4.184498158254482e-3,4.18952905107227e-3,4.194559943890057e-3,4.199590836707845e-3,4.204621729525633e-3,4.209652622343421e-3,4.214683515161209e-3,4.219714407978997e-3,4.224745300796785e-3,4.229776193614573e-3,4.234807086432361e-3,4.2398379792501495e-3,4.2448688720679376e-3,4.249899764885726e-3,4.254930657703514e-3,4.259961550521302e-3,4.26499244333909e-3,4.270023336156878e-3,4.275054228974666e-3,4.280085121792453e-3,4.285116014610241e-3,4.290146907428029e-3,4.295177800245817e-3,4.3002086930636054e-3,4.3052395858813935e-3,4.310270478699182e-3,4.31530137151697e-3,4.320332264334758e-3,4.325363157152546e-3,4.330394049970334e-3,4.335424942788122e-3,4.34045583560591e-3,4.345486728423698e-3,4.350517621241486e-3,4.355548514059273e-3,4.360579406877061e-3,4.3656102996948495e-3,4.3706411925126375e-3,4.375672085330426e-3,4.380702978148214e-3,4.385733870966002e-3,4.39076476378379e-3,4.395795656601578e-3,4.400826549419366e-3,4.405857442237154e-3,4.410888335054942e-3,4.41591922787273e-3,4.420950120690518e-3,4.425981013508306e-3,4.431011906326094e-3,4.436042799143882e-3,4.44107369196167e-3,4.446104584779458e-3,4.451135477597246e-3,4.456166370415034e-3,4.461197263232822e-3,4.46622815605061e-3,4.471259048868398e-3,4.476289941686186e-3,4.481320834503974e-3,4.486351727321762e-3,4.49138262013955e-3,4.496413512957338e-3,4.5014444057751265e-3,4.5064752985929145e-3,4.511506191410702e-3,4.51653708422849e-3,4.521567977046278e-3,4.526598869864066e-3,4.531629762681854e-3,4.536660655499642e-3,4.54169154831743e-3,4.546722441135218e-3,4.551753333953006e-3,4.556784226770794e-3],"kdeType":"time","kdePDF":[292.63363038353594,316.9824720615486,365.60170202461086,438.31921088524325,534.849628019641,654.7878444809832,797.6329326889798,962.851582207484,1149.9756686792616,1358.7114496604318,1589.023198670401,1841.1469024348635,2115.4935338019486,2412.417299987644,2731.849938811908,3072.83264185146,3433.0060350030526,3808.1394579268062,4191.788818479369,4575.165454429801,4947.277426714598,5295.3724977859,5605.673111061562,5864.352933393015,6058.666940322958,6178.11744246498,6215.521410505897,6167.843829573971,6036.680022598828,5828.306848884334,5553.274951561105,5225.574774585579,4861.468173174463,4478.124556680581,4092.2267055803086,3718.711650869739,3369.7864707183517,3054.312903869864,2777.5974383792495,2541.565617192601,2345.250323521759,2185.490492658699,2057.722017666341,1956.7460380011573,1877.3782804114965,1814.9123465714504,1765.36518724577,1725.5099668075409,1692.735713935273,1664.8001761515222,1639.5579149643904,1614.746513324072,1587.8983793547575,1556.4155970721124,1517.8056755661387,1470.0349238749784,1411.9228874586922,1343.4841314230107,1266.127540930958,1182.648162617727,1096.9872222798508,1013.7832589743274,937.780737809048,873.192609927644,823.1239660813659,789.1535407375237,771.1411725333128,767.2886678797665,774.4370078988185,788.5428943507535,805.2494338810089,820.4541278947571,830.7839494477377,833.9103733089169,828.6717680592438,815.0091670396421,793.7558112578373,766.343669275136,734.4968405621469,699.9718173989265,664.3817214919121,629.1127889082273,595.3147764693933,563.9297569471054,535.7200112715735,511.26529949624415,490.9186353675738,474.73119045117085,462.3740630437056,453.0920175644428,445.7198050381191,438.77687721549796,430.6357997877727,419.73956146409927,404.82901453306584,385.13761057009424,360.5171898228873,331.47362638367537,299.1102448597261,264.99496111363845,230.9796443886665,199.0047288370161,170.91850998222648,148.3309387179248,132.5095591176728,124.31429268777632,124.16101382409268,132.00269033495312,147.32085167581073,169.127290584888,195.98328151484296,226.04826384862156,257.1697891299465,287.02095615764125,313.28165867598295,333.84830655907393,347.0465664657594,351.81620698111965,347.8382747264169,335.582728438279,316.267579579916,291.7353845594984,264.26598683110734,236.35271257404406,210.47126847324296,188.86673290128428,173.37626605925425,165.29636144253521]}],"reportKeys":["time","cpuTime","cycles","iters","allocated","numGcs","bytesCopied","mutatorWallSeconds","mutatorCpuSeconds","gcWallSeconds","gcCpuSeconds"],"reportNumber":14,"reportName":"ByteString/HashMap/revsorted","reportOutliers":{"highSevere":1,"highMild":2,"lowMild":0,"samplesSeen":37,"lowSevere":0},"reportMeasured":[[3.483655000309227e-3,3.4838549999989255e-3,6940274,1,null,null,null,null,null,null,null],[8.150654999553808e-3,8.15074000000493e-3,16236721,2,null,null,null,null,null,null,null],[1.210476899996138e-2,1.2098733999991396e-2,24113391,3,null,null,null,null,null,null,null],[1.5876741999818478e-2,1.5876730000002226e-2,31626893,4,null,null,null,null,null,null,null],[2.083893600047304e-2,2.083882499999845e-2,41511349,5,null,null,null,null,null,null,null],[2.4013084000216622e-2,2.4014465999997014e-2,47837220,6,null,null,null,null,null,null,null],[2.8466252999351127e-2,2.846621000000482e-2,56705134,7,null,null,null,null,null,null,null],[3.243092000047909e-2,3.243083600000318e-2,64602576,8,null,null,null,null,null,null,null],[3.628020099949936e-2,3.627986499999736e-2,72269974,9,null,null,null,null,null,null,null],[3.989974400064966e-2,3.989951399999825e-2,79480199,10,null,null,null,null,null,null,null],[4.368214900023304e-2,4.3681866000000014e-2,87014643,11,null,null,null,null,null,null,null],[4.847340600008465e-2,4.847305399999868e-2,96558781,12,null,null,null,null,null,null,null],[5.230804899929353e-2,5.230129000000261e-2,104197087,13,null,null,null,null,null,null,null],[5.654618499920616e-2,5.653979599999559e-2,112639667,14,null,null,null,null,null,null,null],[6.308197999987897e-2,6.303111500000114e-2,125659720,15,null,null,null,null,null,null,null],[6.480945099974633e-2,6.480899700000009e-2,129100147,16,null,null,null,null,null,null,null],[6.776835800064873e-2,6.776771799999892e-2,134993694,17,null,null,null,null,null,null,null],[7.286090400066314e-2,7.28422449999897e-2,145137863,18,null,null,null,null,null,null,null],[7.642078600019886e-2,7.641511899998932e-2,152229387,19,null,null,null,null,null,null,null],[8.13036320005267e-2,8.130281200000411e-2,161955673,20,null,null,null,null,null,null,null],[8.46156190000329e-2,8.461584100000152e-2,168555139,21,null,null,null,null,null,null,null],[8.841974200004188e-2,8.841884199999583e-2,176130885,22,null,null,null,null,null,null,null],[9.315548700033105e-2,9.315456999999583e-2,185564167,23,null,null,null,null,null,null,null],[0.10022901499996806,0.10022829599999739,199655170,25,null,null,null,null,null,null,null],[0.10541847500007862,0.10541948699999182,209995886,26,null,null,null,null,null,null,null],[0.11121045400068397,0.11120927300000005,221529160,27,null,null,null,null,null,null,null],[0.11383615599970653,0.11383502599998963,226759761,28,null,null,null,null,null,null,null],[0.12196529700031533,0.12195705299998849,242952590,30,null,null,null,null,null,null,null],[0.13246785800038197,0.13245437099999435,263873816,31,null,null,null,null,null,null,null],[0.14293838899993716,0.1429311819999981,284734110,33,null,null,null,null,null,null,null],[0.15370618199995079,0.1537046269999962,306179886,35,null,null,null,null,null,null,null],[0.16212746200017136,0.16212556400000722,322954257,36,null,null,null,null,null,null,null],[0.15969439299988153,0.15969274700000824,318108211,38,null,null,null,null,null,null,null],[0.1625515470004757,0.162542277,323800254,40,null,null,null,null,null,null,null],[0.17143731200030743,0.1714151070000014,341500134,42,null,null,null,null,null,null,null],[0.18451108099998237,0.18450896899999236,367542147,44,null,null,null,null,null,null,null],[0.19326596799965046,0.19326367399999356,384981520,47,null,null,null,null,null,null,null],[0.21001610399980564,0.21001413199999774,418348402,49,null,null,null,null,null,null,null],[0.21647058300004574,0.21646809000000644,431204626,52,null,null,null,null,null,null,null],[0.2240731739993862,0.22405740499999638,446349060,54,null,null,null,null,null,null,null],[0.23251180300030683,0.23250292000000172,463158123,57,null,null,null,null,null,null,null],[0.24321701999997458,0.243214119000001,484482705,60,null,null,null,null,null,null,null],[0.25720452000041405,0.2571950840000028,512345651,63,null,null,null,null,null,null,null],[0.2731833210000332,0.27317427799999905,544174898,66,null,null,null,null,null,null,null]]}]'></div>+ </div>++ <aside id="controls-explanation" class="explanation no-print">+ <h1><a href="#controls-explanation">controls</a></h1>++ <p>+ The overview chart can be controlled by clicking the following elements:+ <ul>+ <li><em>a bar or its label</em> zooms the x-axis to that bar</li>+ <li><em>the background</em> resets zoom to the entire chart</li>+ <li><em>the x-axis</em> toggles between linear and logarithmic scale</li>+ <li><em>the chevron</em> in the top-right toggles the the legend</li>+ <li><em>a group name in the legend</em> shows/hides that group</li>+ </ul>+ </p>++ <p>+ The overview chart supports the following sort orders:+ <ul>+ <li><em>index</em> order is the order as the benchmarks are defined in criterion</li>+ <li><em>lexical</em> order sorts groups left-to-right, alphabetically</li>+ <li><em>colexical</em> order sorts groups right-to-left, alphabetically</li>+ <li><em>time ascending/descending</em> order sorts by the estimated mean execution time</li>+ </ul>+ </p>++ </aside>++ <aside id="grokularation" class="explanation">++ <h1><a>understanding this report</a></h1>++ <p>+ In this report, each function benchmarked by criterion is assigned a section of its own.+ <span class="no-print">The charts in each section are active; if you hover your mouse over data points and annotations, you will see more details.</span>+ </p>++ <ul>+ <li>+ The chart on the left is a <a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel density estimate</a> (also known as a KDE) of time measurements.+ This graphs the probability of any given time measurement occurring.+ A spike indicates that a measurement of a particular time occurred; its height indicates how often that measurement was repeated.+ </li>++ <li>+ The chart on the right is the raw data from which the kernel density estimate is built.+ The <em>x</em>-axis indicates the number of loop iterations, while the <em>y</em>-axis shows measured execution time for the given number of loop iterations.+ The line behind the values is the linear regression estimate of execution time for a given number of iterations.+ Ideally, all measurements will be on (or very near) this line.+ The transparent area behind it shows the confidence interval for the execution time estimate.+ </li>+ </ul>++ <p>+ Under the charts is a small table.+ The first two rows are the results of a linear regression run on the measurements displayed in the right-hand chart.+ </p>++ <ul>+ <li>+ <em>OLS regression</em> indicates the time estimated for a single loop iteration using an ordinary least-squares regression model.+ This number is more accurate than the <em>mean</em> estimate below it, as it more effectively eliminates measurement overhead and other constant factors.+ </li>+ <li>+ <em>R<sup>2</sup>; goodness-of-fit</em> is a measure of how accurately the linear regression model fits the observed measurements.+ If the measurements are not too noisy, R<sup>2</sup>; should lie between 0.99 and 1, indicating an excellent fit.+ If the number is below 0.99, something is confounding the accuracy of the linear model.+ </li>+ <li>+ <em>Mean execution time</em> and <em>standard deviation</em> are statistics calculated from execution time divided by number of iterations.+ </li>+ </ul>++ <p>+ We use a statistical technique called the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a> to provide confidence intervals on our estimates.+ The bootstrap-derived upper and lower bounds on estimates let you see how accurate we believe those estimates to be.+ <span class="no-print">(Hover the mouse over the table headers to see the confidence levels.)</span>+ </p>++ <p>+ A noisy benchmarking environment can cause some or many measurements to fall far from the mean.+ These outlying measurements can have a significant inflationary effect on the estimate of the standard deviation.+ We calculate and display an estimate of the extent to which the standard deviation has been inflated by outliers.+ </p>++ </aside>++ <footer>+ <div class="content">+ <h1 class="colophon-header">colophon</h1>+ <p>+ This report was created using the <a href="http://hackage.haskell.org/package/criterion">criterion</a>+ benchmark execution and performance analysis tool.+ </p>+ <p>+ Criterion is developed and maintained+ by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.+ </p>+ </div>+ </footer>+</body>+</html>