{-# LANGUAGE CPP #-} {- | Copyright : Copyright (C) 2012 Joachim Breitner License : BSD3 Maintainer : Joachim Breitner <mail@joachim-breitner.de> Stability : stable Portability: portable -} module Optimisation.CirclePacking ( packCircles -- * Example -- $example ) where #if defined(__GLASGOW_HASKELL__ ) import Data.List (sortBy, find) import Data.Ord (comparing) import Data.Maybe (fromMaybe) #else import Language.Fay.Prelude -- Not provided in Fay set, it seems comparing :: (b -> Double) -> b -> b -> Ordering comparing p x y = compare (p x) (p y) fromMaybe :: a -> Maybe a -> a fromMaybe d x = case x of {Nothing -> d;Just v -> v} #endif type Radius = Double type Circle a = (Double, a) type Coordinate = (Double, Double) type PlacedCircle a = ((Double, a), Coordinate) type TouchingCircles a = [(PlacedCircle a, PlacedCircle a)] {- | 'packCircles' takes a list of circles and a function that yields the radius of the circle. It returns a list of all circles, in unspecified order, together with coordinates such that they do not overlap but sit as tight as possible, filling a large circle. Finding the optimal solution to this is NP hard, so only heuristics are feasible. This particular implementation is neither very good nor very fast, compared to the state of the art in research. Nevertheless it is simple to use and gives visually acceptable results. The heuristics begins by placing the largest circle first, and the next-to-largest next to it. From then on it adds circles by considering all points where the circle to be added would touch two circles but overlap with none, and picks the one that is closest to the center of mass of the current placements. -} packCircles :: (a -> Double) -> [a] -> [(a, (Double, Double))] packCircles radiusFunction = -- Forget the cached radius map (\t -> case t of (x,p) -> (snd x, p)) . -- Make sure we center up the circles centerUp . -- Forget the pairs of touching circles fst . -- Run the main algorithm go . -- Look at large circles last sortBy (comparing radius) . -- Cache the radius map (\x -> (radiusFunction x, x)) -- Just for a nicer name radius :: Circle a -> Radius radius = fst -- Place the tail, then try to place the head go :: [Circle a] -> ([PlacedCircle a], TouchingCircles a) go [] = ([],[]) go (c:cs) = case go cs of (placed, pairs) -> case place c placed pairs of (cp, newPairs) -> (cp : placed, newPairs ++ pairs) place :: Circle a -> [PlacedCircle a] -> TouchingCircles a -> (PlacedCircle a, TouchingCircles a) place c [] _ = ((c, (0,0)), []) place c [cp'@(c',(x,y))] _ = let cp = (c, (x + radius c + radius c', y)) in (cp, [(cp, cp')]) place c placed pairs = (cp, newPairs) where newPairs = [ (cp, cp') | cp' <- placed, touching cp cp' ] cp = (c, p) p = fromMaybe (error "packCircles: The end of the real plane has been reached?") $ find (\p' -> all (valid p') placed) $ sortBy (comparing centerDistance) [ p' | (c1, c2) <- pairs, touching c1 c2, p' <- near c1 c2 ] centerDistance (x,y) = sqrt ((centerx - x)**2 + (centery - y)**2) centerx = sum [x * (radius c')**2 | (c',(x,_)) <- placed] / area centery = sum [y * (radius c')**2 | (c',(_,y)) <- placed] / area area = sum [(radius c')**2 | (c',_) <- placed] valid (x1,y1) (c2,(x2,y2)) = sqrt ((x2 - x1)**2 + (y2-y1)**2) >= (radius c + radius c2) * (1-eps) touching (c1,(x1,y1)) (c2, (x2, y2)) = sqrt ((x2 - x1)**2 + (y2-y1)**2) <= (radius c1 + radius c2) * (1+eps) near (c1,(x1,y1)) (c2, (x2, y2)) = [(c1x,c1y), (c2x,c2y)] where base = sqrt ((x2 - x1)**2 + (y2 - y1)**2) lat1 = radius c1 + radius c lat2 = radius c2 + radius c --From http://stackoverflow.com/a/11356687/946226 ad_length = (base**2 + lat1**2 - lat2**2)/(2 * base) h = sqrt (abs (lat1**2 - ad_length**2)) dx = x1 + ad_length * (x2 - x1)/base dy = y1 + ad_length * (y2 - y1)/base c1x = dx + h * (y2 - y1) / base c1y = dy - h * (x2 - x1) / base c2x = dx - h * (y2 - y1) / base c2y = dy + h * (x2 - x1) / base centerUp :: [PlacedCircle a] -> [PlacedCircle a] centerUp placed = map (\(o,(x,y)) -> (o, (x-centerx, y-centery))) placed where centerx = sum [x * (radius c')**2 | (c',(x,_)) <- placed] / area centery = sum [y * (radius c')**2 | (c',(_,y)) <- placed] / area area = sum [(radius c')**2 | (c',_) <- placed] eps :: Double eps = 0.00001 {-$example The following code demonstrates how one can use 'packCircles' together with the diagrams library: >import Diagrams.Prelude >import Diagrams.Backend.SVG.CmdLine > >import Optimisation.CirclePacking > >colorize = zipWith fc $ > cycle [red,blue,yellow,magenta,cyan,bisque,firebrick,indigo] > >objects = colorize $ > [ circle r | r <- [0.1,0.2..1.6] ] ++ > [ hexagon r | r <- [0.1,0.2..0.7] ] ++ > [ decagon r | r <- [0.1,0.2..0.7] ] > >-- Just a approximation, diagram objects do not have an exact radius >radiusApproximation o = maximum [ radius (e (CircleFrac alpha)) o | alpha <- [0,0.1..1.0]] > >main = defaultMain $ > position $ map (\(o,(x,y)) -> (p2 (x,y),o)) $ > packCircles radiusApproximation objects This generates the following SVG file (if your browser manages to display it): <<data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIgogICAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iNDAwLjAiIGhlaWdodD0iNDEzLjU5NjkxMTI0MzE0NDYzIiBmb250LXNpemU9IjEiIHZpZXdCb3g9IjAgMCA0MDAgNDE0Ij48Zz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYig3NSwwLDEzMCkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSAyMTEuNjI0MTc2NzI4Njg5NCwyMTguNTc3MzM2MTI0NDM2NTggYyAwLjAsLTM3LjM0Mzg4ODM2NjA0Mjk3NSAtMzAuMjczMjAyOTU3NzQyODU3LC02Ny42MTcwOTEzMjM3ODU4NCAtNjcuNjE3MDkxMzIzNzg1ODMgLTY3LjYxNzA5MTMyMzc4NTg0YyAtMzcuMzQzODg4MzY2MDQyOTc1LC0yLjI4NjY1MzY2Nzc1OTUzMWUtMTUgLTY3LjYxNzA5MTMyMzc4NTg0LDMwLjI3MzIwMjk1Nzc0Mjg1MyAtNjcuNjE3MDkxMzIzNzg1ODQgNjcuNjE3MDkxMzIzNzg1ODFjIC00LjU3MzMwNzMzNTUxOTA2MmUtMTUsMzcuMzQzODg4MzY2MDQyOTc1IDMwLjI3MzIwMjk1Nzc0Mjg1LDY3LjYxNzA5MTMyMzc4NTg0IDY3LjYxNzA5MTMyMzc4NTgxIDY3LjYxNzA5MTMyMzc4NTg0YyAzNy4zNDM4ODgzNjYwNDI5NzUsNi44NTk5NjEwMDMyNzg1OTJlLTE1IDY3LjYxNzA5MTMyMzc4NTg0LC0zMC4yNzMyMDI5NTc3NDI4NDYgNjcuNjE3MDkxMzIzNzg1ODQgLTY3LjYxNzA5MTMyMzc4NThaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigxNzgsMzQsMzQpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMzM4LjQ0MTU5NTA1NzYyNzQsMjE4LjU3NzMzNjEyNDQzNjU4IGMgMC4wLC0zNS4wMDk4OTUzNDMxNjUzIC0yOC4zODExMjc3NzI4ODM5MzIsLTYzLjM5MTAyMzExNjA0OTIzIC02My4zOTEwMjMxMTYwNDkyMiAtNjMuMzkxMDIzMTE2MDQ5MjNjIC0zNS4wMDk4OTUzNDMxNjUzLC0yLjE0MzczNzgxMzUyNDU2MDNlLTE1IC02My4zOTEwMjMxMTYwNDkyMywyOC4zODExMjc3NzI4ODM5MyAtNjMuMzkxMDIzMTE2MDQ5MjMgNjMuMzkxMDIzMTE2MDQ5MjFjIC00LjI4NzQ3NTYyNzA0OTEyMWUtMTUsMzUuMDA5ODk1MzQzMTY1MyAyOC4zODExMjc3NzI4ODM5MjUsNjMuMzkxMDIzMTE2MDQ5MjMgNjMuMzkxMDIzMTE2MDQ5MjA1IDYzLjM5MTAyMzExNjA0OTIzYyAzNS4wMDk4OTUzNDMxNjUzLDYuNDMxMjEzNDQwNTczNjgxZS0xNSA2My4zOTEwMjMxMTYwNDkyMywtMjguMzgxMTI3NzcyODgzOTIgNjMuMzkxMDIzMTE2MDQ5MjMgLTYzLjM5MTAyMzExNjA0OTJaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigyNTUsMjI4LDE5NikiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSAyNzIuNzE2NDUwNDQxOTQwNSwxMTIuNTMwNDQ0NTc5MDI2ODUgYyAwLjAsLTMyLjY3NTkwMjMyMDI4NzYwNSAtMjYuNDg5MDUyNTg4MDI1LC01OS4xNjQ5NTQ5MDgzMTI2MTYgLTU5LjE2NDk1NDkwODMxMjYgLTU5LjE2NDk1NDkwODMxMjYxNmMgLTMyLjY3NTkwMjMyMDI4NzYwNSwtMi4wMDA4MjE5NTkyODk1ODk0ZS0xNSAtNTkuMTY0OTU0OTA4MzEyNjE2LDI2LjQ4OTA1MjU4ODAyNDk5NyAtNTkuMTY0OTU0OTA4MzEyNjE2IDU5LjE2NDk1NDkwODMxMjU5NWMgLTQuMDAxNjQzOTE4NTc5MTc5ZS0xNSwzMi42NzU5MDIzMjAyODc2MDUgMjYuNDg5MDUyNTg4MDI0OTkzLDU5LjE2NDk1NDkwODMxMjYxNiA1OS4xNjQ5NTQ5MDgzMTI1OSA1OS4xNjQ5NTQ5MDgzMTI2MTZjIDMyLjY3NTkwMjMyMDI4NzYwNSw2LjAwMjQ2NTg3Nzg2ODc2OGUtMTUgNTkuMTY0OTU0OTA4MzEyNjE2LC0yNi40ODkwNTI1ODgwMjQ5OSA1OS4xNjQ5NTQ5MDgzMTI2MTYgLTU5LjE2NDk1NDkwODMxMjU4WiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMCwyNTUsMjU1KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDI2OC4zNTQwMjA2NDU3MTYxNiwzMTkuNjI0ODYxNTkyOTU1NCBjIDAuMCwtMzAuMzQxOTA5Mjk3NDA5OTE2IC0yNC41OTY5Nzc0MDMxNjYwNywtNTQuOTM4ODg2NzAwNTc1OTkgLTU0LjkzODg4NjcwMDU3NTk4IC01NC45Mzg4ODY3MDA1NzU5OWMgLTMwLjM0MTkwOTI5NzQwOTkxNiwtMS44NTc5MDYxMDUwNTQ2MTg1ZS0xNSAtNTQuOTM4ODg2NzAwNTc1OTksMjQuNTk2OTc3NDAzMTY2MDY1IC01NC45Mzg4ODY3MDA1NzU5OSA1NC45Mzg4ODY3MDA1NzU5N2MgLTMuNzE1ODEyMjEwMTA5MjM3ZS0xNSwzMC4zNDE5MDkyOTc0MDk5MTYgMjQuNTk2OTc3NDAzMTY2MDYsNTQuOTM4ODg2NzAwNTc1OTkgNTQuOTM4ODg2NzAwNTc1OTcgNTQuOTM4ODg2NzAwNTc1OTljIDMwLjM0MTkwOTI5NzQwOTkxNiw1LjU3MzcxODMxNTE2Mzg1NTZlLTE1IDU0LjkzODg4NjcwMDU3NTk5LC0yNC41OTY5Nzc0MDMxNjYwNTggNTQuOTM4ODg2NzAwNTc1OTkgLTU0LjkzODg4NjcwMDU3NTk2NFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwwLDI1NSkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSAxNTQuNDgzMDk0NTQ5MjU1OTUsMTA3LjI2NDU4Mzk2Mjg5Mjk3IGMgMC4wLC0yOC4wMDc5MTYyNzQ1MzIyMyAtMjIuNzA0OTAyMjE4MzA3MTQsLTUwLjcxMjgxODQ5MjgzOTM3NSAtNTAuNzEyODE4NDkyODM5MzYgLTUwLjcxMjgxODQ5MjgzOTM3NWMgLTI4LjAwNzkxNjI3NDUzMjIzLC0xLjcxNDk5MDI1MDgxOTY0NzhlLTE1IC01MC43MTI4MTg0OTI4MzkzNzUsMjIuNzA0OTAyMjE4MzA3MTM3IC01MC43MTI4MTg0OTI4MzkzNzUgNTAuNzEyODE4NDkyODM5MzZjIC0zLjQyOTk4MDUwMTYzOTI5NTZlLTE1LDI4LjAwNzkxNjI3NDUzMjIzIDIyLjcwNDkwMjIxODMwNzEzMyw1MC43MTI4MTg0OTI4MzkzNzUgNTAuNzEyODE4NDkyODM5MzU0IDUwLjcxMjgxODQ5MjgzOTM3NWMgMjguMDA3OTE2Mjc0NTMyMjMsNS4xNDQ5NzA3NTI0NTg5NDRlLTE1IDUwLjcxMjgxODQ5MjgzOTM3NSwtMjIuNzA0OTAyMjE4MzA3MTMgNTAuNzEyODE4NDkyODM5Mzc1IC01MC43MTI4MTg0OTI4MzkzNVoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwyMjgsMTk2KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDM1OS4yMjgwNDg0ODcyOTYsMTQ1LjE0NTI2MjY2NTA1MDg0IGwgOS4xNDE0ODgyNjkwNDgwMTUsLTI4LjEzNDYwNzk1MDkyOTgxNiBsIC05LjE0MTQ4ODI2OTA0ODAzNCwtMjguMTM0NjA3OTUwOTI5ODE2IGwgLTIzLjkzMjcyNjk5NjEyNjE3OCwtMTcuMzg4MTQzOTczODI3NjQ2IGggLTI5LjU4MjQ3NzQ1NDE1NjMgbCAtMjMuOTMyNzI2OTk2MTI2MTg1LDE3LjM4ODE0Mzk3MzgyNzY2NyBsIC05LjE0MTQ4ODI2OTA0ODAxNSwyOC4xMzQ2MDc5NTA5Mjk4MTYgbCA5LjE0MTQ4ODI2OTA0ODAyNywyOC4xMzQ2MDc5NTA5Mjk4MTYgbCAyMy45MzI3MjY5OTYxMjYxOCwxNy4zODgxNDM5NzM4Mjc2NTYgaCAyOS41ODI0Nzc0NTQxNTYzIFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwyNTUsMCkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSAxNTguODE0MjMzMjE1ODQ4NTYsMzI4LjIyNzMyOTM2NzU4MzYgYyAwLjAsLTI1LjY3MzkyMzI1MTY1NDU0MyAtMjAuODEyODI3MDMzNDQ4MjA4LC00Ni40ODY3NTAyODUxMDI3NiAtNDYuNDg2NzUwMjg1MTAyNzUgLTQ2LjQ4Njc1MDI4NTEwMjc2YyAtMjUuNjczOTIzMjUxNjU0NTQzLC0xLjU3MjA3NDM5NjU4NDY3NzFlLTE1IC00Ni40ODY3NTAyODUxMDI3NiwyMC44MTI4MjcwMzM0NDgyMDggLTQ2LjQ4Njc1MDI4NTEwMjc2IDQ2LjQ4Njc1MDI4NTEwMjc0NGMgLTMuMTQ0MTQ4NzkzMTY5MzU0MmUtMTUsMjUuNjczOTIzMjUxNjU0NTQzIDIwLjgxMjgyNzAzMzQ0ODIwNSw0Ni40ODY3NTAyODUxMDI3NiA0Ni40ODY3NTAyODUxMDI3NCA0Ni40ODY3NTAyODUxMDI3NmMgMjUuNjczOTIzMjUxNjU0NTQzLDQuNzE2MjIzMTg5NzU0MDMxZS0xNSA0Ni40ODY3NTAyODUxMDI3NiwtMjAuODEyODI3MDMzNDQ4MiA0Ni40ODY3NTAyODUxMDI3NiAtNDYuNDg2NzUwMjg1MTAyNzNaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigwLDAsMjU1KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDg0LjUyMTM2NDE1NDczMjI3LDE3Ny4wMTYzNTg2NTk0ODQzMyBjIDAuMCwtMjMuMzM5OTMwMjI4Nzc2ODU0IC0xOC45MjA3NTE4NDg1ODkyOCwtNDIuMjYwNjgyMDc3MzY2MTQgLTQyLjI2MDY4MjA3NzM2NjEzNCAtNDIuMjYwNjgyMDc3MzY2MTRjIC0yMy4zMzk5MzAyMjg3NzY4NTQsLTEuNDI5MTU4NTQyMzQ5NzA2NGUtMTUgLTQyLjI2MDY4MjA3NzM2NjE0LDE4LjkyMDc1MTg0ODU4OTI4IC00Mi4yNjA2ODIwNzczNjYxNCA0Mi4yNjA2ODIwNzczNjYxM2MgLTIuODU4MzE3MDg0Njk5NDEzZS0xNSwyMy4zMzk5MzAyMjg3NzY4NTQgMTguOTIwNzUxODQ4NTg5Mjc2LDQyLjI2MDY4MjA3NzM2NjE0IDQyLjI2MDY4MjA3NzM2NjEyIDQyLjI2MDY4MjA3NzM2NjE0YyAyMy4zMzk5MzAyMjg3NzY4NTQsNC4yODc0NzU2MjcwNDkxMTllLTE1IDQyLjI2MDY4MjA3NzM2NjE0LC0xOC45MjA3NTE4NDg1ODkyNzMgNDIuMjYwNjgyMDc3MzY2MTQgLTQyLjI2MDY4MjA3NzM2NjEyWiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMCwyNTUsMjU1KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDgwLjk5MTIyMjMyMzIwMjQsMjkzLjIwNjgxMzM3OTg1MTMgbCA3LjgzNTU2MTM3MzQ2OTcyNjUsLTI0LjExNTM3ODI0MzY1NDEyOCBsIC03LjgzNTU2MTM3MzQ2OTc0MywtMjQuMTE1Mzc4MjQzNjU0MTI4IGwgLTIwLjUxMzc2NTk5NjY3OTU4LC0xNC45MDQxMjM0MDYxMzc5ODQgaCAtMjUuMzU2NDA5MjQ2NDE5Njg4IGwgLTIwLjUxMzc2NTk5NjY3OTU4OCwxNC45MDQxMjM0MDYxMzggbCAtNy44MzU1NjEzNzM0Njk3MjY1LDI0LjExNTM3ODI0MzY1NDEzIGwgNy44MzU1NjEzNzM0Njk3MzgsMjQuMTE1Mzc4MjQzNjU0MTMgbCAyMC41MTM3NjU5OTY2Nzk1ODQsMTQuOTA0MTIzNDA2MTM3OTkxIGggMjUuMzU2NDA5MjQ2NDE5Njg4IFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwwLDApIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMzQ0LjMzODA0MjkwOTQzNzk1LDMxNS4wOTY2MzI0NDcwODQ0NiBjIDAuMCwtMjEuMDA1OTM3MjA1ODk5MTczIC0xNy4wMjg2NzY2NjM3MzAzNTUsLTM4LjAzNDYxMzg2OTYyOTUzIC0zOC4wMzQ2MTM4Njk2Mjk1MjQgLTM4LjAzNDYxMzg2OTYyOTUzYyAtMjEuMDA1OTM3MjA1ODk5MTczLC0xLjI4NjI0MjY4ODExNDczNmUtMTUgLTM4LjAzNDYxMzg2OTYyOTUzLDE3LjAyODY3NjY2MzczMDM1IC0zOC4wMzQ2MTM4Njk2Mjk1MyAzOC4wMzQ2MTM4Njk2Mjk1MmMgLTIuNTcyNDg1Mzc2MjI5NDcyZS0xNSwyMS4wMDU5MzcyMDU4OTkxNzMgMTcuMDI4Njc2NjYzNzMwMzUsMzguMDM0NjEzODY5NjI5NTMgMzguMDM0NjEzODY5NjI5NTIgMzguMDM0NjEzODY5NjI5NTNjIDIxLjAwNTkzNzIwNTg5OTE3MywzLjg1ODcyODA2NDM0NDIwOGUtMTUgMzguMDM0NjEzODY5NjI5NTMsLTE3LjAyODY3NjY2MzczMDM0OCAzOC4wMzQ2MTM4Njk2Mjk1MyAtMzguMDM0NjEzODY5NjI5NTFaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigyNTUsMCwyNTUpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMTgyLjgyNDUxNTUxMTc5NDE3LDU5Ljc2MzU2MzczNTI1MzY3IGwgNi41Mjk2MzQ0Nzc4OTE0MzksLTIwLjA5NjE0ODUzNjM3ODQ0IGwgLTYuNTI5NjM0NDc3ODkxNDUzLC0yMC4wOTYxNDg1MzYzNzg0NCBsIC0xNy4wOTQ4MDQ5OTcyMzI5ODgsLTEyLjQyMDEwMjgzODQ0ODMyIGggLTIxLjEzMDM0MTAzODY4MzA3NCBsIC0xNy4wOTQ4MDQ5OTcyMzI5OSwxMi40MjAxMDI4Mzg0NDgzMzUgbCAtNi41Mjk2MzQ0Nzc4OTE0MzksMjAuMDk2MTQ4NTM2Mzc4NDQzIGwgNi41Mjk2MzQ0Nzc4OTE0NDksMjAuMDk2MTQ4NTM2Mzc4NDQzIGwgMTcuMDk0ODA0OTk3MjMyOTg4LDEyLjQyMDEwMjgzODQ0ODMyOCBoIDIxLjEzMDM0MTAzODY4MzA3NCBaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYig3NSwwLDEzMCkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSA0MDAuMCwxODQuNzIxNzg3MjQyNDA1NzUgYyAwLjAsLTE4LjY3MTk0NDE4MzAyMTQ4NCAtMTUuMTM2NjAxNDc4ODcxNDI1LC0zMy44MDg1NDU2NjE4OTI5MTQgLTMzLjgwODU0NTY2MTg5MjkxIC0zMy44MDg1NDU2NjE4OTI5MTRjIC0xOC42NzE5NDQxODMwMjE0ODQsLTEuMTQzMzI2ODMzODc5NzY1MmUtMTUgLTMzLjgwODU0NTY2MTg5MjkxNCwxNS4xMzY2MDE0Nzg4NzE0MjMgLTMzLjgwODU0NTY2MTg5MjkxNCAzMy44MDg1NDU2NjE4OTI5YyAtMi4yODY2NTM2Njc3NTk1MzA0ZS0xNSwxOC42NzE5NDQxODMwMjE0ODQgMTUuMTM2NjAxNDc4ODcxNDIxLDMzLjgwODU0NTY2MTg5MjkxNCAzMy44MDg1NDU2NjE4OTI5IDMzLjgwODU0NTY2MTg5MjkxNGMgMTguNjcxOTQ0MTgzMDIxNDg0LDMuNDI5OTgwNTAxNjM5Mjk1MmUtMTUgMzMuODA4NTQ1NjYxODkyOTE0LC0xNS4xMzY2MDE0Nzg4NzE0MiAzMy44MDg1NDU2NjE4OTI5MTQgLTMzLjgwODU0NTY2MTg5Mjg5WiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMTc4LDM0LDM0KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDMwOC4wMzQ1NDc0NzMzODk5LDUxLjk2NDE1MTYxOTQwNzYgYyAwLjAsLTE2LjMzNzk1MTE2MDE0MzggLTEzLjI0NDUyNjI5NDAxMjQ5NywtMjkuNTgyNDc3NDU0MTU2MyAtMjkuNTgyNDc3NDU0MTU2Mjk0IC0yOS41ODI0Nzc0NTQxNTYzYyAtMTYuMzM3OTUxMTYwMTQzOCwtMS4wMDA0MTA5Nzk2NDQ3OTQ1ZS0xNSAtMjkuNTgyNDc3NDU0MTU2MywxMy4yNDQ1MjYyOTQwMTI0OTcgLTI5LjU4MjQ3NzQ1NDE1NjMgMjkuNTgyNDc3NDU0MTU2MjljIC0yLjAwMDgyMTk1OTI4OTU4OWUtMTUsMTYuMzM3OTUxMTYwMTQzOCAxMy4yNDQ1MjYyOTQwMTI0OTUsMjkuNTgyNDc3NDU0MTU2MyAyOS41ODI0Nzc0NTQxNTYyODcgMjkuNTgyNDc3NDU0MTU2M2MgMTYuMzM3OTUxMTYwMTQzOCwzLjAwMTIzMjkzODkzNDM4MzNlLTE1IDI5LjU4MjQ3NzQ1NDE1NjMsLTEzLjI0NDUyNjI5NDAxMjQ5MyAyOS41ODI0Nzc0NTQxNTYzIC0yOS41ODI0Nzc0NTQxNTYyODNaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigxNzgsMzQsMzQpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMzY5LjAwNDgxOTM3NzAxODMsMjkyLjk4NjYwMTU5ODc1OTY1IGwgMTQuNzkxMjM4NzI3MDc4MTU4LC0yNS42MTkxNzY5ODIxNzk3NiBsIC0xNC43OTEyMzg3MjcwNzgxNCwtMjUuNjE5MTc2OTgyMTc5NzY2IGwgLTI5LjU4MjQ3NzQ1NDE1NjI5NCwtOS44NTI5NDQyNzg1MTc2NzJlLTE1IGwgLTE0Ljc5MTIzODcyNzA3ODE2MywyNS42MTkxNzY5ODIxNzk3NTYgbCAxNC43OTEyMzg3MjcwNzgxMzEsMjUuNjE5MTc2OTgyMTc5NzczIFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwyNTUsMCkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSAyMzcuMjk5OTIyNzM0NDU0MDQsNDIuMDg5OTE5OTI4OTY0MTY0IGwgNS4yMjM3MDc1ODIzMTMxNTIsLTE2LjA3NjkxODgyOTEwMjc1NSBsIC01LjIyMzcwNzU4MjMxMzE2MywtMTYuMDc2OTE4ODI5MTAyNzU1IGwgLTEzLjY3NTg0Mzk5Nzc4NjM4OSwtOS45MzYwODIyNzA3NTg2NTcgaCAtMTYuOTA0MjcyODMwOTQ2NDYgbCAtMTMuNjc1ODQzOTk3Nzg2Mzk0LDkuOTM2MDgyMjcwNzU4NjY4IGwgLTUuMjIzNzA3NTgyMzEzMTUyLDE2LjA3NjkxODgyOTEwMjc1NSBsIDUuMjIzNzA3NTgyMzEzMTYsMTYuMDc2OTE4ODI5MTAyNzU1IGwgMTMuNjc1ODQzOTk3Nzg2MzkzLDkuOTM2MDgyMjcwNzU4NjYyIGggMTYuOTA0MjcyODMwOTQ2NDYgWiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMjU1LDIyOCwxOTYpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMTg2LjcwMTkzODQyNjg0NzUsMzgwLjc3NjkwODQyOTI2NDk1IGMgMC4wLC0xNC4wMDM5NTgxMzcyNjYxMTYgLTExLjM1MjQ1MTEwOTE1MzU3LC0yNS4zNTY0MDkyNDY0MTk2ODggLTI1LjM1NjQwOTI0NjQxOTY4IC0yNS4zNTY0MDkyNDY0MTk2ODhjIC0xNC4wMDM5NTgxMzcyNjYxMTYsLTguNTc0OTUxMjU0MDk4MjM5ZS0xNiAtMjUuMzU2NDA5MjQ2NDE5Njg4LDExLjM1MjQ1MTEwOTE1MzU2OCAtMjUuMzU2NDA5MjQ2NDE5Njg4IDI1LjM1NjQwOTI0NjQxOTY4YyAtMS43MTQ5OTAyNTA4MTk2NDc4ZS0xNSwxNC4wMDM5NTgxMzcyNjYxMTYgMTEuMzUyNDUxMTA5MTUzNTY2LDI1LjM1NjQwOTI0NjQxOTY4OCAyNS4zNTY0MDkyNDY0MTk2NzcgMjUuMzU2NDA5MjQ2NDE5Njg4YyAxNC4wMDM5NTgxMzcyNjYxMTYsMi41NzI0ODUzNzYyMjk0NzJlLTE1IDI1LjM1NjQwOTI0NjQxOTY4OCwtMTEuMzUyNDUxMTA5MTUzNTY1IDI1LjM1NjQwOTI0NjQxOTY4OCAtMjUuMzU2NDA5MjQ2NDE5NjczWiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMjU1LDIyOCwxOTYpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMjg4LjIwOTYxMDg3MjA3NjEsMzkyLjQ4ODgyNzg0NDg1OTc3IGwgMTIuNjc4MjA0NjIzMjA5ODQ5LC0yMS45NTkyOTQ1NTYxNTQwOCBsIC0xMi42NzgyMDQ2MjMyMDk4MzUsLTIxLjk1OTI5NDU1NjE1NDA4NCBsIC0yNS4zNTY0MDkyNDY0MTk2OCwtOC40NDUzODA4MTAxNTgwMDZlLTE1IGwgLTEyLjY3ODIwNDYyMzIwOTg1NCwyMS45NTkyOTQ1NTYxNTQwNzcgbCAxMi42NzgyMDQ2MjMyMDk4MjYsMjEuOTU5Mjk0NTU2MTU0MDk1IFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDAsMjU1LDI1NSkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSA1My4zOTMzMjAwMDg2Mjg2MiwxMTQuNDAxMzYwNjIyMDc0MDEgYyAwLjAsLTExLjY2OTk2NTExNDM4ODQzIC05LjQ2MDM3NTkyNDI5NDY0MiwtMjEuMTMwMzQxMDM4NjgzMDc0IC0yMS4xMzAzNDEwMzg2ODMwNyAtMjEuMTMwMzQxMDM4NjgzMDc0YyAtMTEuNjY5OTY1MTE0Mzg4NDMsLTcuMTQ1NzkyNzExNzQ4NTMzZS0xNiAtMjEuMTMwMzQxMDM4NjgzMDc0LDkuNDYwMzc1OTI0Mjk0NjQgLTIxLjEzMDM0MTAzODY4MzA3NCAyMS4xMzAzNDEwMzg2ODMwNjdjIC0xLjQyOTE1ODU0MjM0OTcwNjZlLTE1LDExLjY2OTk2NTExNDM4ODQzIDkuNDYwMzc1OTI0Mjk0NjQsMjEuMTMwMzQxMDM4NjgzMDc0IDIxLjEzMDM0MTAzODY4MzA2MyAyMS4xMzAzNDEwMzg2ODMwNzRjIDExLjY2OTk2NTExNDM4ODQzLDIuMTQzNzM3ODEzNTI0NTZlLTE1IDIxLjEzMDM0MTAzODY4MzA3NCwtOS40NjAzNzU5MjQyOTQ2MzggMjEuMTMwMzQxMDM4NjgzMDc0IC0yMS4xMzAzNDEwMzg2ODMwNjNaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigwLDI1NSwyNTUpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMjE2LjA3ODY0MDEyNTU3NDQ1LDQxMy41OTY5MTEyNDMxNDQ2MyBsIDEwLjU2NTE3MDUxOTM0MTU0MiwtMTguMjk5NDEyMTMwMTI4NCBsIC0xMC41NjUxNzA1MTkzNDE1MywtMTguMjk5NDEyMTMwMTI4NDA2IGwgLTIxLjEzMDM0MTAzODY4MzA3LC03LjAzNzgxNzM0MTc5ODMzOWUtMTUgbCAtMTAuNTY1MTcwNTE5MzQxNTQ2LDE4LjI5OTQxMjEzMDEyODQgbCAxMC41NjUxNzA1MTkzNDE1MjMsMTguMjk5NDEyMTMwMTI4NDEzIFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDAsMCwyNTUpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMTE3LjE3Mzg2NTU4OTUyMjU2LDQ4LjE1MzU2MDQwODQxODUyIGwgMy45MTc3ODA2ODY3MzQ4NjMyLC0xMi4wNTc2ODkxMjE4MjcwNjQgbCAtMy45MTc3ODA2ODY3MzQ4NzE3LC0xMi4wNTc2ODkxMjE4MjcwNjQgbCAtMTAuMjU2ODgyOTk4MzM5NzksLTcuNDUyMDYxNzAzMDY4OTkyIGggLTEyLjY3ODIwNDYyMzIwOTg0NCBsIC0xMC4yNTY4ODI5OTgzMzk3OTQsNy40NTIwNjE3MDMwNjkgbCAtMy45MTc3ODA2ODY3MzQ4NjMyLDEyLjA1NzY4OTEyMTgyNzA2NiBsIDMuOTE3NzgwNjg2NzM0ODY5LDEyLjA1NzY4OTEyMTgyNzA2NiBsIDEwLjI1Njg4Mjk5ODMzOTc5Miw3LjQ1MjA2MTcwMzA2ODk5NTUgaCAxMi42NzgyMDQ2MjMyMDk4NDQgWiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMjU1LDAsMjU1KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDY1LjgzNTE3NDI1NTU2MDk5LDMyNy4wMTY3NTA5OTk0MTQxNyBjIDAuMCwtOS4zMzU5NzIwOTE1MTA3NDQgLTcuNTY4MzAwNzM5NDM1NzE0LC0xNi45MDQyNzI4MzA5NDY0NiAtMTYuOTA0MjcyODMwOTQ2NDU3IC0xNi45MDQyNzI4MzA5NDY0NmMgLTkuMzM1OTcyMDkxNTEwNzQ0LC01LjcxNjYzNDE2OTM5ODgyN2UtMTYgLTE2LjkwNDI3MjgzMDk0NjQ2LDcuNTY4MzAwNzM5NDM1NzEzIC0xNi45MDQyNzI4MzA5NDY0NiAxNi45MDQyNzI4MzA5NDY0NTRjIC0xLjE0MzMyNjgzMzg3OTc2NTRlLTE1LDkuMzM1OTcyMDkxNTEwNzQ0IDcuNTY4MzAwNzM5NDM1NzEyNSwxNi45MDQyNzI4MzA5NDY0NiAxNi45MDQyNzI4MzA5NDY0NTQgMTYuOTA0MjcyODMwOTQ2NDZjIDkuMzM1OTcyMDkxNTEwNzQ0LDEuNzE0OTkwMjUwODE5NjQ4ZS0xNSAxNi45MDQyNzI4MzA5NDY0NiwtNy41NjgzMDA3Mzk0MzU3MTIgMTYuOTA0MjcyODMwOTQ2NDYgLTE2LjkwNDI3MjgzMDk0NjQ1WiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMjU1LDAsMjU1KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDUxLjMxNDc2MDQ5MjgyMzcxNiw5Mi41MDcxNjA3NDk4MDM2OSBsIDguNDUyMTM2NDE1NDczMjM0LC0xNC42Mzk1Mjk3MDQxMDI3MjIgbCAtOC40NTIxMzY0MTU0NzMyMjUsLTE0LjYzOTUyOTcwNDEwMjcyNiBsIC0xNi45MDQyNzI4MzA5NDY0NTcsLTUuNjMwMjUzODczNDM4NjcxZS0xNSBsIC04LjQ1MjEzNjQxNTQ3MzIzNywxNC42Mzk1Mjk3MDQxMDI3MiBsIDguNDUyMTM2NDE1NDczMjIsMTQuNjM5NTI5NzA0MTAyNzMxIFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwwLDApIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMjQ5Ljc1NjU1NTA1Mjc0ODE1LDM5MS40NjgyNDY4NjQ0MzYxNCBsIDIuNjExODUzNzkxMTU2NTc1MywtOC4wMzg0NTk0MTQ1NTEzNzYgbCAtMi42MTE4NTM3OTExNTY1ODEsLTguMDM4NDU5NDE0NTUxMzc2IGwgLTYuODM3OTIxOTk4ODkzMTk0LC00Ljk2ODA0MTEzNTM3OTMyOCBoIC04LjQ1MjEzNjQxNTQ3MzIyOSBsIC02LjgzNzkyMTk5ODg5MzE5NSw0Ljk2ODA0MTEzNTM3OTMzMyBsIC0yLjYxMTg1Mzc5MTE1NjU3NTMsOC4wMzg0NTk0MTQ1NTEzNzYgbCAyLjYxMTg1Mzc5MTE1NjU3OTMsOC4wMzg0NTk0MTQ1NTEzNzYgbCA2LjgzNzkyMTk5ODg5MzE5NDUsNC45NjgwNDExMzUzNzkzMyBoIDguNDUyMTM2NDE1NDczMjI5IFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwyNTUsMCkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSA4NC40MTk5ODAzNDQ3NjQ3Miw1Mi41NDAxMTc2NTI1NzgwOSBjIDAuMCwtNy4wMDE5NzkwNjg2MzMwNTggLTUuNjc2MjI1NTU0NTc2Nzg1LC0xMi42NzgyMDQ2MjMyMDk4NDQgLTEyLjY3ODIwNDYyMzIwOTg0IC0xMi42NzgyMDQ2MjMyMDk4NDRjIC03LjAwMTk3OTA2ODYzMzA1OCwtNC4yODc0NzU2MjcwNDkxMTk2ZS0xNiAtMTIuNjc4MjA0NjIzMjA5ODQ0LDUuNjc2MjI1NTU0NTc2Nzg0IC0xMi42NzgyMDQ2MjMyMDk4NDQgMTIuNjc4MjA0NjIzMjA5ODRjIC04LjU3NDk1MTI1NDA5ODIzOWUtMTYsNy4wMDE5NzkwNjg2MzMwNTggNS42NzYyMjU1NTQ1NzY3ODMsMTIuNjc4MjA0NjIzMjA5ODQ0IDEyLjY3ODIwNDYyMzIwOTgzOCAxMi42NzgyMDQ2MjMyMDk4NDRjIDcuMDAxOTc5MDY4NjMzMDU4LDEuMjg2MjQyNjg4MTE0NzM2ZS0xNSAxMi42NzgyMDQ2MjMyMDk4NDQsLTUuNjc2MjI1NTU0NTc2NzgyIDEyLjY3ODIwNDYyMzIwOTg0NCAtMTIuNjc4MjA0NjIzMjA5ODM3WiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMjU1LDI1NSwwKSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDMyNi44MTkzMTQ3NTYyMTUzLDY3LjQ0NjY0ODA4MjM2NjM4IGwgNi4zMzkxMDIzMTE2MDQ5MjQ1LC0xMC45Nzk2NDcyNzgwNzcwNCBsIC02LjMzOTEwMjMxMTYwNDkxNywtMTAuOTc5NjQ3Mjc4MDc3MDQyIGwgLTEyLjY3ODIwNDYyMzIwOTg0LC00LjIyMjY5MDQwNTA3OTAwM2UtMTUgbCAtNi4zMzkxMDIzMTE2MDQ5MjcsMTAuOTc5NjQ3Mjc4MDc3MDM5IGwgNi4zMzkxMDIzMTE2MDQ5MTMsMTAuOTc5NjQ3Mjc4MDc3MDQ4IFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDAsMCwyNTUpIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMjIwLjM2NzI5Mjg4NzI0ODgsMTg0LjI1MzE5ODM5MDg5MzA2IGMgMC4wLC00LjY2Nzk4NjA0NTc1NTM3MSAtMy43ODQxNTAzNjk3MTc4NTYyLC04LjQ1MjEzNjQxNTQ3MzIyOSAtOC40NTIxMzY0MTU0NzMyMjcgLTguNDUyMTM2NDE1NDczMjI5YyAtNC42Njc5ODYwNDU3NTUzNzEsLTIuODU4MzE3MDg0Njk5NDEzZS0xNiAtOC40NTIxMzY0MTU0NzMyMjksMy43ODQxNTAzNjk3MTc4NTYgLTguNDUyMTM2NDE1NDczMjI5IDguNDUyMTM2NDE1NDczMjI1YyAtNS43MTY2MzQxNjkzOTg4MjZlLTE2LDQuNjY3OTg2MDQ1NzU1MzcxIDMuNzg0MTUwMzY5NzE3ODU1Myw4LjQ1MjEzNjQxNTQ3MzIyOSA4LjQ1MjEzNjQxNTQ3MzIyNSA4LjQ1MjEzNjQxNTQ3MzIyOWMgNC42Njc5ODYwNDU3NTUzNzEsOC41NzQ5NTEyNTQwOTgyMzhlLTE2IDguNDUyMTM2NDE1NDczMjI5LC0zLjc4NDE1MDM2OTcxNzg1NSA4LjQ1MjEzNjQxNTQ3MzIyOSAtOC40NTIxMzY0MTU0NzMyMjNaIiAvPjwvZz48ZyBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIxLjAiIGZpbGw9InJnYigwLDAsMjU1KSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDIxNi4xNDExNTEwNjQzMjYyLDI2MC4yMTYzMjUxODEzMjI1IGwgNC4yMjYwNjgyMDc3MzY2MTYsLTcuMzE5NzY0ODUyMDUxMzU5IGwgLTQuMjI2MDY4MjA3NzM2NjEyLC03LjMxOTc2NDg1MjA1MTM2MSBsIC04LjQ1MjEzNjQxNTQ3MzIyNywtMi44MTUxMjY5MzY3MTkzMzVlLTE1IGwgLTQuMjI2MDY4MjA3NzM2NjE4LDcuMzE5NzY0ODUyMDUxMzU4NSBsIDQuMjI2MDY4MjA3NzM2NjA5LDcuMzE5NzY0ODUyMDUxMzY0IFoiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDc1LDAsMTMwKSIgZmlsbC1vcGFjaXR5PSIxLjAiIHN0cm9rZS13aWR0aD0iMS4wZS0yIiBmb250LXNpemU9IjEuMGVtIj48cGF0aCBkPSJNIDE2MS42NTU3MDUxMDU1NDQxMSwxNDkuMTE1NTc5NjA4NzcxNTMgbCAxLjMwNTkyNjg5NTU3ODI4NzcsLTQuMDE5MjI5NzA3Mjc1Njg4IGwgLTEuMzA1OTI2ODk1NTc4MjkwNiwtNC4wMTkyMjk3MDcyNzU2ODggbCAtMy40MTg5NjA5OTk0NDY1OTcsLTIuNDg0MDIwNTY3Njg5NjY0IGggLTQuMjI2MDY4MjA3NzM2NjE0IGwgLTMuNDE4OTYwOTk5NDQ2NTk3NywyLjQ4NDAyMDU2NzY4OTY2NjUgbCAtMS4zMDU5MjY4OTU1NzgyODc3LDQuMDE5MjI5NzA3Mjc1Njg4IGwgMS4zMDU5MjY4OTU1NzgyODk3LDQuMDE5MjI5NzA3Mjc1Njg4IGwgMy40MTg5NjA5OTk0NDY1OTczLDIuNDg0MDIwNTY3Njg5NjY1IGggNC4yMjYwNjgyMDc3MzY2MTQgWiIgLz48L2c+PGcgc3Ryb2tlPSJyZ2IoMCwwLDApIiBzdHJva2Utb3BhY2l0eT0iMS4wIiBmaWxsPSJyZ2IoMjU1LDAsMCkiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2Utd2lkdGg9IjEuMGUtMiIgZm9udC1zaXplPSIxLjBlbSI+PHBhdGggZD0iTSAyMDYuMzA1NzgyOTMzMzc5MDgsMTc2LjI0NzcxNDc5OTk3OTY2IGMgMC4wLC0yLjMzMzk5MzAyMjg3NzY4NTUgLTEuODkyMDc1MTg0ODU4OTI4MSwtNC4yMjYwNjgyMDc3MzY2MTQgLTQuMjI2MDY4MjA3NzM2NjEzIC00LjIyNjA2ODIwNzczNjYxNGMgLTIuMzMzOTkzMDIyODc3Njg1NSwtMS40MjkxNTg1NDIzNDk3MDY1ZS0xNiAtNC4yMjYwNjgyMDc3MzY2MTQsMS44OTIwNzUxODQ4NTg5MjggLTQuMjI2MDY4MjA3NzM2NjE0IDQuMjI2MDY4MjA3NzM2NjEyNWMgLTIuODU4MzE3MDg0Njk5NDEzZS0xNiwyLjMzMzk5MzAyMjg3NzY4NTUgMS44OTIwNzUxODQ4NTg5Mjc3LDQuMjI2MDY4MjA3NzM2NjE0IDQuMjI2MDY4MjA3NzM2NjEyNSA0LjIyNjA2ODIwNzczNjYxNGMgMi4zMzM5OTMwMjI4Nzc2ODU1LDQuMjg3NDc1NjI3MDQ5MTE5ZS0xNiA0LjIyNjA2ODIwNzczNjYxNCwtMS44OTIwNzUxODQ4NTg5Mjc1IDQuMjI2MDY4MjA3NzM2NjE0IC00LjIyNjA2ODIwNzczNjYxMloiIC8+PC9nPjxnIHN0cm9rZT0icmdiKDAsMCwwKSIgc3Ryb2tlLW9wYWNpdHk9IjEuMCIgZmlsbD0icmdiKDI1NSwwLDApIiBmaWxsLW9wYWNpdHk9IjEuMCIgc3Ryb2tlLXdpZHRoPSIxLjBlLTIiIGZvbnQtc2l6ZT0iMS4wZW0iPjxwYXRoIGQ9Ik0gMjI0LjEzNTczMzAwNjc4MjM1LDE4MC4yNTU5MDU4Mjg3OTI5OCBsIDIuMTEzMDM0MTAzODY4MzA4LC0zLjY1OTg4MjQyNjAyNTY3OTcgbCAtMi4xMTMwMzQxMDM4NjgzMDYsLTMuNjU5ODgyNDI2MDI1NjgwNiBsIC00LjIyNjA2ODIwNzczNjYxMywtMS40MDc1NjM0NjgzNTk2Njc2ZS0xNSBsIC0yLjExMzAzNDEwMzg2ODMwOSwzLjY1OTg4MjQyNjAyNTY3OTMgbCAyLjExMzAzNDEwMzg2ODMwNDUsMy42NTk4ODI0MjYwMjU2ODIgWiIgLz48L2c+PC9nPjwvc3ZnPg==>> -}