!g      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f 5Internal utilities of the configuration-tools package&Copyright 2014-2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalSafe<BQVconfiguration-toolsKThis is the same type as the type from the lens library with the same name.ZIn case it is already import from the lens package this should be hidden from the import.configuration-toolsKThis is the same type as the type from the lens library with the same name.ZIn case it is already import from the lens package this should be hidden from the import.configuration-toolsKThis is the same type as the type from the lens library with the same name.ZIn case it is already import from the lens package this should be hidden from the import.11 Configuration of Optional Values!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone;<=BV@configuration-toolsCommand line parser for record g valuesExample: edata Setting = Setting { _setA "7 !Int , _setB "7 !String } deriving (Show, Read, Eq, Ord, Typeable) $(makeLenses ''Setting) defaultSetting "7 Setting defaultSetting = Setting { _setA = 0 , _setB = 1 } instance ToJSON Setting where toJSON setting = object [ "a" .= _setA setting , "b" .= _setB setting ] instance FromJSON (Setting ! Setting) where parseJSON = withObject "Setting" $ \o ! id <$< setA ..: "a" % o <*< setB ..: "b" % o instance FromJSON Setting where parseJSON v = parseJSON v <*> pure defaultSetting pSetting "7 MParser Setting pSetting = id <$< setA .:: option auto % short 'a' <> metavar "INT" <> help "set a" <*< setB .:: option auto % short 'b' <> metavar "INT" <> help "set b" -- | Use 'Setting' as 'Maybe' in a configuration: -- data Config = Config { _maybeSetting "7 !(Maybe Setting) } deriving (Show, Read, Eq, Ord, Typeable) $(makeLenses ''Config) defaultConfig "7 Config defaultConfig = Config { _maybeSetting = defaultSetting } instance ToJSON Config where toJSON config = object [ "setting" .= maybeSetting ] instance FromJSON (Config ! Config) where parseJSON = withObject "Config" $ \o ! id <$< maybeSetting %.: "setting" % o pConfig "7 MParser Config pConfig = id <$< maybeSetting %:: (maybeOption defaultSetting <$> pEnableSetting <*> pSetting) where pEnableSetting = boolOption % long "setting-enable" <> value False <> help "Enable configuration flags for setting"configuration-tools4default value that is used if base configuration is hconfiguration-toolsIwhether to enable this parser or not (usually is a boolean option parser)configuration-tools:update function (usually given as applicative 'MParser a')configuration-toolsUthe base value that is updated (usually the result of parsing the configuration file)AUseful operators for defining functions in an applicative context!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalSafeBVZconfiguration-tools$This operator is an alternative for ix with a higher precedence. It is suitable for usage within applicative style code without the need to add parenthesis.configuration-tools$This operator is a UTF-8 version of  which is an alternative for ix with a higher precedence. It is suitable for usage within applicative style code without the need to add parenthesis.1The hex value of the UTF-8 character is 0x00d7. In VIM type:  Ctrl-V u 00d7nYou may also define a key binding by adding something like the following line to your vim configuration file: iabbrev <buffer> >< configuration-tools0Functional composition for applicative functors.configuration-toolsLFunctional composition for applicative functors with its arguments flipped.configuration-toolsXApplicative functional composition between a pure function and an applicative function.configuration-toolssApplicative functional composition between a pure function and an applicative function with its arguments flipped.configuration-tools0Functional composition for applicative functors.This is a rather popular operator. Due to conflicts (for instance with the lens package) it may have to be imported qualified.configuration-toolsiFor people who like nicely aligned code and do not mind messing with editor key-maps: here a version of  that uses a unicode symbol1The hex value of the UTF-8 character " is 0x2299.A convenient VIM key-map is: iabbrev <buffer> ../ "55444444/Command Line Option Parsing with Default Values!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalSafeBQV]Dconfiguration-tools:Type of option parsers that yield a modification function.configuration-toolsJAn operator for applying a setter to an option parser that yields a value.Example usage: "data Auth = Auth { _user "7 !String , _pwd "7 !String } user "7 Functor f ! (String ! f String) ! Auth ! f Auth user f s = (\u ! s { _user = u }) <$> f (_user s) pwd "7 Functor f ! (String ! f String) ! Auth ! f Auth pwd f s = (\p ! s { _pwd = p }) <$> f (_pwd s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''Auth) pAuth "7 MParser Auth pAuth = id <$< user .:: strOption long "user" " short 'u' " help "user name" <*< pwd .:: strOption long "pwd" " help "password for user"configuration-tools[An operator for applying a setter to an option parser that yields a modification function.Example usage: data HttpURL = HttpURL { _auth "7 !Auth , _domain "7 !String } auth "7 Functor f ! (Auth ! f Auth) ! HttpURL ! f HttpURL auth f s = (\u ! s { _auth = u }) <$> f (_auth s) domain "7 Functor f ! (String ! f String) ! HttpURL ! f HttpURL domain f s = (\u ! s { _domain = u }) <$> f (_domain s) path "7 Functor f ! (String ! f String) ! HttpURL ! f HttpURL path f s = (\u ! s { _path = u }) <$> f (_path s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''HttpURL) pHttpURL "7 MParser HttpURL pHttpURL = id <$< auth %:: pAuth <*< domain .:: strOption long "domain" " short 'd' " help "HTTP domain"configuration-toolsThe  is an alternative to @.Using @q with command line parsers that overwrite settings from a configuration file is problematic: the absence of the @B is interpreted as setting the respective configuration value to j. So there is no way to specify on the command line that the value from the configuration file shall be used. Some command line UIs use two different options for those values, for instance --enable-feature and --disable-feature]. This option instead expects a Boolean value. Beside that it behaves like any other option.configuration-toolsAn alternative syntax for  for options with long names.Instead of taking a boolean argument the presence of the option acts as a switch to set the respective configuration setting to k>. If the option is not present the setting is left unchanged./In addition for long option names a respective  unset flag' is provided. For instance for a flag  --verbose there will also be a flag  --no-verbose.<This can still be used with short option names only, but no  unset flag would be provided.configuration-toolsMAn option parser for flags that are enabled via the flag name prefixed with  --enable-' and disabled via the flag name prefix  --disable-. The prefixes are applied to all long option names. Short option names are parsed unchanged and and cause the flag to be enabled.HThis resembles the style of flags that is used for instances with Cabal.     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmutsrqpon~}|{zyxwv     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmutsrqpon~}|{zyxwv55Configuration of Monoids!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone;=BKV]configuration-toolsxUpdate a value by appending on the right. Under normal circumstances you'll never use this type directly but only its l instance. See the  for an example.configuration-toolswUpdate a value by appending on the left. Under normal circumstances you'll never use this type directly but only its l instance. See the  for an example.configuration-tools(Update a value by appending on the left. #newtype RoutingTable = RoutingTable { _routingTableMap "7 HashMap T.Text T.Text } $(makeLenses ''RoutingTable) instance FromJSON (RoutingTable ! RoutingTable) where parseJSON = withObject "RoutingTable" $ \o ! id <$< routingTableMap . from leftMonoidalUpdate %.: "route_map" % oconfiguration-toolsThis is the same as from leftMonoidalUpdate) but doesn't depend on the lens Library.configuration-tools(Update a value by appending on the left. newtype RoutingTable = RoutingTable { _routingTableMap "7 HashMap T.Text T.Text } $(makeLenses ''RoutingTable) pRoutingTable "7 MParser RoutingTable pRoutingTable = routingTableMap %:: pLeftMonoidalUpdate pRoute where pRoute = option (eitherReader readRoute) % long "route" <> help "add a route to the routing table; the APIROUTE part must not contain a colon character" <> metavar "APIROUTE:APIURL" readRoute s = case break (== ':') s of (a,':':b) ! fmapL T.unpack $ do validateNonEmpty "APIROUTE" a validateHttpOrHttpsUrl "APIURL" b return $ HM.singleton (T.pack a) (T.pack b) _ ! Left "missing colon between APIROUTE and APIURL" fmapL f = either (Left . f) Rightconfiguration-tools.Update a value by appending on the right. See  for an usage example.configuration-toolsThis is the same as from rightMonoidalUpdate) but doesn't depend on the lens Library.configuration-tools.Update a value by appending on the right. See  for an usage example.NoneVZconfiguration-toolsOInclude this function when your setup doesn't contain any extra functionality.configuration-toolsModifies the given record of hooks by adding functionality that creates a package info module for each component of the cabal package.4This function is intended for usage in more complex Setup.hsU scripts. If your setup doesn't contain any other function you can just import the  function from this module.The modules are created in the autogen# build directories where also the Path_3 modules are created by cabal's simple build setup.)Copyright 2014 AlephCloud Systems, Inc.MIT Lars Kuhtz <lars@alephcloud.com> experimentalSafe<BQV]} configuration-tools'A validation function. The type in the m is excpected to be a n# structure for collecting warnings.configuration-tools.Validates that a value is an HTTP or HTTPS URLconfiguration-tools%Validates that a value is an HTTP URLconfiguration-tools&Validates that a value is an HTTPS URLconfiguration-tools>Validates that a value is an URI without a fragment identifierconfiguration-toolsGValidates that a value is an absolute URI without a fragment identifierconfiguration-toolsOValidates that a value is an absolute URI with an optional fragment identifierconfiguration-toolsWValidates if the given executable name can be found in the system and can be executed.configuration-tools(Validate that the input is a config file"configuration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools#exact length of the validated valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools%maximum length of the validated valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools%minimum length of the validated valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools%minimum length of the validated valueconfiguration-tools%maximum length of the validated valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageoconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-toolsexpected valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools0a strict upper bound for the configuration valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools)a upper bound for the configuration valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools0a strict lower bound for the configuration valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools)a lower bound for the configuration valueconfiguration-tools=configuration property name that is used in the error messageconfiguration-tools+the valid range for the configuration value###HTTPS certificate validation policy!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone1BV]configuration-tools The Haskell tlsR library provides only limited means for providing user friendly error messages. In particular we'd like to provide the user with fingerprints of the reject certificate for self-signed certificates. Also we want to provide the user with some guidance what a particular failure may indicate with respect to security of the connection.Here we employ a hackY for better error handling: Based on the assumption that we initialize a new connection Manager and also a new certificate cache for each request, we write the certificate that is received from the server in the TLS handshake to an pz. If the handshakes fails later on because the certificate is rejected we can recover the rejected certificate from the p.What we really want are exceptions that can be consumed programatically. In particular exceptions should include rejected certificates.configuration-toolsdisable certificate validationconfiguration-tools2a whitelist for services with trusted certificatesconfiguration-tools@Make an HTTP request with a given certificate validation policy.:NOTE that the HTTP request is strictly loaded into memory.NOTE that this implementation opens a new TCP connection for each single request. HTTPS certificates validation results are not cached between different requests.qconfiguration-toolsThe usage of the certVar parameter is not thread-safe!VFIXME We could make this thread-safe by using a cache for "unvalidated" certificates.configuration-tools#prefix for the command line optionsconfiguration-toolsHTTP or HTTPS URL 2Parsing of Configuration Files with Default Values!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone1<BQV\Tconfiguration-toolsAn internalc type for the meta configuration that specifies how the configuration files are loaded and parsed.configuration-toolsA JSON r# parser for a property of a given s- that updates a setter with the parsed value. data Auth = Auth { _userId "7 !Int , _pwd "7 !String } userId "7 Functor f ! (Int ! f Int) ! Auth ! f Auth userId f s = (\u ! s { _userId = u }) <$> f (_userId s) pwd "7 Functor f ! (String ! f String) ! Auth ! f Auth pwd f s = (\p ! s { _pwd = p }) <$> f (_pwd s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''Auth) instance FromJSON (Auth ! Auth) where parseJSON = withObject "Auth" $ \o ! id <$< setProperty user "user" p o <*< setProperty pwd "pwd" parseJSON o where p = withText "user" $ \case "alice" ! pure (0 "7 Int) "bob" ! pure 1 e ! fail $ "unrecognized user " " e configuration-toolsA variant of the  that uses the default t method from the la instance to parse the value of the property. Its usage pattern mimics the usage pattern of the u! operator from the aeson library. data Auth = Auth { _user "7 !String , _pwd "7 !String } user "7 Functor f ! (String ! f String) ! Auth ! f Auth user f s = (\u ! s { _user = u }) <$> f (_user s) pwd "7 Functor f ! (String ! f String) ! Auth ! f Auth pwd f s = (\p ! s { _pwd = p }) <$> f (_pwd s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''Auth) instance FromJSON (Auth ! Auth) where parseJSON = withObject "Auth" $ \o ! id <$< user ..: "user" o <*< pwd ..: "pwd" o configuration-toolsBA JSON parser for a function that modifies a property of a given s0 and updates a setter with the parsed function.This function is useful when a l# instance isn't available. When a l instance exists, the  ( provides a more ideomatic alternative. data HttpURL = HttpURL { _auth "7 !Auth , _domain "7 !String } auth "7 Functor f ! (Auth ! f Auth) ! HttpURL ! f HttpURL auth f s = (\u ! s { _auth = u }) <$> f (_auth s) domain "7 Functor f ! (String ! f String) ! HttpURL ! f HttpURL domain f s = (\u ! s { _domain = u }) <$> f (_domain s) path "7 Functor f ! (String ! f String) ! HttpURL ! f HttpURL path f s = (\u ! s { _path = u }) <$> f (_path s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''HttpURL) instance FromJSON (HttpURL ! HttpURL) where parseJSON = withObject "HttpURL" $ \o ! id <$< updateProperty auth "auth" parseJSON o <*< setProperty domain "domain" parseJSON o configuration-tools A variant of   that uses the lA instance for the update function. It mimics the aeson operator uE. It creates a parser that modifies a setter with a parsed function. data HttpURL = HttpURL { _auth "7 !Auth , _domain "7 !String } auth "7 Functor f ! (Auth ! f Auth) ! HttpURL ! f HttpURL auth f s = (\u ! s { _auth = u }) <$> f (_auth s) domain "7 Functor f ! (String ! f String) ! HttpURL ! f HttpURL domain f s = (\u ! s { _domain = u }) <$> f (_domain s) path "7 Functor f ! (String ! f String) ! HttpURL ! f HttpURL path f s = (\u ! s { _path = u }) <$> f (_path s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''HttpURL) instance FromJSON (HttpURL ! HttpURL) where parseJSON = withObject "HttpURL" $ \o ! id <$< auth %.: "auth" o <*< domain ..: "domain" o configuration-toolsThis operator requires that a value is explicitly provided in a configuration file, thus preventing the default value from being used. Otherwise this operator does the same as '(..:)'.configuration-tools4a lens into the target that is updated by the parserconfiguration-toolsthe JSON property nameconfiguration-tools the JSON r7 parser that is used to parse the value of the propertyconfiguration-toolsthe parsed JSON r svwxyz{|}~ultsr           6 6 .Internal Tools for Parsing Configuration Files!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone +16<BV]f< configuration-toolsDefined in RFC 4627configuration-toolsdefault configuration valueconfiguration-tools list of configuration file pathsconfiguration-tools file pathconfiguration-tools file path!configuration-toolsvalue of an HTTP  Content-Type header"configuration-toolsURL  !"# " !# "Utilities for Configuring Programs&Copyright 2014-2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone "#1<BQV,configuration-tools3Information about the cabal package. The format is: C(info message, detailed info message, version string, license text)See the documentation of Configuration.Utils.Setupr for a way how to generate this information automatically from the package description during the build process.configuration-toolsAn internalw data type that is used during configuration parsing to represent the overall application configuration which includes the user\ configuration, which is actual configuration value that is given to the application andthe metaI configuration, which are all settings that determine how the actual user$ configuration is loaded and parsed. NOTE that metak configuration settings can only be provided via command line options but not through configuration files.configuration-toolsProgram Descriptionconfiguration-tools Help headerconfiguration-tools Help footerconfiguration-tools options parser for configurationconfiguration-toolsdefault configurationconfiguration-toolsa validation function. The  result is interpreted as a n structure of warnings.configuration-toolsfa list of configuration files that are loaded in order before any command line argument is evaluated./configuration-tools[A newtype wrapper around a validation function. The only purpose of this type is to avoid ImpredicativeTypes# when storing the function in the - record.2configuration-toolsProgram Description3configuration-tools Help header4configuration-tools Help footer5configuration-tools Options parser for configuration6configuration-toolsDefault configuration7configuration-toolsValidation FunctionThe  result is interpreted as a n structure of warnings.8configuration-tools\Configuration files that are loaded in order before any command line argument is evaluated.9configuration-tools& for simultaneous query and update of 5 and 6&. This supports to change the type of . with  and .:configuration-toolsSmart constructor for ..3 and 4 are set to h. The function 7 is set to const (return []);configuration-toolsSmart constructor for ..3 and 4 are set to h.configuration-tools_A flag that indicates that the application should output the effective configuration and exit.configuration-toolsThe W collects all parameters that determine how configuration files are loaded and parsed.configuration-toolsA list of configuration file locations. Configuration file locations are set either statically in the code or are provided dynamically on the command line via  --config-file options.configuration-toolsThe user configuration. During parsing this is represented as an update function that yields a configuration value when applied to a default value.configuration-toolsThis function parsers all command line options: ? options that determine how configuration files are loaded. ConfigFiles options are all  --config-file options.Other meta options, such as --print-config.Options for the actual user  configuration. The user configuration is represented as an update function that yields a configuration value when applied to an default value.<configuration-toolsRun an IO action with a configuration that is obtained by updating the given default configuration the values defined via command line arguments.eIn addition to the options defined by the given options parser the following options are recognized: --config-file, -cSParse the given file path as a (partial) configuration in YAML or JSON format.--print-config, -p>Print the final parsed configuration to standard out and exit. --help, -hPrint a help message and exit.)As long as the package wasn't build with -f-remote-configsl the following two options are available. They affect how configuration files are loaded from remote URLs. "--config-https-insecure=true|falseMBypass certificate validation for all HTTPS connections to all services.3--config-https-allow-cert=HOSTNAME:PORT:FINGERPRINTIUnconditionally trust the certificate for connecting to the service.=configuration-toolsRun an IO action with a configuration that is obtained by updating the given default configuration the values defined via command line arguments.eIn addition to the options defined by the given options parser the following options are recognized: --config-file, -cSParse the given file path as a (partial) configuration in YAML or JSON format.--print-config, -p>Print the final parsed configuration to standard out and exit. --help, -hPrint a help message and exit. --version, -v.Print the version of the application and exit. --info, -i8Print a short info message for the application and exit. --long-info;Print a detailed info message for the application and exit. --license:Print the text of the license of the application and exit.)As long as the package wasn't build with -f-remote-configsl the following two options are available. They affect how configuration files are loaded from remote URLs. "--config-https-insecure=true|falseMBypass certificate validation for all HTTPS connections to all services.3--config-https-allow-cert=HOSTNAME:PORT:FINGERPRINTIUnconditionally trust the certificate for connecting to the service.configuration-toolsInternal main function>configuration-tools!Parse the command line arguments.IAny warnings from the configuration function are discarded. The options --print-config and --help are just ignored.configuration-toolsxValidates a configuration value. Throws an user error if there is an error. If there are warnings they are printed to .:configuration-toolsprogram descriptionconfiguration-tools-parser for updating the default configurationconfiguration-toolsdefault configuration<configuration-toolsprogram info value; use :# to construct a value of this typeconfiguration-toolsRcomputation that is given the configuration that is parsed from the command line.=configuration-toolsprogram info value; use :# to construct a value of this typeconfiguration-toolsRcomputation that is given the configuration that is parsed from the command line.configuration-tools:Program Info value which may include a validation functionconfiguration-tools^Maybe a package info parser. This parser is run only for its side effects. It is supposed to  interceptM the parsing process and execute any implied action (showing help messages).configuration-toolsprogram info value; use :# to construct a value of this typeconfiguration-toolsRcomputation that is given the configuration that is parsed from the command line.>configuration-tools%program name (used in error messages)configuration-toolsprogram info value; use :# to construct a value of this typeconfiguration-toolscommand line arguments\    vwxyz{|}~ultsr !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmutsrqpon~}|{zyxwv     ,-./0123456789:;<=>.:234568;<,=>-7/019 None  "#;<=BV@configuration-tools>We restrict services to use either HTTP or HTTPS but not both.bTLS can be turned off explicitely in the configuration file by setting the respective section to null. It can not be turned on or off via command line options. But once it is turned on the values for the certificate and key file can be changed by command line options.Aconfiguration-toolsMIn order to make TLS optional this type should be used wrapped into a Maybe.Fconfiguration-toolsThis option parser does not allow to enable or disable usage of TLS. The option will have effect only when TLS usage is configured in the configuration file or the default configuration.eFIXME: print a warning and exit when one of these options is provided even though TLS is turned off.Uconfiguration-tools3This is used as default when wrapped into Maybe and the parsed value is not  andthe given default is not h.?@ABCDEFGHIJKLMNOPQRSABCDFE@GHIJLK?MNOPRQS                 ! " # $ % & & '( ') ') * + , -./0./1./2./3./4./5./6./7./8.9:.9;.9<.9=.9>.9?.9@.9A.9B.9C.9D.9E.9F.9G.9H.9I.9J.9K.9L.9M.9N.9O.9P.9Q.9R.9S.9T.9U.9V.9W.9X.9Y.9Z.9[.9\.9].9^.9_.9`.9a.9b.9c.9d.9e.9f.9g.9h.9i.9j.9k.9l.9m.9n.9o.pq.pr.ps.tu.tv.tw.tx.ty.tz.t{.t|.t}.t~................................................                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s tuvwuvxyz{|}~  yyyzyzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy y                  0configuration-tools-0.4.0-DZaNaq4TXbY1TtDx3wtQyKConfiguration.Utils.CommandLineConfiguration.Utils.InternalConfiguration.Utils.MaybeConfiguration.Utils.OperatorsConfiguration.Utils.MonoidConfiguration.Utils.SetupConfiguration.Utils.Validation,Configuration.Utils.Internal.HttpsCertPolicyConfiguration.Utils.ConfigFile-Configuration.Utils.Internal.ConfigFileReaderConfiguration.UtilsConfiguration.Utils.HttpbaseGHC.Basemappend<*>pure*> Applicative Alternativeempty<|>somemany<*<$ Data.Functor<$>Control.Applicativeoptional unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipListData.Functor.ConstgetConstConstliftA3liftA<**>liftA24optparse-applicative-0.14.2.0-6OZZZ7amjMJ9aql6WYjCH7Options.Applicative.Extra renderFailure parserFailureexecParserPuregetParseResulthandleParseResultcustomExecParser execParser hsubparserhelperOptions.Applicative.Builder defaultPrefsidmprefscolumns noBacktrackshowHelpOnEmptyshowHelpOnError disambiguate multiSuffixinfoforwardOptions noIntersperse failureCode progDescDocprogDesc footerDocfooter headerDocheader briefDescfullDescoption strOption infoOption abortOptionswitchflag'flag strArgumentargument subparser completeraction completeWith commandGroupcommandstylehiddenmetavar noArgErrorhelpDochelp showDefaultshowDefaultWithvaluelongshortdisabled maybeReader eitherReaderstrautoInfoModPrefsMod%Options.Applicative.Builder.Completer bashCompleter listCompleterlistIOCompleter$Options.Applicative.Builder.Internalinternal OptionFields FlagFields CommandFieldsArgumentFieldsHasName HasCompleterHasValue HasMetavarModOptions.Applicative.Types overFailure mkCompleter readerError readerAbortUnexpectedErrorExpectsArgError MissingError UnknownError ShowHelpTextInfoMsgErrorMsg ParseError infoPolicyinfoFailureCode infoFooter infoHeader infoProgDesc infoFullDesc infoParser ParserInfo prefColumns prefBacktrackprefShowHelpOnEmptyprefShowHelpOnErrorprefDisambiguateprefMultiSuffix ParserPrefsReadM CompleterexecCompletionCompletionResult execFailure ParserFailureCompletionInvokedFailure ParserResultOptions.Applicative.Help.Types helpFooterhelpBody helpUsage helpHeaderhelpSuggestions helpError ParserHelpIso'IsoLens'Lenslensoversetviewiso&<&>sshowexceptTerrorTfmapL maybeOption$fFromJSON(->)%×<*<>*><$<>$><.>⊙MParser.::%:: boolReader boolOption boolOption_enableDisableFlag fileOption eitherReadPRightMonoidalUpdateLeftMonoidalUpdateleftMonoidalUpdatefromLeftMonoidalUpdatepLeftMonoidalUpdaterightMonoidalUpdatefromRightMonoidalUpdatepRightMonoidalUpdate$fFromJSON(->)0$fSemigroupLeftMonoidalUpdate$fMonoidLeftMonoidalUpdate$fSemigroupRightMonoidalUpdate$fMonoidRightMonoidalUpdatemainmkPkgInfoModulesConfigValidationvalidateHttpOrHttpsUrlvalidateHttpUrlvalidateHttpsUrl validateUrivalidateAbsoluteUrivalidateAbsoluteUriFragment validateIPv4 validateIPv6 validatePortvalidateNonEmptyvalidateLengthvalidateMaxLengthvalidateMinLengthvalidateMinMaxLengthvalidateFilePath validateFilevalidateFileReadablevalidateFileWritablevalidateDirectoryvalidateExecutablevalidateConfigFile validateFalse validateTrue validateBoolvalidateNonNegativevalidatePositivevalidateNonPositivevalidateNegativevalidateNonNull validateLessvalidateLessEqvalidateGreatervalidateGreaterEq validateRangeVerboseTlsExceptionHttpsCertPolicy_certPolicyInsecure_certPolicyHostFingerprintscertPolicyInsecurecertPolicyHostFingerprintsdefaultHttpsCertPolicypHttpsCertPolicysimpleHttpWithValidationPolicyhttpWithValidationPolicy$fExceptionVerboseTlsException$fShowVerboseTlsException$fShowHttpsCertPolicy$fEqHttpsCertPolicy$fEqVerboseTlsException$fOrdVerboseTlsExceptionConfigFilesConfig_cfcHttpsPolicy ConfigFileConfigFileRequiredConfigFileOptional getConfigFile setProperty..:updateProperty%.:!..:cfcHttpsPolicydefaultConfigFilesConfigpConfigFilesConfig dropAndUncaml$fShowConfigFile$fReadConfigFile$fEqConfigFile$fOrdConfigFile$fShowConfigFilesConfig$fEqConfigFilesConfigConfigFileFormatYamlJsonOtherparseConfigFilesreadConfigFile loadLocalisRemote yamlMimeType jsonMimeType contentType loadRemoterequestHeaders$fNFDataConfigFileFormat$fShowConfigFileFormat$fReadConfigFileFormat$fEqConfigFileFormat$fOrdConfigFileFormat$fEnumConfigFileFormat$fBoundedConfigFileFormat$fGenericConfigFileFormatPkgInfoProgramInfoValidate ProgramInfoConfigValidationFunctionrunConfigValidation piDescription piHelpHeader piHelpFooterpiOptionParserpiDefaultConfigurationpiValidateConfigurationpiConfigurationFiles%piOptionParserAndDefaultConfiguration programInfoprogramInfoValidaterunWithConfigurationrunWithPkgInfoConfigurationparseConfigurationHttpClientConfigurationHttpServiceConfigurationHttpServiceTLSConfiguration hstcCertFile hstcKeyFile"defaultHttpServiceTLSConfiguration#validateHttpServiceTLSConfigurationpHttpServiceTLSConfigurationhscHosthscPort hscUseTLSdefaultHttpServiceConfiguration validateHttpServiceConfigurationpHttpServiceConfigurationhccHosthccPort hccUseTLSdefaultHttpClientConfigurationvalidateHttpClientConfigurationpHttpClientConfigurationhttpService2clientConfiguration#$fToJSONHttpServiceTLSConfiguration%$fFromJSONHttpServiceTLSConfiguration $fToJSONHttpServiceConfiguration$fToJSONHttpClientConfiguration$fFromJSON(->)1!$fShowHttpServiceTLSConfiguration!$fReadHttpServiceTLSConfiguration$fEqHttpServiceTLSConfiguration $fOrdHttpServiceTLSConfiguration$fShowHttpServiceConfiguration$fReadHttpServiceConfiguration$fEqHttpServiceConfiguration$fOrdHttpServiceConfiguration$fShowHttpClientConfiguration$fReadHttpClientConfiguration$fEqHttpClientConfiguration$fOrdHttpClientConfigurationMaybeNothing$ghc-prim GHC.TypesFalseTrue$aeson-1.4.0.0-LIOMjdhUbDoEPhbHMMZ6tyData.Aeson.Types.FromJSONFromJSON mtl-2.2.2Control.Monad.Writer.Class MonadWriter Data.FoldableFoldablevalidateFileExecutable GHC.IORefIORef getSettingsData.Aeson.Types.InternalValueObject parseJSON.: Data.AesoneitherDecodeFileStrict'eitherDecodeStrict' eitherDecode'eitherDecodeFileStricteitherDecodeStrict eitherDecodedecodeFileStrict' decodeStrict'decode'decodeFileStrict decodeStrictdecode encodeFileencodeData.Aeson.TypesfoldableData.Aeson.Types.ClassGToJSON GToEncodingData.Aeson.Types.ToJSON toEncoding2toJSON2 toEncoding1toJSON1genericLiftToEncodinggenericToEncodinggenericLiftToJSON genericToJSONToArgsNoToArgsTo1ArgsToJSONtoJSON toEncoding toJSONListtoEncodingListKeyValue.= ToJSONKey toJSONKey toJSONKeyListToJSONKeyFunction ToJSONKeyTextToJSONKeyValueToJSON1 liftToJSONliftToJSONListliftToEncodingliftToEncodingListToJSON2 liftToJSON2liftToJSONList2liftToEncoding2liftToEncodingList2Data.Aeson.Encoding.Internalpairs fromEncodingEncodingSeries.!=.:!.:?fromJSONwithEmbeddedJSONwithBoolwithScientific withArraywithText withObject parseJSON2 parseJSON1genericLiftParseJSONgenericParseJSON GFromJSON gParseJSONFromArgs NoFromArgs From1Args parseJSONList FromJSONKey fromJSONKeyfromJSONKeyListFromJSONKeyFunctionFromJSONKeyCoerceFromJSONKeyTextFromJSONKeyTextParserFromJSONKeyValue FromJSON1 liftParseJSONliftParseJSONList FromJSON2liftParseJSON2liftParseJSONList2Data.Aeson.Parser.Internaljson'jsoncamelTo2defaultTaggedObjectdefaultOptionsobjectResultErrorSuccessArrayBoolStringNumberNull DotNetTimefromDotNetTimeOptionsfieldLabelModifierconstructorTagModifierallNullaryToStringTagomitNothingFields sumEncodingunwrapUnaryRecordstagSingleConstructors SumEncoding TaggedObject UntaggedValueObjectWithSingleField TwoElemArray tagFieldNamecontentsFieldNameData.Aeson.Types.GenericZeroOneAppConfiguration_piDescription _piHelpHeader _piHelpFooter_piOptionParser_piDefaultConfiguration_piValidateConfiguration Data.EitherRight_piConfigurationFiles printConfigconfigFilesConfig configFiles mainConfigpAppConfiguration runInternalvalidateConfigGHC.IO.Handle.FDstderr mainOptions