From 8c637282f5e2ba6400ba636c72900de325e98bab Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 21 Aug 2024 19:58:17 +0000 Subject: [PATCH] update jsdoc and bundles to release v3.4.3 --- current/coverage/index.html | 2 +- .../src/Exceptions/ErrorService.js.html | 2 +- current/coverage/src/Exceptions/index.html | 2 +- current/coverage/src/Formats/WKT.js.html | 2 +- current/coverage/src/Formats/WPS.js.html | 2 +- current/coverage/src/Formats/XLS.js.html | 2 +- .../src/Formats/XLS/AbstractService.js.html | 2 +- .../XLS/LocationUtilityService.js.html | 2 +- .../GeocodeFilterExtension.js.html | 2 +- .../GeocodeRequest.js.html | 2 +- .../ReverseGeocodeRequest.js.html | 2 +- .../XLS/LocationUtilityService/index.html | 2 +- .../model/Address.js.html | 2 +- .../model/Position.js.html | 2 +- .../model/Preference.js.html | 2 +- .../LocationUtilityService/model/index.html | 2 +- .../coverage/src/Formats/XLS/Request.js.html | 2 +- .../src/Formats/XLS/RequestHeader.js.html | 2 +- .../src/Formats/XLS/RouteService.js.html | 2 +- .../DetermineRouteRequest.js.html | 2 +- .../src/Formats/XLS/RouteService/index.html | 2 +- .../XLS/RouteService/model/RoutePlan.js.html | 2 +- .../Formats/XLS/RouteService/model/index.html | 2 +- current/coverage/src/Formats/XLS/index.html | 2 +- current/coverage/src/Formats/XML.js.html | 2 +- current/coverage/src/Formats/index.html | 2 +- current/coverage/src/Gp.js.html | 2 +- current/coverage/src/Protocols/JSONP.js.html | 2 +- .../coverage/src/Protocols/Protocol.js.html | 2 +- current/coverage/src/Protocols/XHR.js.html | 2 +- current/coverage/src/Protocols/index.html | 2 +- .../coverage/src/Services/Alti/Alti.js.html | 2 +- .../Alti/Formats/AltiResponseReader.js.html | 2 +- .../src/Services/Alti/Formats/index.html | 2 +- .../Alti/Request/AltiRequestFactory.js.html | 2 +- .../Alti/Request/AltiRequestREST.js.html | 2 +- .../Alti/Request/AltiRequestWPS.js.html | 2 +- .../src/Services/Alti/Request/index.html | 2 +- .../model/AltiElevationRequest.js.html | 2 +- .../Request/model/AltiProfilRequest.js.html | 2 +- .../Alti/Request/model/AltiRequest.js.html | 2 +- .../Services/Alti/Request/model/index.html | 2 +- .../Alti/Response/AltiResponseFactory.js.html | 2 +- .../src/Services/Alti/Response/index.html | 2 +- .../Alti/Response/model/AltiResponse.js.html | 2 +- .../Alti/Response/model/Elevation.js.html | 2 +- .../Alti/Response/model/Measure.js.html | 2 +- .../Services/Alti/Response/model/index.html | 2 +- current/coverage/src/Services/Alti/index.html | 2 +- .../AutoComplete/AutoComplete.js.html | 2 +- .../AutoCompleteResponseFactory.js.html | 2 +- .../Services/AutoComplete/Response/index.html | 2 +- .../model/AutoCompleteResponse.js.html | 2 +- .../Response/model/SuggestedLocation.js.html | 2 +- .../AutoComplete/Response/model/index.html | 2 +- .../src/Services/AutoComplete/index.html | 2 +- .../src/Services/CommonService.js.html | 2 +- .../src/Services/Config/Config.js.html | 7 +- .../Services/Config/ConfigInterface.js.html | 10 +- .../coverage/src/Services/Config/index.html | 2 +- .../src/Services/DefaultUrlService.js.html | 2 +- .../Formats/GeocodeResponseParser.js.html | 2 +- .../src/Services/Geocode/Formats/index.html | 2 +- .../src/Services/Geocode/Geocode.js.html | 2 +- .../Geocode/Request/GeocodeLocation.js.html | 2 +- .../Request/GeocodeRequestFactory.js.html | 2 +- .../Request/GeocodeRequestREST.js.html | 2 +- .../src/Services/Geocode/Request/index.html | 2 +- .../Request/model/GeocodeParamREST.js.html | 2 +- .../Request/model/PositionOfInterest.js.html | 2 +- .../Request/model/StreetAddress.js.html | 2 +- .../Services/Geocode/Request/model/index.html | 2 +- .../Response/GeocodeResponseFactory.js.html | 2 +- .../src/Services/Geocode/Response/index.html | 2 +- .../Response/model/GeocodeResponse.js.html | 2 +- .../Response/model/GeocodedLocation.js.html | 2 +- .../Geocode/Response/model/index.html | 2 +- .../Services/Geocode/ReverseGeocode.js.html | 2 +- .../coverage/src/Services/Geocode/index.html | 2 +- .../ProcessIsoCurve/ProcessIsoCurve.js.html | 2 +- .../Request/ProcessIsoCurveRequest.js.html | 2 +- .../ProcessIsoCurve/Request/index.html | 2 +- .../model/ProcessIsoCurveParam.js.html | 2 +- .../ProcessIsoCurve/Request/model/index.html | 2 +- .../ProcessIsoCurveResponseFactory.js.html | 2 +- .../ProcessIsoCurve/Response/index.html | 2 +- .../model/ProcessIsoCurveResponse.js.html | 2 +- .../ProcessIsoCurve/Response/model/index.html | 2 +- .../src/Services/ProcessIsoCurve/index.html | 2 +- .../Route/Request/RouteRequestFactory.js.html | 2 +- .../Route/Request/RouteRequestREST.js.html | 2 +- .../src/Services/Route/Request/index.html | 2 +- .../Request/model/RouteParamREST.js.html | 2 +- .../Services/Route/Request/model/index.html | 2 +- .../Response/RouteResponseFactory.js.html | 2 +- .../src/Services/Route/Response/index.html | 2 +- .../Response/model/RouteInstruction.js.html | 2 +- .../Response/model/RouteResponse.js.html | 2 +- .../Services/Route/Response/model/index.html | 2 +- .../coverage/src/Services/Route/Route.js.html | 2 +- .../coverage/src/Services/Route/index.html | 2 +- .../coverage/src/Services/Services.js.html | 2 +- current/coverage/src/Services/index.html | 2 +- current/coverage/src/Utils/Helper.js.html | 2 +- .../src/Utils/LoggerByDefault.js.html | 2 +- .../src/Utils/MessagesResources.js.html | 2 +- current/coverage/src/Utils/index.html | 2 +- current/coverage/src/index.html | 2 +- current/dist/GpServices-map.js | 78 +- current/dist/GpServices-src.js | 11 +- current/dist/GpServices.js | 8 +- current/jsdoc/Gp.BBox.html | 702 +- current/jsdoc/Gp.Circle.html | 702 +- current/jsdoc/Gp.Error.html | 702 +- current/jsdoc/Gp.Point.html | 702 +- current/jsdoc/Gp.Services.Alti.Elevation.html | 702 +- current/jsdoc/Gp.Services.Alti.Measure.html | 702 +- current/jsdoc/Gp.Services.Alti.html | 702 +- current/jsdoc/Gp.Services.AltiResponse.html | 702 +- ...rvices.AutoComplete.SuggestedLocation.html | 702 +- current/jsdoc/Gp.Services.AutoComplete.html | 702 +- .../Gp.Services.AutoCompleteResponse.html | 702 +- current/jsdoc/Gp.Services.CommonService.html | 702 +- current/jsdoc/Gp.Services.Config.Base.html | 2730 +++ .../jsdoc/Gp.Services.Config.Constraint.html | 1158 +- current/jsdoc/Gp.Services.Config.Format.html | 1158 +- current/jsdoc/Gp.Services.Config.Layer.html | 3863 ++-- current/jsdoc/Gp.Services.Config.Legend.html | 1158 +- .../jsdoc/Gp.Services.Config.Metadata.html | 1158 +- .../jsdoc/Gp.Services.Config.Originator.html | 1158 +- current/jsdoc/Gp.Services.Config.Service.html | 1158 +- current/jsdoc/Gp.Services.Config.Style.html | 1158 +- .../jsdoc/Gp.Services.Config.Territory.html | 1158 +- .../jsdoc/Gp.Services.Config.Thematic.html | 1266 +- .../jsdoc/Gp.Services.Config.TileMatrix.html | 1920 +- .../Gp.Services.Config.TileMatrixLimit.html | 1158 +- .../Gp.Services.Config.TileMatrixSet.html | 1801 +- current/jsdoc/Gp.Services.Config.html | 763 +- current/jsdoc/Gp.Services.DefaultUrl.html | 702 +- .../Gp.Services.Geocode.GeocodedLocation.html | 702 +- current/jsdoc/Gp.Services.Geocode.html | 702 +- .../jsdoc/Gp.Services.GeocodeResponse.html | 702 +- .../jsdoc/Gp.Services.GetConfigInterface.html | 732 +- .../jsdoc/Gp.Services.IsoCurveResponse.html | 702 +- .../jsdoc/Gp.Services.ProcessIsoCurve.html | 702 +- current/jsdoc/Gp.Services.ReverseGeocode.html | 702 +- .../Gp.Services.Route.RouteInstruction.html | 702 +- current/jsdoc/Gp.Services.Route.html | 702 +- current/jsdoc/Gp.Services.RouteResponse.html | 702 +- current/jsdoc/global.html | 702 +- current/jsdoc/index.html | 702 +- current/jsdoc/module-Gp.html | 702 +- current/jsdoc/module-Helper.html | 702 +- current/jsdoc/module-Services.html | 702 +- current/jsdoc/module-XHR.html | 702 +- current/test-report/index.html | 2 +- current/test-report/index.json | 1084 +- latest | 2 +- v3.4.3/dist/GpServices-map.js | 893 + v3.4.3/dist/GpServices-src.js | 15988 ++++++++++++++++ v3.4.3/dist/GpServices.js | 30 + v3.4.3/jsdoc/Gp.BBox.html | 2848 +++ v3.4.3/jsdoc/Gp.Circle.html | 2825 +++ v3.4.3/jsdoc/Gp.Error.html | 2964 +++ v3.4.3/jsdoc/Gp.Point.html | 2802 +++ v3.4.3/jsdoc/Gp.Services.Alti.Elevation.html | 2850 +++ v3.4.3/jsdoc/Gp.Services.Alti.Measure.html | 2850 +++ v3.4.3/jsdoc/Gp.Services.Alti.html | 3593 ++++ v3.4.3/jsdoc/Gp.Services.AltiResponse.html | 2779 +++ ...rvices.AutoComplete.SuggestedLocation.html | 2943 +++ v3.4.3/jsdoc/Gp.Services.AutoComplete.html | 3620 ++++ .../Gp.Services.AutoCompleteResponse.html | 2779 +++ v3.4.3/jsdoc/Gp.Services.CommonService.html | 3384 ++++ v3.4.3/jsdoc/Gp.Services.Config.Base.html | 2730 +++ .../jsdoc/Gp.Services.Config.Constraint.html | 2873 +++ v3.4.3/jsdoc/Gp.Services.Config.Format.html | 2804 +++ v3.4.3/jsdoc/Gp.Services.Config.Layer.html | 3592 ++++ v3.4.3/jsdoc/Gp.Services.Config.Legend.html | 2827 +++ v3.4.3/jsdoc/Gp.Services.Config.Metadata.html | 2804 +++ .../jsdoc/Gp.Services.Config.Originator.html | 2873 +++ v3.4.3/jsdoc/Gp.Services.Config.Service.html | 2827 +++ v3.4.3/jsdoc/Gp.Services.Config.Style.html | 2850 +++ .../jsdoc/Gp.Services.Config.Territory.html | 3084 +++ v3.4.3/jsdoc/Gp.Services.Config.Thematic.html | 2730 +++ .../jsdoc/Gp.Services.Config.TileMatrix.html | 2919 +++ .../Gp.Services.Config.TileMatrixLimit.html | 2850 +++ .../Gp.Services.Config.TileMatrixSet.html | 2850 +++ v3.4.3/jsdoc/Gp.Services.Config.html | 3660 ++++ v3.4.3/jsdoc/Gp.Services.DefaultUrl.html | 3582 ++++ .../Gp.Services.Geocode.GeocodedLocation.html | 2906 +++ v3.4.3/jsdoc/Gp.Services.Geocode.html | 3809 ++++ v3.4.3/jsdoc/Gp.Services.GeocodeResponse.html | 2779 +++ .../jsdoc/Gp.Services.GetConfigInterface.html | 4579 +++++ .../jsdoc/Gp.Services.IsoCurveResponse.html | 2917 +++ v3.4.3/jsdoc/Gp.Services.ProcessIsoCurve.html | 4086 ++++ v3.4.3/jsdoc/Gp.Services.ReverseGeocode.html | 4329 +++++ .../Gp.Services.Route.RouteInstruction.html | 2885 +++ v3.4.3/jsdoc/Gp.Services.Route.html | 4215 ++++ v3.4.3/jsdoc/Gp.Services.RouteResponse.html | 2871 +++ .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20290 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41236 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23292 bytes v3.4.3/jsdoc/global.html | 3269 ++++ v3.4.3/jsdoc/images/entete.png | Bin 0 -> 119357 bytes v3.4.3/jsdoc/images/logoIGN.png | Bin 0 -> 7387 bytes v3.4.3/jsdoc/images/logoIGNsmall.png | Bin 0 -> 1010 bytes v3.4.3/jsdoc/images/showLeftMenu.png | Bin 0 -> 502 bytes v3.4.3/jsdoc/index.html | 2802 +++ v3.4.3/jsdoc/module-Gp.html | 2871 +++ v3.4.3/jsdoc/module-Helper.html | 3220 ++++ v3.4.3/jsdoc/module-Services.html | 8343 ++++++++ v3.4.3/jsdoc/module-XHR.html | 3137 +++ v3.4.3/jsdoc/scripts/bootstrap.min.js | 7 + v3.4.3/jsdoc/scripts/jquery.min.js | 6 + v3.4.3/jsdoc/scripts/jquery.min.map | 1 + v3.4.3/jsdoc/scripts/linenumber.js | 29 + v3.4.3/jsdoc/scripts/main.js | 73 + .../scripts/prettify/Apache-License-2.0.txt | 202 + v3.4.3/jsdoc/scripts/prettify/lang-css.js | 2 + v3.4.3/jsdoc/scripts/prettify/prettify.js | 28 + v3.4.3/jsdoc/scripts/underscore-min.js | 6 + v3.4.3/jsdoc/scripts/underscore-min.map | 1 + v3.4.3/jsdoc/styles/bootstrap.min.css | 7 + v3.4.3/jsdoc/styles/jaguar.css | 349 + v3.4.3/jsdoc/styles/prettify-jsdoc.css | 111 + v3.4.3/jsdoc/styles/prettify-tomorrow.css | 132 + v3.4.3/jsdoc/styles/sfd.css | 772 + 228 files changed, 198868 insertions(+), 7675 deletions(-) create mode 100644 current/jsdoc/Gp.Services.Config.Base.html create mode 100644 v3.4.3/dist/GpServices-map.js create mode 100644 v3.4.3/dist/GpServices-src.js create mode 100644 v3.4.3/dist/GpServices.js create mode 100644 v3.4.3/jsdoc/Gp.BBox.html create mode 100644 v3.4.3/jsdoc/Gp.Circle.html create mode 100644 v3.4.3/jsdoc/Gp.Error.html create mode 100644 v3.4.3/jsdoc/Gp.Point.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Alti.Elevation.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Alti.Measure.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Alti.html create mode 100644 v3.4.3/jsdoc/Gp.Services.AltiResponse.html create mode 100644 v3.4.3/jsdoc/Gp.Services.AutoComplete.SuggestedLocation.html create mode 100644 v3.4.3/jsdoc/Gp.Services.AutoComplete.html create mode 100644 v3.4.3/jsdoc/Gp.Services.AutoCompleteResponse.html create mode 100644 v3.4.3/jsdoc/Gp.Services.CommonService.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Base.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Constraint.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Format.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Layer.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Legend.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Metadata.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Originator.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Service.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Style.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Territory.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.Thematic.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.TileMatrix.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.TileMatrixLimit.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.TileMatrixSet.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Config.html create mode 100644 v3.4.3/jsdoc/Gp.Services.DefaultUrl.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Geocode.GeocodedLocation.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Geocode.html create mode 100644 v3.4.3/jsdoc/Gp.Services.GeocodeResponse.html create mode 100644 v3.4.3/jsdoc/Gp.Services.GetConfigInterface.html create mode 100644 v3.4.3/jsdoc/Gp.Services.IsoCurveResponse.html create mode 100644 v3.4.3/jsdoc/Gp.Services.ProcessIsoCurve.html create mode 100644 v3.4.3/jsdoc/Gp.Services.ReverseGeocode.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Route.RouteInstruction.html create mode 100644 v3.4.3/jsdoc/Gp.Services.Route.html create mode 100644 v3.4.3/jsdoc/Gp.Services.RouteResponse.html create mode 100644 v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.eot create mode 100644 v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.svg create mode 100644 v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.ttf create mode 100644 v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.woff create mode 100644 v3.4.3/jsdoc/global.html create mode 100644 v3.4.3/jsdoc/images/entete.png create mode 100644 v3.4.3/jsdoc/images/logoIGN.png create mode 100644 v3.4.3/jsdoc/images/logoIGNsmall.png create mode 100644 v3.4.3/jsdoc/images/showLeftMenu.png create mode 100644 v3.4.3/jsdoc/index.html create mode 100644 v3.4.3/jsdoc/module-Gp.html create mode 100644 v3.4.3/jsdoc/module-Helper.html create mode 100644 v3.4.3/jsdoc/module-Services.html create mode 100644 v3.4.3/jsdoc/module-XHR.html create mode 100644 v3.4.3/jsdoc/scripts/bootstrap.min.js create mode 100644 v3.4.3/jsdoc/scripts/jquery.min.js create mode 100644 v3.4.3/jsdoc/scripts/jquery.min.map create mode 100644 v3.4.3/jsdoc/scripts/linenumber.js create mode 100644 v3.4.3/jsdoc/scripts/main.js create mode 100644 v3.4.3/jsdoc/scripts/prettify/Apache-License-2.0.txt create mode 100644 v3.4.3/jsdoc/scripts/prettify/lang-css.js create mode 100644 v3.4.3/jsdoc/scripts/prettify/prettify.js create mode 100644 v3.4.3/jsdoc/scripts/underscore-min.js create mode 100644 v3.4.3/jsdoc/scripts/underscore-min.map create mode 100644 v3.4.3/jsdoc/styles/bootstrap.min.css create mode 100644 v3.4.3/jsdoc/styles/jaguar.css create mode 100644 v3.4.3/jsdoc/styles/prettify-jsdoc.css create mode 100644 v3.4.3/jsdoc/styles/prettify-tomorrow.css create mode 100644 v3.4.3/jsdoc/styles/sfd.css diff --git a/current/coverage/index.html b/current/coverage/index.html index b04a5f5f..969dd550 100644 --- a/current/coverage/index.html +++ b/current/coverage/index.html @@ -641,7 +641,7 @@

All files

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

+

Geoportal Resources Access API Reference

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

Namespace: Base

+ + + + +
+ + +

+ Gp.Services.Config.Base +

+ +

.Config.

+ + + + +
+
+ + + + +

A base layer

+

type {Boolean}

+ + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/current/jsdoc/Gp.Services.Config.Constraint.html b/current/jsdoc/Gp.Services.Config.Constraint.html index 008c3950..40141ada 100644 --- a/current/jsdoc/Gp.Services.Config.Constraint.html +++ b/current/jsdoc/Gp.Services.Config.Constraint.html @@ -547,24 +547,48 @@

Geoportal Resources Access< --> -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,34 +1505,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - @@ -1545,60 +1525,24 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Config.Style -
    Members
    - - - - - - - - - - - - - - - -
    ssl
    - @@ -1611,18 +1555,10 @@

    Geoportal Resources Access< --> -
    Methods
    - -
    url
    - @@ -1639,14 +1575,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Geocode.GeocodedLocation +
  • + Gp.Services.Config.Territory @@ -1689,14 +1625,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GeocodeResponse +
  • + Gp.Services.Config.Thematic @@ -1739,14 +1675,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.Config.TileMatrix @@ -1769,54 +1705,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - @@ -1833,14 +1725,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.IsoCurveResponse +
  • + Gp.Services.Config.TileMatrixLimit @@ -1883,14 +1775,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Route.RouteInstruction +
  • + Gp.Services.Config.TileMatrixSet @@ -1933,24 +1825,60 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.RouteResponse +
  • + Gp.Services.DefaultUrl +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + @@ -1963,10 +1891,18 @@

    Geoportal Resources Access< --> +
    Methods
    + + + @@ -1982,551 +1918,750 @@

    Geoportal Resources Access<

  • --> - - - - - -
    - -

    Namespace: Layer

    - - - - -
    - - -

    - Gp.Services.Config.Layer -

    - - +
  • + Gp.Services.Geocode + -
    -
    - - - - -

    Object used to describe geoportal resource (WMTS, WMS, WFS layers, geocoding resources or elevation service) parameters. Properties may be used or not depending on the resource type.

    - - - -
    - - -
    Properties:
    - -
    - - - - - - - - - - - - - - - - - - - - - - - +
    Members
    + - - - - - - - - - +
    Methods
    - + + - - - + + - - - - - - - - - - - - - - - - - + + + - - - - - - + + + + + +
  • + Gp.Services.IsoCurveResponse + + + + + + + - -String + + + + + + + +
  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + +
    Members
    -
  • - - - - - + - + + - - - - - - + + - - + + + + + + +
  • + Gp.Services.ReverseGeocode + + + +
    Members
    + -
  • - - - - - + - + + - - - - - - + - + + - - - - +
    Members
    + - - - - - - + - + + - + - + + - + + - + + - + - + + + + + + + + + + + + - -
    NameTypeDescription
    name + + + + + - -String + + - title - - -String + -

    Human readable name for the resource.

    description + - -String - - - + + + + + + +
  • + Gp.Services.Geocode.GeocodedLocation -String - + -
  • Unique resource Identifier (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS")

    quicklookUrl - - -String + + + + + - serviceParams + + + + + + +
  • + Gp.Services.GeocodeResponse -Object + + + + + + + + + + + -
  • Informations about the webservice that serves the resource (OpenLS, WFS, WMTS)

    -
    Properties
    - - - - - - - - - - - - - - - - - - - - - + + + + + +
  • + Gp.Services.GetConfigInterface + + + + + + + - -String + +
    Methods
    + + + -
  • - - - - - + - + + - + + + + + - - - - - -
    NameTypeDescription

    Web Service identifier ("OGC:WMTS", "OGC:OPENLS;ReverseGeocode", etc...)

    serverUrl + - -Object - - + -

    webservice version.

    -

    coordinates system ID used by default for the resource (WMS or WFS layer) or of the TileMatrixSet used by the WMTS layer.

    additionalProjections + - -Array.<String> + + - -Array.<Gp.Services.Config.Format> + +
    Methods
    + + -

    Formats availables for the resource.

    Informations about legends associated to the resource.

    metadata + - -Array.<Gp.Services.Config.Metadata> + + - -Array.<Gp.Services.Config.Style> + +
    Methods
    + + -

    Informations about styles availables for the resources (WMS, WFS and WMTS only).

    thematics + - -Array.<Gp.Services.Config.Thematic> - + + - + + + + + + +
  • + Gp.Services.Route -Gp.Services.Config.Constraint - + -
  • geographical constraint for the resource.

    constraints + - -Array.<Gp.Services.Config.Constraint> + + - -Array.<Gp.Services.Config.Originator> + +
    Methods
    + + + + + + + + + + + + +
  • + Gp.Services.Route.RouteInstruction -Object + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.RouteResponse + + + -
  • Informations associated to WMTS resources.

    -
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    Namespace: Layer

    + + + + +
    + + +

    + Gp.Services.Config.Layer +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe geoportal resource (WMTS, WMS, WFS layers, geocoding resources or elevation service) parameters. Properties may be used or not depending on the resource type.

    + + + +
    + + +
    Properties:
    + +
    @@ -2550,7 +2685,7 @@
    Properties
    - + + - + - - - - -
    tileMatrixSetLinkname @@ -2566,20 +2701,20 @@
    Properties
    -

    TileMatrixSet identifier used by the resource (see Gp.Services.Config.TileMatrixSet)

    name of the resource to use with the webservice that serves it (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS").

    tileMatrixSetLimitstitle -Gp.Services.Config.TileMatrixLimit +String @@ -2589,27 +2724,20 @@
    Properties
    -

    limits of the resource for that TileMAtrixSet.

    - -

    Human readable name for the resource.

    queryabledescription -Boolean +String @@ -2619,20 +2747,20 @@
    Properties
    -

    true if a getFeatureInfo request may be done for the resource (WMS or WMTS only).

    Resource description.

    hiddenlayerId -Boolean +String @@ -2642,20 +2770,20 @@
    Properties
    -

    true if the resource is not visible.

    Unique resource Identifier (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS")

    isAggregatequicklookUrl -Boolean +String @@ -2665,20 +2793,20 @@
    Properties
    -

    true if the resource is an aggregate of other resources (@see aggregatedLayers).

    Image URL for the resource.

    aggregatedLayersserviceParams -Array.<String> +Object @@ -2688,20 +2816,38 @@
    Properties
    -

    Layers IDs composing the being described aggregated layer.

    Informations about the webservice that serves the resource (OpenLS, WFS, WMTS)

    +
    Properties
    + + + + + + + + + + + + + + + + + + - + + - + - + + - + + - + + - + + - -
    NameTypeDescription
    apiKeysid -Array.<String> +String @@ -2711,14 +2857,14 @@
    Properties
    -

    Array of access keys that grant access to that resource.

    Web Service identifier ("OGC:WMTS", "OGC:OPENLS;ReverseGeocode", etc...)

    dimensionsserverUrl @@ -2734,32 +2880,14 @@
    Properties
    -

    Dimensions informations associated with the resource.

    -
    Properties
    - - - - - - - - - - - - - - - - - + + - - + + + + + + +
    NameTypeDescription

    Associative array mapping geoportal access key (keys) with their properties (URLs of the web service, with the geoportal access key).

    typeversion @@ -2775,14 +2903,21 @@
    Properties
    -

    webservice version.

    + +
    visibilityRangedefaultProjection @@ -2798,20 +2933,20 @@
    Properties
    -

    coordinates system ID used by default for the resource (WMS or WFS layer) or of the TileMatrixSet used by the WMTS layer.

    visibilityModeadditionalProjections -String +Array.<String> @@ -2821,20 +2956,20 @@
    Properties
    -

    additional coordinates systems IDs availables for the resource, others than the default one (see defaultProjection) (WMS and WFS layers only).

    noDataValueformats -String +Array.<Gp.Services.Config.Format> @@ -2844,20 +2979,20 @@
    Properties
    -

    Formats availables for the resource.

    geometricTypelegends -String +Array.<Gp.Services.Config.Legend> @@ -2867,1475 +3002,171 @@
    Properties
    -

    Informations about legends associated to the resource.

    + +
    metadata + + +Array.<Gp.Services.Config.Metadata> + +

    Informations about metadata associated to the resource.

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - - - - -
    - - - - - - - - - - - - - - -

    Methods

    - -
    + + -
    -
    -

    + styles - getAggregatedLayers(){Object} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 299 -
    - -
    - - -
    -
    - - -
    -

    Returns information about aggregated layers composing the being described layer, in case the resource is an aggregate of other resources.

    -
    - + + + + +Array.<Gp.Services.Config.Style> - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    + + + + + + + +

    Informations about styles availables for the resources (WMS, WFS and WMTS only).

    + + + + + + + thematics + + + + + +Array.<Gp.Services.Config.Thematic> - - - + + + + + + + +

    Informations about thematics associated to the resource.

    + + + + + + + globalConstraint + + + + + +Gp.Services.Config.Constraint - - - - - - - + + + + + + + +

    geographical constraint for the resource.

    + + + + + + + constraints + + + + + +Array.<Gp.Services.Config.Constraint> -
    Returns:
    -- Layers IDs composing the being described aggregated layer. -
    + + + + + + + +

    additionnal geographical constraints for the resource.

    + + + + + + + originators + + + + + +Array.<Gp.Services.Config.Originator> - - - -
    - -
    -
    -

    + - getBBOX(){Gp.BBox} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 127 -
    - -
    - - -
    -
    - - -
    -

    Returns the global BBOX

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- the layer global bounding box, expressed in CRS system. -
    - - - - - -
    - - - -
    -
    -

    - - getConstraints(){Array.<Gp.Services.Config.Constraint>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 272 -
    - -
    - - -
    -
    - - -
    -

    Returns information about geographical or temporal constraints for the resource

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Informations about geographical or temporal constraints for the resource -
    - - - - - -
    - - - -
    -
    -

    - - getDefaultFormat(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 252 -
    - -
    - - -
    -
    - - -
    -

    Returns layer default format

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Format mime-type. (eg. "image/jpeg") -
    - - - - - -
    - - - -
    -
    -

    - - getDefaultProjection(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 106 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer default projection

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- coordinates system ID used by default for the resource (WMS or WFS layer) or of the TileMatrixSet used by the WMTS layer. -
    - - - - - -
    - - - -
    -
    -

    - - getDefaultStyle(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 223 -
    - -
    - - -
    -
    - - -
    -

    Returns layer default style

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- style identifier (eg : "normal", "bdparcellaire", ...) -
    - - - - - -
    - - - -
    -
    -

    - - getDescription(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 79 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer description

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Resource description. -
    - - - - - -
    - - - -
    -
    -

    - - getDimensions(){Object} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 290 -
    - -
    - - -
    -
    - - -
    -

    Returns information about dimensions associated with this resource

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Dimensions informations associated with the resource. -
    - - - - - -
    - - - -
    -
    -

    - - getLayerId(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 88 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer identifier

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Unique resource Identifier (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS") -
    - - - - - -
    - - - -
    -
    -

    - - getLegends(){Array.<Gp.Services.Config.Legend>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 196 -
    - -
    - - -
    -
    - - -
    -

    Returns information about legends associated to the resource.

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Informations about legends associated to the resource. -
    - - - - - -
    - - - -
    -
    -

    - - getMaxScaleDenominator(){Number} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 151 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer maximum scale denominator

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- maximum scale denominator for this layer -
    - - - - - -
    - - - -
    -
    -

    - getMetadata(){Array.<Gp.Services.Config.Metadata>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 205 -
    - -
    - - -
    -
    - - -
    -

    Returns information about metadata associated to the resource.

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Informations about metadata associated to the resource. -
    - - - - - -
    - - - -
    -
    -

    - - getMinScaleDenominator(){Number} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 139 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer minimum scale denominator

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- minimum scale denominator for this layer -
    - - - - - -
    - - -
    -
    -

    - getName(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 61 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer name

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- name of the resource to use with the webservice that serves it (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS"). -
    - - - - - -
    - - - -
    -
    -

    - getOriginators(){Array.<Gp.Services.Config.Originator>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 281 -
    - -
    - - -
    -
    - - -
    -

    Returns information about originators of this resource

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Informations about originators of this resource -
    - - - - - -
    - - +

    Informations about originator of the resource.

    + + + + + -
    -
    -

    + wmtsOptions - getProjections(){Array.<String>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 115 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer projections

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- coordinates systems IDs availables for the resource, including the default one. -
    - - - - - -
    - - -
    -
    -

    + - getQuicklookUrl(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 97 -
    - -
    - - -
    -
    - - -
    -

    Returns the layer quicklookUrl

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Image URL for the resource. -
    - + +Object - - - -
    - -
    -
    -

    + - getServerUrl(apiKey){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 184 -
    - -
    - - -
    -
    - - -
    -

    Returns Geoportal server url for a given key

    -
    - - - - - - - - + + + + +

    Informations associated to WMTS resources.

    +
    Properties
    - +
    @@ -4346,22 +3177,123 @@

    + +

    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Description
    tileMatrixSetLink + + +String + + + +

    TileMatrixSet identifier used by the resource (see Gp.Services.Config.TileMatrixSet)

    tileMatrixSetLimits + + +Gp.Services.Config.TileMatrixLimit + + + +

    limits of the resource for that TileMAtrixSet.

    + + + + + + + + + queryable + + + + + +Boolean + + + + + + + + + +

    true if a getFeatureInfo request may be done for the resource (WMS or WMTS only).

    + + + + + + + hidden + + + + + +Boolean + + + + + + + + + +

    true if the resource is not visible.

    + + - apiKey + isAggregate -String +Boolean @@ -4369,424 +3301,225 @@

    - - -

    Access key to Geoportal platform

    + + +

    true if the resource is an aggregate of other resources (@see aggregatedLayers).

    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -

    Returns:
    -- general URL of the web service (with the geoportal access key) -
    - - - - - -
    - - + + -
    -
    -

    + aggregatedLayers - getServiceParams(){Object} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 174 -
    - -
    - - -
    -
    - - -
    -

    Returns information about the webservice that serves the resource

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Information about the webservice that serves the resource (OpenLS, WFS, WMTS) -
    - - - - - -
    - - -
    -
    -

    + - getStyles(){Array.<Gp.Services.Config.Style>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 214 -
    - -
    - - -
    -
    - - -
    -

    Returns information about styles availables for the resources (WMS, WFS and WMTS only).

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    Returns:
    -- Informations about styles availables for the resources (WMS, WFS and WMTS only). -
    - + +Array.<String> - - - -
    - -
    -
    -

    + - getThematics(){Array.<Gp.Services.Config.Thematic>} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 243 -
    - -
    - - -
    -
    - - -
    -

    Returns information about thematics associated to the resource.

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - + + + + +

    Layers IDs composing the being described aggregated layer.

    + + + + + + + apiKeys + + + + + +Array.<String> -
    Returns:
    -- Informations about thematics associated to the resource. -
    + + + + + + + +

    Array of access keys that grant access to that resource.

    + + + + + + + dimensions + + + + + +Object - - - -
    - -
    -
    -

    + - getTitle(){String} -

    - - -
    - Services/AutoConf/Response/model/Layer.js, line 70 -
    - -
    + + + + +

    Dimensions informations associated with the resource.

    +
    Properties
    - -
    -
    - - -
    -

    Returns the layer title

    -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - getTMSID(){String} - - - -
    - Services/AutoConf/Response/model/Layer.js, line 163 -
    - - - - - -
    - - -
    -

    Returns layer Tile Matrix Set identifier if exists

    -
    - + + + + +
    + + + + +
    NameTypeDescription
    type + + +String - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    + +
    visibilityRange + + +String - - - + +
    visibilityMode + + +String - - - - - - - + +
    noDataValue + + +String -
    Returns:
    -- Human readable name for the resource. -
    + +
    geometricType + + +String - - - - - -
    -
    -

    +

    - - - - - - - -
    + + + + + + +
    + @@ -4810,11 +3543,13 @@

    + + + + - - @@ -4822,19 +3557,9 @@

    - - -

    Returns:
    -- Tile Matrix Set identifier (for instance : "PM") -
    - - - - - @@ -4856,7 +3581,7 @@
    Returns:
    Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0
    - Documentation generated by JSDoc 3.6.11 on Fri May 12 2023 15:32:53 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time)
    diff --git a/current/jsdoc/Gp.Services.Config.Legend.html b/current/jsdoc/Gp.Services.Config.Legend.html index f9f02e97..6b598944 100644 --- a/current/jsdoc/Gp.Services.Config.Legend.html +++ b/current/jsdoc/Gp.Services.Config.Legend.html @@ -547,24 +547,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1495,6 +1499,392 @@

    Geoportal Resources Access< + + + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Geocode + + + + +
    Members
    + + + + + + + + + + + + + + + +
    Methods
    + + + + + + -
  • getMatrixIds
  • + + @@ -1545,59 +2005,123 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode.GeocodedLocation -
    Members
    - - + + + + - + + + - + + + - + + +
  • + + + +
  • + Gp.Services.GeocodeResponse + + + + -
  • AutoComplete
  • + + + -
  • Geocode
  • + + + -
  • ReverseGeocode
  • + + +

  • + + + +
  • + Gp.Services.GetConfigInterface + + + -
  • ssl
  • + + + @@ -1613,7 +2137,25 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + + + + + + + + + + + + + + + @@ -1639,14 +2199,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Geocode.GeocodedLocation +
  • + Gp.Services.IsoCurveResponse @@ -1689,24 +2249,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GeocodeResponse +
  • + Gp.Services.ProcessIsoCurve +
    Members
    + + + + + + + + + @@ -1719,10 +2299,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -1739,24 +2331,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.ReverseGeocode +
    Members
    + + + + + + + + + + + @@ -1771,25 +2387,17 @@

    Geoportal Resources Access<
    Methods
    - - - - - + - + - + - + - + - - - - - + @@ -1833,24 +2433,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.IsoCurveResponse +
  • + Gp.Services.Route +
    Members
    + + + + + + + + + + + @@ -1863,10 +2487,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -2002,6 +2638,8 @@

    Namespac

    Gp.Services.Config.Thematic

    + +

    .Config.

    -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,34 +1505,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - @@ -1545,60 +1525,24 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Config.Style -
    Members
    - - - - - - - - - - - - - - - -
    ssl
    - @@ -1611,18 +1555,10 @@

    Geoportal Resources Access< --> -
    Methods
    - -
    url
    - @@ -1639,14 +1575,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Geocode.GeocodedLocation +
  • + Gp.Services.Config.Territory @@ -1689,14 +1625,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GeocodeResponse +
  • + Gp.Services.Config.Thematic @@ -1739,14 +1675,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.Config.TileMatrix @@ -1769,54 +1705,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - @@ -1833,14 +1725,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.IsoCurveResponse +
  • + Gp.Services.Config.TileMatrixLimit @@ -1883,14 +1775,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Route.RouteInstruction +
  • + Gp.Services.Config.TileMatrixSet @@ -1933,24 +1825,60 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.RouteResponse +
  • + Gp.Services.DefaultUrl +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + @@ -1963,10 +1891,18 @@

    Geoportal Resources Access< --> +
    Methods
    + + + @@ -1982,715 +1918,935 @@

    Geoportal Resources Access<

  • --> - - - - - -
    - -

    Namespace: TileMatrix

    - - - - -
    - - -

    - Gp.Services.Config.TileMatrix -

    - - +
  • + Gp.Services.Geocode + -
    -
    - - - - -

    Object used to describe a TileMatrix.

    - - - -
    - - -
    Properties:
    - -
    - - - - - - - - - - - - - - - - - - - - - - - +
    Members
    + - - - - - - - - - + + - + + + + + + +
  • + Gp.Services.Geocode.GeocodedLocation + + + + + + + + + + -
  • + + + - - - - - - + + + + + + +
  • + Gp.Services.GetConfigInterface + + + + + + + - -Number + +
    Methods
    + + + -
  • - - - - - + - + + - - - - - -
    NameTypeDescription
    matrixId + + + + + - -String + + - matrixHeight - - -Number + +
    Methods
    + + + -

    Number of tiles from the top to the bottom of the matrix.

    scaleDenominator + + + + + + +
  • + Gp.Services.GeocodeResponse -Number + + + + + + + + + + + -
  • Scale denominator associated to that matrix.

    tile height in number of pixels

    tileWidth + + + + + + + - -Number - + + + + + + + + + +
  • + Gp.Services.IsoCurveResponse -Gp.Point + + + + + + + + + + + -
  • Top Left Corner Point of the matrix expressed in the tileMatrixSet coordinates system.

    -
    - - - - - - + +
  • + - - - - - - - - - - - - - - - + +
  • + Gp.Services.ProcessIsoCurve + + - - - - - - - - - - - - - - - - - - -

    Methods

    - -
    -
    -
    -

    +
    Members
    + + + + + + + + - getMatrixHeight(){Number} -

    - - -
    - Services/AutoConf/Response/model/TileMatrix.js, line 82 -
    - -
    - - -
    -
    - - -
    -

    Returns matrix height (number of tiles)

    -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    - - + - + - - - - - - - + + +
    Methods
    + + + + + -
    Returns:
    -- Number of tiles from the top to the bottom of the matrix. -
    + + + +
  • + - - - + +
  • + Gp.Services.ReverseGeocode + + - -
    -
    -

    +
    Members
    + + + + + + + + + + - getMatrixWidth(){Number} -

    - - -
    - Services/AutoConf/Response/model/TileMatrix.js, line 91 -
    - -
    - -
    -
    - - -
    -

    Returns matrix width (number of tiles)

    -
    - - - - - - - - -
    - - - - - + - - - - - - - - - - - - - - - -
    + - - - + + +
    Methods
    + + + + + + + + + + + + + - - - - - - - + + -
    Returns:
    -- Number of tiles from the left to the right of the matrix. -
    + +
  • + + + +
  • + Gp.Services.Route + + + +
    Members
    + + + + + + + + + + + - - - - - + - - -
    - - -
    -

    Returns Scale denominator associated to that matrix.

    -
    - + - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    + + +
    Methods
    + + + + + - - + - + + +
  • + - - - - - - + +
  • + Gp.Services.Route.RouteInstruction + + + -
    Returns:
    -- Scale denominator associated to that matrix. -
    + - - - - + - + + - getTileHeight(){Number} -
  • - - -
    - Services/AutoConf/Response/model/TileMatrix.js, line 64 -
    - - - - -
    - - -
    -

    Returns tile height of matrix

    -
    - + - - - - - - - -
    - - - - - + + +
  • + - - - - - - - - - - - - - - - + +
  • + Gp.Services.RouteResponse + + - - + - - - - - - - - + + -
    Returns:
    -- tile height in number of pixels -
    + + - - - - + - -
    -
    -

    + + +

  • + + + + + + +
    + +

    Namespace: TileMatrix

    -
    - Services/AutoConf/Response/model/TileMatrix.js, line 73 -
    - - + + +
    + + +

    + Gp.Services.Config.TileMatrix +

    + +

    .Config.

    - -
    - - -
    -

    Returns tile width of matrix

    -
    + +
    +
    - - - - + +

    Object used to describe a TileMatrix.

    + + +
    - - - +
    Properties:
    + +
    - - - - - - - - - - - - - - - -
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - getTopLeftCorner(){Gp.Point} - - - -
    - Services/AutoConf/Response/model/TileMatrix.js, line 46 -
    - - + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    matrixId + + +String - - - + +

    matrix Identifier

    matrixHeight + + +Number - - - - - - - + + +

    Number of tiles from the top to the bottom of the matrix.

    matrixWidth + + +Number + + + +

    Number of tiles from the left to the right of the matrix.

    scaleDenominator + + +Number -
    Returns:
    -- tile width in number of pixels -
    + +

    Scale denominator associated to that matrix.

    tileHeight + + +Number - - - - + +

    tile height in number of pixels

    tileWidth + + +Number + - -
    -
    -

    +

    tile width in number of pixels

    topLeftCorner + + +Gp.Point - - -
    - - -
    -

    Returns top left corner point of the matrix

    -
    - - - - - - - - -
    + +

    Top Left Corner Point of the matrix expressed in the tileMatrixSet coordinates system.

    +
    + @@ -2714,11 +2870,13 @@

    + + + +

    - - @@ -2726,19 +2884,9 @@

    - - -

    Returns:
    -- Top Left Corner Point of the matrix expressed in the tileMatrixSet coordinates system. -
    - - -
    - - @@ -2760,7 +2908,7 @@
    Returns:
    Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0
    - Documentation generated by JSDoc 3.6.11 on Fri May 12 2023 15:32:53 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time)
    diff --git a/current/jsdoc/Gp.Services.Config.TileMatrixLimit.html b/current/jsdoc/Gp.Services.Config.TileMatrixLimit.html index 0b143185..15816c5c 100644 --- a/current/jsdoc/Gp.Services.Config.TileMatrixLimit.html +++ b/current/jsdoc/Gp.Services.Config.TileMatrixLimit.html @@ -547,24 +547,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,33 +1505,403 @@

    Geoportal Resources Access< --> -
    Methods
    + + + + + + +

  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + - + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.DefaultUrl + + + + +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + + + + + + -
  • getMatrixIds
  • +
    Methods
    -
  • getProjection
  • + -
  • getResolutions
  • + + @@ -1545,14 +1919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Geocode @@ -1560,21 +1934,13 @@

    Geoportal Resources Access<
    Members
    - - - - - + - - - - - + - + -
    ssl
    + @@ -1583,21 +1949,13 @@

    Geoportal Resources Access< Members -
  • Alti
  • - -
  • AutoComplete
  • - -
  • AutoConf
  • - -
  • Geocode
  • - -
  • ProcessIsoCurve
  • +
  • CLASSNAME
  • -
  • ReverseGeocode
  • +
  • options
  • -
  • Route
  • +
  • request
  • -
  • ssl
  • +
  • response
  • --> @@ -1613,7 +1971,11 @@

    Geoportal Resources Access<
    Methods
    -
    url
    + + + + + @@ -1739,14 +2105,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.GetConfigInterface @@ -1771,25 +2137,25 @@

    Geoportal Resources Access<
    Methods
    - + - + - + - + - + - + - + - + - + - + @@ -1872,6 +2238,276 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.ProcessIsoCurve + + + + +
    Members
    + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + -
  • - Gp.Services.Alti.Elevation +
  • + Gp.Services.Alti +
    Members
    + + + + + + + + + + + @@ -577,10 +601,22 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + @@ -597,14 +633,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AltiResponse +
  • + Gp.Services.Alti.Elevation @@ -647,14 +683,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoComplete.SuggestedLocation +
  • + Gp.Services.Alti.Measure @@ -697,14 +733,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.AutoCompleteResponse +
  • + Gp.Services.AltiResponse @@ -747,24 +783,44 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Constraint +
  • + Gp.Services.AutoComplete +
    Members
    + + + + + + + + + @@ -777,10 +833,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -797,14 +869,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Format +
  • + Gp.Services.AutoComplete.SuggestedLocation @@ -847,14 +919,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Layer +
  • + Gp.Services.AutoCompleteResponse @@ -877,106 +949,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -993,24 +969,40 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Legend +
  • + Gp.Services.CommonService +
    Members
    + + + + + + + @@ -1043,24 +1035,48 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Metadata +
  • + Gp.Services.Config +
    Members
    + + + + + + + + + + + @@ -1073,10 +1089,26 @@

    Geoportal Resources Access< --> +
    Methods
    + + + + + + + @@ -1093,14 +1125,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Originator +
  • + Gp.Services.Config.Base @@ -1143,14 +1175,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Service +
  • + Gp.Services.Config.Constraint @@ -1193,14 +1225,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Style +
  • + Gp.Services.Config.Format @@ -1243,14 +1275,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Territory +
  • + Gp.Services.Config.Layer @@ -1293,14 +1325,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.Thematic +
  • + Gp.Services.Config.Legend @@ -1343,14 +1375,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrix +
  • + Gp.Services.Config.Metadata @@ -1373,38 +1405,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - @@ -1421,14 +1425,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixLimit +
  • + Gp.Services.Config.Originator @@ -1471,14 +1475,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Config.TileMatrixSet +
  • + Gp.Services.Config.Service @@ -1501,34 +1505,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - @@ -1545,60 +1525,24 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.DefaultUrl +
  • + Gp.Services.Config.Style -
    Members
    - - - - - - - - - - - - - - - -
    ssl
    - @@ -1611,18 +1555,10 @@

    Geoportal Resources Access< --> -
    Methods
    - -
    url
    - @@ -1639,14 +1575,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Geocode.GeocodedLocation +
  • + Gp.Services.Config.Territory @@ -1689,14 +1625,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GeocodeResponse +
  • + Gp.Services.Config.Thematic @@ -1739,14 +1675,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.GetConfigResponse +
  • + Gp.Services.Config.TileMatrix @@ -1769,54 +1705,10 @@

    Geoportal Resources Access< --> -
    Methods
    - - - - - - - - - - - - - - - - - - - - - @@ -1833,14 +1725,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.IsoCurveResponse +
  • + Gp.Services.Config.TileMatrixLimit @@ -1883,14 +1775,14 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.Route.RouteInstruction +
  • + Gp.Services.Config.TileMatrixSet @@ -1933,24 +1825,60 @@

    Geoportal Resources Access< --> -
  • - Gp.Services.RouteResponse +
  • + Gp.Services.DefaultUrl +
    Members
    + + + + + + + + + + + + + + + +
    ssl
    + @@ -1963,10 +1891,18 @@

    Geoportal Resources Access< --> +
    Methods
    + + + @@ -1982,565 +1918,866 @@

    Geoportal Resources Access<

  • --> - - - - - -
    - -

    Namespace: TileMatrixSet

    - - - - -
    - - -

    - Gp.Services.Config.TileMatrixSet -

    - - +
  • + Gp.Services.Geocode + -
    -
    - - - - -

    Object used to describe a TileMatrix set (for WMTS use).

    - - - -
    - - -
    Properties:
    - -
    - - - - - - - - - - - - - - - - - - - - - - - +
    Members
    + - - - - - - - - - +
    Methods
    - + + - - - - - - + + + + + + +
  • + Gp.Services.Geocode.GeocodedLocation + + + + + + + - -String + + + + + + +
  • + + +
  • + Gp.Services.GeocodeResponse + + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - -

    Methods

    - -
    + + + - getMatrixIds(){Array} - - - -
    - Services/AutoConf/Response/model/TileMatrixSet.js, line 46 -
    - - - - -
    - - -
    -

    Returns Tile Matrix Set identifiers

    -
    - - - - - - - - -
    - - - - - + + - - - - - - - - - - - - - - - -
    + - - + + +
  • + + +
  • + Gp.Services.GetConfigInterface + + - - - - - - - + -
    Returns:
    -- Array of IDs for each TileMatrix of the set. -
    + + - - - - - + + +
    Methods
    + + + + + + + + + + + + + + + + + + + + - getProjection(){String} - - - -
    - Services/AutoConf/Response/model/TileMatrixSet.js, line 55 -
    - - - - -
    - - -
    -

    Returns Tile Matrix Set projection

    -
    - + - - - - - - - -
    - - - - - + + +
  • + - - - - - - - - - - - - - - - + +
  • + Gp.Services.IsoCurveResponse + + - - + - - - - - - - - + + + + + + -
    Returns:
    -- Identifier of the Cordinates System used for the tileMatrixSet. -
    + + + +
  • + - - - + +
  • + Gp.Services.ProcessIsoCurve + + - -
    -
    -

    +
    Members
    + + + + + + + + - getResolutions(){Array} -

    - - -
    - Services/AutoConf/Response/model/TileMatrixSet.js, line 37 -
    - -
    - -
    -
    - - -
    -

    Returns Tile Matrix Set resolutions

    -
    - - - - - - - - -
    - - - - - + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + +
  • + Gp.Services.ReverseGeocode + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + + + + + + + + + +
  • + + +
  • + Gp.Services.Route + + + + +
    Members
    + + + + + + + + + + + + + + + + + + + + +
    Methods
    + + + + + + + + + + + +
  • + + +
  • + Gp.Services.Route.RouteInstruction + + + + + + + + + + + + + + + + + + + +
  • + - - - - - - - - - - - - + +
  • + Gp.Services.RouteResponse + + - - + - - - - - - - - + + -
    Returns:
    -- Array of resolutions (in meter per pixel) applying for each TileMatrix of the set. -
    + + - - - - + - -
    -
    -

    + + +

  • + + + + + + +
    + +

    Namespace: TileMatrixSet

    -
    - Services/AutoConf/Response/model/TileMatrixSet.js, line 64 -
    - - - - -
    - - -
    -

    Returns Tile Matrices descriptions.

    -
    - + +
    + + +

    + Gp.Services.Config.TileMatrixSet +

    + +

    .Config.

    + + +
    +
    - - + +

    Object used to describe a TileMatrix set (for WMTS use).

    + + +
    - - - +
    Properties:
    + +
    - - - - - - - - - - - - - - - -
    +
    NameTypeDescription
    matrixIds + + + + + - -Array.<String> + + - tileMatrices - - -Array.<Gp.Services.Config.TileMatrix> + -

    Array of TileMatrix descriptions.

    nativeResolutions + - -Array.<Float> - + + -

    Array of resolutions (in meter per pixel) applying for each TileMatrix of the set.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - getTopLeftCorner(){Gp.Point} - - - -
    - Services/AutoConf/Response/model/TileMatrixSet.js, line 73 -
    + + + + + + + + +
    NameTypeDescription
    matrixIds + + +Array.<String> - - - + +

    Array of IDs for each TileMatrix of the set.

    tileMatrices + + +Array.<Gp.Services.Config.TileMatrix> - - - - - - - + +

    Array of TileMatrix descriptions.

    nativeResolutions + + +Array.<Float> -
    Returns:
    -- Array of TileMatrix descriptions. -
    + +

    Array of resolutions (in meter per pixel) applying for each TileMatrix of the set.

    projection + + +String - - - - - -
    -
    -

    +

    Identifier of the Cordinates System used for the tileMatrixSet.

    +
    -
    - - - -
    - - -
    -

    Returns top left corner point of matrices

    -
    - - - - - - - - - -
    @@ -2564,11 +2801,13 @@

    + + + + - - @@ -2576,19 +2815,9 @@

    - - -

    Returns:
    -- Top Left Corner Point of TMS matrices, expressed in the tileMatrixSet coordinates system. -
    - - -
    - - @@ -2610,7 +2839,7 @@
    Returns:
    Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0
    - Documentation generated by JSDoc 3.6.11 on Fri May 12 2023 15:32:53 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time)
    diff --git a/current/jsdoc/Gp.Services.Config.html b/current/jsdoc/Gp.Services.Config.html index 0a9a1d7a..39e54b98 100644 --- a/current/jsdoc/Gp.Services.Config.html +++ b/current/jsdoc/Gp.Services.Config.html @@ -1114,6 +1114,706 @@

    Geoportal Resources Access< + +

  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Base + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Constraint + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Format + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Layer + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Legend + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Metadata + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Originator + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Service + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Style + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Territory + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.Thematic + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrix + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixLimit + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • + Gp.Services.Config.TileMatrixSet + + + + + + + + + + + + + + + + + + \");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL25vZGVfbW9kdWxlcy9AeG1sZG9tL3htbGRvbS9saWIvZW50aXRpZXMuanM/YjMwZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsdUVBQWU7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AeG1sZG9tL3htbGRvbS9saWIvZW50aXRpZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBmcmVlemUgPSByZXF1aXJlKCcuL2NvbnZlbnRpb25zJykuZnJlZXplO1xuXG4vKipcbiAqIFRoZSBlbnRpdGllcyB0aGF0IGFyZSBwcmVkZWZpbmVkIGluIGV2ZXJ5IFhNTCBkb2N1bWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwxMS0yMDA2MDgxNi8jc2VjLXByZWRlZmluZWQtZW50IFczQyBYTUwgMS4xXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy14bWwtMjAwODExMjYvI3NlYy1wcmVkZWZpbmVkLWVudCBXM0MgWE1MIDEuMFxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX1hNTF9hbmRfSFRNTF9jaGFyYWN0ZXJfZW50aXR5X3JlZmVyZW5jZXMjUHJlZGVmaW5lZF9lbnRpdGllc19pbl9YTUwgV2lraXBlZGlhXG4gKi9cbmV4cG9ydHMuWE1MX0VOVElUSUVTID0gZnJlZXplKHtcblx0YW1wOiAnJicsXG5cdGFwb3M6IFwiJ1wiLFxuXHRndDogJz4nLFxuXHRsdDogJzwnLFxuXHRxdW90OiAnXCInLFxufSk7XG5cbi8qKlxuICogQSBtYXAgb2YgYWxsIGVudGl0aWVzIHRoYXQgYXJlIGRldGVjdGVkIGluIGFuIEhUTUwgZG9jdW1lbnQuXG4gKiBUaGV5IGNvbnRhaW4gYWxsIGVudHJpZXMgZnJvbSBgWE1MX0VOVElUSUVTYC5cbiAqXG4gKiBAc2VlIFhNTF9FTlRJVElFU1xuICogQHNlZSBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5nXG4gKiBAc2VlIERPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVIVE1MRG9jdW1lbnRcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMgV0hBVFdHIEhUTUwoNSkgU3BlY1xuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2VudGl0aWVzLmpzb24gSlNPTlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveG1sLWVudGl0eS1uYW1lcy8gVzNDIFhNTCBFbnRpdHkgTmFtZXNcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw0L3NnbWwvZW50aXRpZXMuaHRtbCBXM0MgSFRNTDQvU0dNTFxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX1hNTF9hbmRfSFRNTF9jaGFyYWN0ZXJfZW50aXR5X3JlZmVyZW5jZXMjQ2hhcmFjdGVyX2VudGl0eV9yZWZlcmVuY2VzX2luX0hUTUwgV2lraXBlZGlhIChIVE1MKVxuICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX1hNTF9hbmRfSFRNTF9jaGFyYWN0ZXJfZW50aXR5X3JlZmVyZW5jZXMjRW50aXRpZXNfcmVwcmVzZW50aW5nX3NwZWNpYWxfY2hhcmFjdGVyc19pbl9YSFRNTCBXaWtwZWRpYSAoWEhUTUwpXG4gKi9cbmV4cG9ydHMuSFRNTF9FTlRJVElFUyA9IGZyZWV6ZSh7XG5cdEFhY3V0ZTogJ1xcdTAwQzEnLFxuXHRhYWN1dGU6ICdcXHUwMEUxJyxcblx0QWJyZXZlOiAnXFx1MDEwMicsXG5cdGFicmV2ZTogJ1xcdTAxMDMnLFxuXHRhYzogJ1xcdTIyM0UnLFxuXHRhY2Q6ICdcXHUyMjNGJyxcblx0YWNFOiAnXFx1MjIzRVxcdTAzMzMnLFxuXHRBY2lyYzogJ1xcdTAwQzInLFxuXHRhY2lyYzogJ1xcdTAwRTInLFxuXHRhY3V0ZTogJ1xcdTAwQjQnLFxuXHRBY3k6ICdcXHUwNDEwJyxcblx0YWN5OiAnXFx1MDQzMCcsXG5cdEFFbGlnOiAnXFx1MDBDNicsXG5cdGFlbGlnOiAnXFx1MDBFNicsXG5cdGFmOiAnXFx1MjA2MScsXG5cdEFmcjogJ1xcdUQ4MzVcXHVERDA0Jyxcblx0YWZyOiAnXFx1RDgzNVxcdUREMUUnLFxuXHRBZ3JhdmU6ICdcXHUwMEMwJyxcblx0YWdyYXZlOiAnXFx1MDBFMCcsXG5cdGFsZWZzeW06ICdcXHUyMTM1Jyxcblx0YWxlcGg6ICdcXHUyMTM1Jyxcblx0QWxwaGE6ICdcXHUwMzkxJyxcblx0YWxwaGE6ICdcXHUwM0IxJyxcblx0QW1hY3I6ICdcXHUwMTAwJyxcblx0YW1hY3I6ICdcXHUwMTAxJyxcblx0YW1hbGc6ICdcXHUyQTNGJyxcblx0QU1QOiAnXFx1MDAyNicsXG5cdGFtcDogJ1xcdTAwMjYnLFxuXHRBbmQ6ICdcXHUyQTUzJyxcblx0YW5kOiAnXFx1MjIyNycsXG5cdGFuZGFuZDogJ1xcdTJBNTUnLFxuXHRhbmRkOiAnXFx1MkE1QycsXG5cdGFuZHNsb3BlOiAnXFx1MkE1OCcsXG5cdGFuZHY6ICdcXHUyQTVBJyxcblx0YW5nOiAnXFx1MjIyMCcsXG5cdGFuZ2U6ICdcXHUyOUE0Jyxcblx0YW5nbGU6ICdcXHUyMjIwJyxcblx0YW5nbXNkOiAnXFx1MjIyMScsXG5cdGFuZ21zZGFhOiAnXFx1MjlBOCcsXG5cdGFuZ21zZGFiOiAnXFx1MjlBOScsXG5cdGFuZ21zZGFjOiAnXFx1MjlBQScsXG5cdGFuZ21zZGFkOiAnXFx1MjlBQicsXG5cdGFuZ21zZGFlOiAnXFx1MjlBQycsXG5cdGFuZ21zZGFmOiAnXFx1MjlBRCcsXG5cdGFuZ21zZGFnOiAnXFx1MjlBRScsXG5cdGFuZ21zZGFoOiAnXFx1MjlBRicsXG5cdGFuZ3J0OiAnXFx1MjIxRicsXG5cdGFuZ3J0dmI6ICdcXHUyMkJFJyxcblx0YW5ncnR2YmQ6ICdcXHUyOTlEJyxcblx0YW5nc3BoOiAnXFx1MjIyMicsXG5cdGFuZ3N0OiAnXFx1MDBDNScsXG5cdGFuZ3phcnI6ICdcXHUyMzdDJyxcblx0QW9nb246ICdcXHUwMTA0Jyxcblx0YW9nb246ICdcXHUwMTA1Jyxcblx0QW9wZjogJ1xcdUQ4MzVcXHVERDM4Jyxcblx0YW9wZjogJ1xcdUQ4MzVcXHVERDUyJyxcblx0YXA6ICdcXHUyMjQ4Jyxcblx0YXBhY2lyOiAnXFx1MkE2RicsXG5cdGFwRTogJ1xcdTJBNzAnLFxuXHRhcGU6ICdcXHUyMjRBJyxcblx0YXBpZDogJ1xcdTIyNEInLFxuXHRhcG9zOiAnXFx1MDAyNycsXG5cdEFwcGx5RnVuY3Rpb246ICdcXHUyMDYxJyxcblx0YXBwcm94OiAnXFx1MjI0OCcsXG5cdGFwcHJveGVxOiAnXFx1MjI0QScsXG5cdEFyaW5nOiAnXFx1MDBDNScsXG5cdGFyaW5nOiAnXFx1MDBFNScsXG5cdEFzY3I6ICdcXHVEODM1XFx1REM5QycsXG5cdGFzY3I6ICdcXHVEODM1XFx1RENCNicsXG5cdEFzc2lnbjogJ1xcdTIyNTQnLFxuXHRhc3Q6ICdcXHUwMDJBJyxcblx0YXN5bXA6ICdcXHUyMjQ4Jyxcblx0YXN5bXBlcTogJ1xcdTIyNEQnLFxuXHRBdGlsZGU6ICdcXHUwMEMzJyxcblx0YXRpbGRlOiAnXFx1MDBFMycsXG5cdEF1bWw6ICdcXHUwMEM0Jyxcblx0YXVtbDogJ1xcdTAwRTQnLFxuXHRhd2NvbmludDogJ1xcdTIyMzMnLFxuXHRhd2ludDogJ1xcdTJBMTEnLFxuXHRiYWNrY29uZzogJ1xcdTIyNEMnLFxuXHRiYWNrZXBzaWxvbjogJ1xcdTAzRjYnLFxuXHRiYWNrcHJpbWU6ICdcXHUyMDM1Jyxcblx0YmFja3NpbTogJ1xcdTIyM0QnLFxuXHRiYWNrc2ltZXE6ICdcXHUyMkNEJyxcblx0QmFja3NsYXNoOiAnXFx1MjIxNicsXG5cdEJhcnY6ICdcXHUyQUU3Jyxcblx0YmFydmVlOiAnXFx1MjJCRCcsXG5cdEJhcndlZDogJ1xcdTIzMDYnLFxuXHRiYXJ3ZWQ6ICdcXHUyMzA1Jyxcblx0YmFyd2VkZ2U6ICdcXHUyMzA1Jyxcblx0YmJyazogJ1xcdTIzQjUnLFxuXHRiYnJrdGJyazogJ1xcdTIzQjYnLFxuXHRiY29uZzogJ1xcdTIyNEMnLFxuXHRCY3k6ICdcXHUwNDExJyxcblx0YmN5OiAnXFx1MDQzMScsXG5cdGJkcXVvOiAnXFx1MjAxRScsXG5cdGJlY2F1czogJ1xcdTIyMzUnLFxuXHRCZWNhdXNlOiAnXFx1MjIzNScsXG5cdGJlY2F1c2U6ICdcXHUyMjM1Jyxcblx0YmVtcHR5djogJ1xcdTI5QjAnLFxuXHRiZXBzaTogJ1xcdTAzRjYnLFxuXHRiZXJub3U6ICdcXHUyMTJDJyxcblx0QmVybm91bGxpczogJ1xcdTIxMkMnLFxuXHRCZXRhOiAnXFx1MDM5MicsXG5cdGJldGE6ICdcXHUwM0IyJyxcblx0YmV0aDogJ1xcdTIxMzYnLFxuXHRiZXR3ZWVuOiAnXFx1MjI2QycsXG5cdEJmcjogJ1xcdUQ4MzVcXHVERDA1Jyxcblx0YmZyOiAnXFx1RDgzNVxcdUREMUYnLFxuXHRiaWdjYXA6ICdcXHUyMkMyJyxcblx0YmlnY2lyYzogJ1xcdTI1RUYnLFxuXHRiaWdjdXA6ICdcXHUyMkMzJyxcblx0Ymlnb2RvdDogJ1xcdTJBMDAnLFxuXHRiaWdvcGx1czogJ1xcdTJBMDEnLFxuXHRiaWdvdGltZXM6ICdcXHUyQTAyJyxcblx0Ymlnc3FjdXA6ICdcXHUyQTA2Jyxcblx0Ymlnc3RhcjogJ1xcdTI2MDUnLFxuXHRiaWd0cmlhbmdsZWRvd246ICdcXHUyNUJEJyxcblx0YmlndHJpYW5nbGV1cDogJ1xcdTI1QjMnLFxuXHRiaWd1cGx1czogJ1xcdTJBMDQnLFxuXHRiaWd2ZWU6ICdcXHUyMkMxJyxcblx0Ymlnd2VkZ2U6ICdcXHUyMkMwJyxcblx0Ymthcm93OiAnXFx1MjkwRCcsXG5cdGJsYWNrbG96ZW5nZTogJ1xcdTI5RUInLFxuXHRibGFja3NxdWFyZTogJ1xcdTI1QUEnLFxuXHRibGFja3RyaWFuZ2xlOiAnXFx1MjVCNCcsXG5cdGJsYWNrdHJpYW5nbGVkb3duOiAnXFx1MjVCRScsXG5cdGJsYWNrdHJpYW5nbGVsZWZ0OiAnXFx1MjVDMicsXG5cdGJsYWNrdHJpYW5nbGVyaWdodDogJ1xcdTI1QjgnLFxuXHRibGFuazogJ1xcdTI0MjMnLFxuXHRibGsxMjogJ1xcdTI1OTInLFxuXHRibGsxNDogJ1xcdTI1OTEnLFxuXHRibGszNDogJ1xcdTI1OTMnLFxuXHRibG9jazogJ1xcdTI1ODgnLFxuXHRibmU6ICdcXHUwMDNEXFx1MjBFNScsXG5cdGJuZXF1aXY6ICdcXHUyMjYxXFx1MjBFNScsXG5cdGJOb3Q6ICdcXHUyQUVEJyxcblx0Ym5vdDogJ1xcdTIzMTAnLFxuXHRCb3BmOiAnXFx1RDgzNVxcdUREMzknLFxuXHRib3BmOiAnXFx1RDgzNVxcdURENTMnLFxuXHRib3Q6ICdcXHUyMkE1Jyxcblx0Ym90dG9tOiAnXFx1MjJBNScsXG5cdGJvd3RpZTogJ1xcdTIyQzgnLFxuXHRib3hib3g6ICdcXHUyOUM5Jyxcblx0Ym94REw6ICdcXHUyNTU3Jyxcblx0Ym94RGw6ICdcXHUyNTU2Jyxcblx0Ym94ZEw6ICdcXHUyNTU1Jyxcblx0Ym94ZGw6ICdcXHUyNTEwJyxcblx0Ym94RFI6ICdcXHUyNTU0Jyxcblx0Ym94RHI6ICdcXHUyNTUzJyxcblx0Ym94ZFI6ICdcXHUyNTUyJyxcblx0Ym94ZHI6ICdcXHUyNTBDJyxcblx0Ym94SDogJ1xcdTI1NTAnLFxuXHRib3hoOiAnXFx1MjUwMCcsXG5cdGJveEhEOiAnXFx1MjU2NicsXG5cdGJveEhkOiAnXFx1MjU2NCcsXG5cdGJveGhEOiAnXFx1MjU2NScsXG5cdGJveGhkOiAnXFx1MjUyQycsXG5cdGJveEhVOiAnXFx1MjU2OScsXG5cdGJveEh1OiAnXFx1MjU2NycsXG5cdGJveGhVOiAnXFx1MjU2OCcsXG5cdGJveGh1OiAnXFx1MjUzNCcsXG5cdGJveG1pbnVzOiAnXFx1MjI5RicsXG5cdGJveHBsdXM6ICdcXHUyMjlFJyxcblx0Ym94dGltZXM6ICdcXHUyMkEwJyxcblx0Ym94VUw6ICdcXHUyNTVEJyxcblx0Ym94VWw6ICdcXHUyNTVDJyxcblx0Ym94dUw6ICdcXHUyNTVCJyxcblx0Ym94dWw6ICdcXHUyNTE4Jyxcblx0Ym94VVI6ICdcXHUyNTVBJyxcblx0Ym94VXI6ICdcXHUyNTU5Jyxcblx0Ym94dVI6ICdcXHUyNTU4Jyxcblx0Ym94dXI6ICdcXHUyNTE0Jyxcblx0Ym94VjogJ1xcdTI1NTEnLFxuXHRib3h2OiAnXFx1MjUwMicsXG5cdGJveFZIOiAnXFx1MjU2QycsXG5cdGJveFZoOiAnXFx1MjU2QicsXG5cdGJveHZIOiAnXFx1MjU2QScsXG5cdGJveHZoOiAnXFx1MjUzQycsXG5cdGJveFZMOiAnXFx1MjU2MycsXG5cdGJveFZsOiAnXFx1MjU2MicsXG5cdGJveHZMOiAnXFx1MjU2MScsXG5cdGJveHZsOiAnXFx1MjUyNCcsXG5cdGJveFZSOiAnXFx1MjU2MCcsXG5cdGJveFZyOiAnXFx1MjU1RicsXG5cdGJveHZSOiAnXFx1MjU1RScsXG5cdGJveHZyOiAnXFx1MjUxQycsXG5cdGJwcmltZTogJ1xcdTIwMzUnLFxuXHRCcmV2ZTogJ1xcdTAyRDgnLFxuXHRicmV2ZTogJ1xcdTAyRDgnLFxuXHRicnZiYXI6ICdcXHUwMEE2Jyxcblx0QnNjcjogJ1xcdTIxMkMnLFxuXHRic2NyOiAnXFx1RDgzNVxcdURDQjcnLFxuXHRic2VtaTogJ1xcdTIwNEYnLFxuXHRic2ltOiAnXFx1MjIzRCcsXG5cdGJzaW1lOiAnXFx1MjJDRCcsXG5cdGJzb2w6ICdcXHUwMDVDJyxcblx0YnNvbGI6ICdcXHUyOUM1Jyxcblx0YnNvbGhzdWI6ICdcXHUyN0M4Jyxcblx0YnVsbDogJ1xcdTIwMjInLFxuXHRidWxsZXQ6ICdcXHUyMDIyJyxcblx0YnVtcDogJ1xcdTIyNEUnLFxuXHRidW1wRTogJ1xcdTJBQUUnLFxuXHRidW1wZTogJ1xcdTIyNEYnLFxuXHRCdW1wZXE6ICdcXHUyMjRFJyxcblx0YnVtcGVxOiAnXFx1MjI0RicsXG5cdENhY3V0ZTogJ1xcdTAxMDYnLFxuXHRjYWN1dGU6ICdcXHUwMTA3Jyxcblx0Q2FwOiAnXFx1MjJEMicsXG5cdGNhcDogJ1xcdTIyMjknLFxuXHRjYXBhbmQ6ICdcXHUyQTQ0Jyxcblx0Y2FwYnJjdXA6ICdcXHUyQTQ5Jyxcblx0Y2FwY2FwOiAnXFx1MkE0QicsXG5cdGNhcGN1cDogJ1xcdTJBNDcnLFxuXHRjYXBkb3Q6ICdcXHUyQTQwJyxcblx0Q2FwaXRhbERpZmZlcmVudGlhbEQ6ICdcXHUyMTQ1Jyxcblx0Y2FwczogJ1xcdTIyMjlcXHVGRTAwJyxcblx0Y2FyZXQ6ICdcXHUyMDQxJyxcblx0Y2Fyb246ICdcXHUwMkM3Jyxcblx0Q2F5bGV5czogJ1xcdTIxMkQnLFxuXHRjY2FwczogJ1xcdTJBNEQnLFxuXHRDY2Fyb246ICdcXHUwMTBDJyxcblx0Y2Nhcm9uOiAnXFx1MDEwRCcsXG5cdENjZWRpbDogJ1xcdTAwQzcnLFxuXHRjY2VkaWw6ICdcXHUwMEU3Jyxcblx0Q2NpcmM6ICdcXHUwMTA4Jyxcblx0Y2NpcmM6ICdcXHUwMTA5Jyxcblx0Q2NvbmludDogJ1xcdTIyMzAnLFxuXHRjY3VwczogJ1xcdTJBNEMnLFxuXHRjY3Vwc3NtOiAnXFx1MkE1MCcsXG5cdENkb3Q6ICdcXHUwMTBBJyxcblx0Y2RvdDogJ1xcdTAxMEInLFxuXHRjZWRpbDogJ1xcdTAwQjgnLFxuXHRDZWRpbGxhOiAnXFx1MDBCOCcsXG5cdGNlbXB0eXY6ICdcXHUyOUIyJyxcblx0Y2VudDogJ1xcdTAwQTInLFxuXHRDZW50ZXJEb3Q6ICdcXHUwMEI3Jyxcblx0Y2VudGVyZG90OiAnXFx1MDBCNycsXG5cdENmcjogJ1xcdTIxMkQnLFxuXHRjZnI6ICdcXHVEODM1XFx1REQyMCcsXG5cdENIY3k6ICdcXHUwNDI3Jyxcblx0Y2hjeTogJ1xcdTA0NDcnLFxuXHRjaGVjazogJ1xcdTI3MTMnLFxuXHRjaGVja21hcms6ICdcXHUyNzEzJyxcblx0Q2hpOiAnXFx1MDNBNycsXG5cdGNoaTogJ1xcdTAzQzcnLFxuXHRjaXI6ICdcXHUyNUNCJyxcblx0Y2lyYzogJ1xcdTAyQzYnLFxuXHRjaXJjZXE6ICdcXHUyMjU3Jyxcblx0Y2lyY2xlYXJyb3dsZWZ0OiAnXFx1MjFCQScsXG5cdGNpcmNsZWFycm93cmlnaHQ6ICdcXHUyMUJCJyxcblx0Y2lyY2xlZGFzdDogJ1xcdTIyOUInLFxuXHRjaXJjbGVkY2lyYzogJ1xcdTIyOUEnLFxuXHRjaXJjbGVkZGFzaDogJ1xcdTIyOUQnLFxuXHRDaXJjbGVEb3Q6ICdcXHUyMjk5Jyxcblx0Y2lyY2xlZFI6ICdcXHUwMEFFJyxcblx0Y2lyY2xlZFM6ICdcXHUyNEM4Jyxcblx0Q2lyY2xlTWludXM6ICdcXHUyMjk2Jyxcblx0Q2lyY2xlUGx1czogJ1xcdTIyOTUnLFxuXHRDaXJjbGVUaW1lczogJ1xcdTIyOTcnLFxuXHRjaXJFOiAnXFx1MjlDMycsXG5cdGNpcmU6ICdcXHUyMjU3Jyxcblx0Y2lyZm5pbnQ6ICdcXHUyQTEwJyxcblx0Y2lybWlkOiAnXFx1MkFFRicsXG5cdGNpcnNjaXI6ICdcXHUyOUMyJyxcblx0Q2xvY2t3aXNlQ29udG91ckludGVncmFsOiAnXFx1MjIzMicsXG5cdENsb3NlQ3VybHlEb3VibGVRdW90ZTogJ1xcdTIwMUQnLFxuXHRDbG9zZUN1cmx5UXVvdGU6ICdcXHUyMDE5Jyxcblx0Y2x1YnM6ICdcXHUyNjYzJyxcblx0Y2x1YnN1aXQ6ICdcXHUyNjYzJyxcblx0Q29sb246ICdcXHUyMjM3Jyxcblx0Y29sb246ICdcXHUwMDNBJyxcblx0Q29sb25lOiAnXFx1MkE3NCcsXG5cdGNvbG9uZTogJ1xcdTIyNTQnLFxuXHRjb2xvbmVxOiAnXFx1MjI1NCcsXG5cdGNvbW1hOiAnXFx1MDAyQycsXG5cdGNvbW1hdDogJ1xcdTAwNDAnLFxuXHRjb21wOiAnXFx1MjIwMScsXG5cdGNvbXBmbjogJ1xcdTIyMTgnLFxuXHRjb21wbGVtZW50OiAnXFx1MjIwMScsXG5cdGNvbXBsZXhlczogJ1xcdTIxMDInLFxuXHRjb25nOiAnXFx1MjI0NScsXG5cdGNvbmdkb3Q6ICdcXHUyQTZEJyxcblx0Q29uZ3J1ZW50OiAnXFx1MjI2MScsXG5cdENvbmludDogJ1xcdTIyMkYnLFxuXHRjb25pbnQ6ICdcXHUyMjJFJyxcblx0Q29udG91ckludGVncmFsOiAnXFx1MjIyRScsXG5cdENvcGY6ICdcXHUyMTAyJyxcblx0Y29wZjogJ1xcdUQ4MzVcXHVERDU0Jyxcblx0Y29wcm9kOiAnXFx1MjIxMCcsXG5cdENvcHJvZHVjdDogJ1xcdTIyMTAnLFxuXHRDT1BZOiAnXFx1MDBBOScsXG5cdGNvcHk6ICdcXHUwMEE5Jyxcblx0Y29weXNyOiAnXFx1MjExNycsXG5cdENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw6ICdcXHUyMjMzJyxcblx0Y3JhcnI6ICdcXHUyMUI1Jyxcblx0Q3Jvc3M6ICdcXHUyQTJGJyxcblx0Y3Jvc3M6ICdcXHUyNzE3Jyxcblx0Q3NjcjogJ1xcdUQ4MzVcXHVEQzlFJyxcblx0Y3NjcjogJ1xcdUQ4MzVcXHVEQ0I4Jyxcblx0Y3N1YjogJ1xcdTJBQ0YnLFxuXHRjc3ViZTogJ1xcdTJBRDEnLFxuXHRjc3VwOiAnXFx1MkFEMCcsXG5cdGNzdXBlOiAnXFx1MkFEMicsXG5cdGN0ZG90OiAnXFx1MjJFRicsXG5cdGN1ZGFycmw6ICdcXHUyOTM4Jyxcblx0Y3VkYXJycjogJ1xcdTI5MzUnLFxuXHRjdWVwcjogJ1xcdTIyREUnLFxuXHRjdWVzYzogJ1xcdTIyREYnLFxuXHRjdWxhcnI6ICdcXHUyMUI2Jyxcblx0Y3VsYXJycDogJ1xcdTI5M0QnLFxuXHRDdXA6ICdcXHUyMkQzJyxcblx0Y3VwOiAnXFx1MjIyQScsXG5cdGN1cGJyY2FwOiAnXFx1MkE0OCcsXG5cdEN1cENhcDogJ1xcdTIyNEQnLFxuXHRjdXBjYXA6ICdcXHUyQTQ2Jyxcblx0Y3VwY3VwOiAnXFx1MkE0QScsXG5cdGN1cGRvdDogJ1xcdTIyOEQnLFxuXHRjdXBvcjogJ1xcdTJBNDUnLFxuXHRjdXBzOiAnXFx1MjIyQVxcdUZFMDAnLFxuXHRjdXJhcnI6ICdcXHUyMUI3Jyxcblx0Y3VyYXJybTogJ1xcdTI5M0MnLFxuXHRjdXJseWVxcHJlYzogJ1xcdTIyREUnLFxuXHRjdXJseWVxc3VjYzogJ1xcdTIyREYnLFxuXHRjdXJseXZlZTogJ1xcdTIyQ0UnLFxuXHRjdXJseXdlZGdlOiAnXFx1MjJDRicsXG5cdGN1cnJlbjogJ1xcdTAwQTQnLFxuXHRjdXJ2ZWFycm93bGVmdDogJ1xcdTIxQjYnLFxuXHRjdXJ2ZWFycm93cmlnaHQ6ICdcXHUyMUI3Jyxcblx0Y3V2ZWU6ICdcXHUyMkNFJyxcblx0Y3V3ZWQ6ICdcXHUyMkNGJyxcblx0Y3djb25pbnQ6ICdcXHUyMjMyJyxcblx0Y3dpbnQ6ICdcXHUyMjMxJyxcblx0Y3lsY3R5OiAnXFx1MjMyRCcsXG5cdERhZ2dlcjogJ1xcdTIwMjEnLFxuXHRkYWdnZXI6ICdcXHUyMDIwJyxcblx0ZGFsZXRoOiAnXFx1MjEzOCcsXG5cdERhcnI6ICdcXHUyMUExJyxcblx0ZEFycjogJ1xcdTIxRDMnLFxuXHRkYXJyOiAnXFx1MjE5MycsXG5cdGRhc2g6ICdcXHUyMDEwJyxcblx0RGFzaHY6ICdcXHUyQUU0Jyxcblx0ZGFzaHY6ICdcXHUyMkEzJyxcblx0ZGJrYXJvdzogJ1xcdTI5MEYnLFxuXHRkYmxhYzogJ1xcdTAyREQnLFxuXHREY2Fyb246ICdcXHUwMTBFJyxcblx0ZGNhcm9uOiAnXFx1MDEwRicsXG5cdERjeTogJ1xcdTA0MTQnLFxuXHRkY3k6ICdcXHUwNDM0Jyxcblx0REQ6ICdcXHUyMTQ1Jyxcblx0ZGQ6ICdcXHUyMTQ2Jyxcblx0ZGRhZ2dlcjogJ1xcdTIwMjEnLFxuXHRkZGFycjogJ1xcdTIxQ0EnLFxuXHRERG90cmFoZDogJ1xcdTI5MTEnLFxuXHRkZG90c2VxOiAnXFx1MkE3NycsXG5cdGRlZzogJ1xcdTAwQjAnLFxuXHREZWw6ICdcXHUyMjA3Jyxcblx0RGVsdGE6ICdcXHUwMzk0Jyxcblx0ZGVsdGE6ICdcXHUwM0I0Jyxcblx0ZGVtcHR5djogJ1xcdTI5QjEnLFxuXHRkZmlzaHQ6ICdcXHUyOTdGJyxcblx0RGZyOiAnXFx1RDgzNVxcdUREMDcnLFxuXHRkZnI6ICdcXHVEODM1XFx1REQyMScsXG5cdGRIYXI6ICdcXHUyOTY1Jyxcblx0ZGhhcmw6ICdcXHUyMUMzJyxcblx0ZGhhcnI6ICdcXHUyMUMyJyxcblx0RGlhY3JpdGljYWxBY3V0ZTogJ1xcdTAwQjQnLFxuXHREaWFjcml0aWNhbERvdDogJ1xcdTAyRDknLFxuXHREaWFjcml0aWNhbERvdWJsZUFjdXRlOiAnXFx1MDJERCcsXG5cdERpYWNyaXRpY2FsR3JhdmU6ICdcXHUwMDYwJyxcblx0RGlhY3JpdGljYWxUaWxkZTogJ1xcdTAyREMnLFxuXHRkaWFtOiAnXFx1MjJDNCcsXG5cdERpYW1vbmQ6ICdcXHUyMkM0Jyxcblx0ZGlhbW9uZDogJ1xcdTIyQzQnLFxuXHRkaWFtb25kc3VpdDogJ1xcdTI2NjYnLFxuXHRkaWFtczogJ1xcdTI2NjYnLFxuXHRkaWU6ICdcXHUwMEE4Jyxcblx0RGlmZmVyZW50aWFsRDogJ1xcdTIxNDYnLFxuXHRkaWdhbW1hOiAnXFx1MDNERCcsXG5cdGRpc2luOiAnXFx1MjJGMicsXG5cdGRpdjogJ1xcdTAwRjcnLFxuXHRkaXZpZGU6ICdcXHUwMEY3Jyxcblx0ZGl2aWRlb250aW1lczogJ1xcdTIyQzcnLFxuXHRkaXZvbng6ICdcXHUyMkM3Jyxcblx0REpjeTogJ1xcdTA0MDInLFxuXHRkamN5OiAnXFx1MDQ1MicsXG5cdGRsY29ybjogJ1xcdTIzMUUnLFxuXHRkbGNyb3A6ICdcXHUyMzBEJyxcblx0ZG9sbGFyOiAnXFx1MDAyNCcsXG5cdERvcGY6ICdcXHVEODM1XFx1REQzQicsXG5cdGRvcGY6ICdcXHVEODM1XFx1REQ1NScsXG5cdERvdDogJ1xcdTAwQTgnLFxuXHRkb3Q6ICdcXHUwMkQ5Jyxcblx0RG90RG90OiAnXFx1MjBEQycsXG5cdGRvdGVxOiAnXFx1MjI1MCcsXG5cdGRvdGVxZG90OiAnXFx1MjI1MScsXG5cdERvdEVxdWFsOiAnXFx1MjI1MCcsXG5cdGRvdG1pbnVzOiAnXFx1MjIzOCcsXG5cdGRvdHBsdXM6ICdcXHUyMjE0Jyxcblx0ZG90c3F1YXJlOiAnXFx1MjJBMScsXG5cdGRvdWJsZWJhcndlZGdlOiAnXFx1MjMwNicsXG5cdERvdWJsZUNvbnRvdXJJbnRlZ3JhbDogJ1xcdTIyMkYnLFxuXHREb3VibGVEb3Q6ICdcXHUwMEE4Jyxcblx0RG91YmxlRG93bkFycm93OiAnXFx1MjFEMycsXG5cdERvdWJsZUxlZnRBcnJvdzogJ1xcdTIxRDAnLFxuXHREb3VibGVMZWZ0UmlnaHRBcnJvdzogJ1xcdTIxRDQnLFxuXHREb3VibGVMZWZ0VGVlOiAnXFx1MkFFNCcsXG5cdERvdWJsZUxvbmdMZWZ0QXJyb3c6ICdcXHUyN0Y4Jyxcblx0RG91YmxlTG9uZ0xlZnRSaWdodEFycm93OiAnXFx1MjdGQScsXG5cdERvdWJsZUxvbmdSaWdodEFycm93OiAnXFx1MjdGOScsXG5cdERvdWJsZVJpZ2h0QXJyb3c6ICdcXHUyMUQyJyxcblx0RG91YmxlUmlnaHRUZWU6ICdcXHUyMkE4Jyxcblx0RG91YmxlVXBBcnJvdzogJ1xcdTIxRDEnLFxuXHREb3VibGVVcERvd25BcnJvdzogJ1xcdTIxRDUnLFxuXHREb3VibGVWZXJ0aWNhbEJhcjogJ1xcdTIyMjUnLFxuXHREb3duQXJyb3c6ICdcXHUyMTkzJyxcblx0RG93bmFycm93OiAnXFx1MjFEMycsXG5cdGRvd25hcnJvdzogJ1xcdTIxOTMnLFxuXHREb3duQXJyb3dCYXI6ICdcXHUyOTEzJyxcblx0RG93bkFycm93VXBBcnJvdzogJ1xcdTIxRjUnLFxuXHREb3duQnJldmU6ICdcXHUwMzExJyxcblx0ZG93bmRvd25hcnJvd3M6ICdcXHUyMUNBJyxcblx0ZG93bmhhcnBvb25sZWZ0OiAnXFx1MjFDMycsXG5cdGRvd25oYXJwb29ucmlnaHQ6ICdcXHUyMUMyJyxcblx0RG93bkxlZnRSaWdodFZlY3RvcjogJ1xcdTI5NTAnLFxuXHREb3duTGVmdFRlZVZlY3RvcjogJ1xcdTI5NUUnLFxuXHREb3duTGVmdFZlY3RvcjogJ1xcdTIxQkQnLFxuXHREb3duTGVmdFZlY3RvckJhcjogJ1xcdTI5NTYnLFxuXHREb3duUmlnaHRUZWVWZWN0b3I6ICdcXHUyOTVGJyxcblx0RG93blJpZ2h0VmVjdG9yOiAnXFx1MjFDMScsXG5cdERvd25SaWdodFZlY3RvckJhcjogJ1xcdTI5NTcnLFxuXHREb3duVGVlOiAnXFx1MjJBNCcsXG5cdERvd25UZWVBcnJvdzogJ1xcdTIxQTcnLFxuXHRkcmJrYXJvdzogJ1xcdTI5MTAnLFxuXHRkcmNvcm46ICdcXHUyMzFGJyxcblx0ZHJjcm9wOiAnXFx1MjMwQycsXG5cdERzY3I6ICdcXHVEODM1XFx1REM5RicsXG5cdGRzY3I6ICdcXHVEODM1XFx1RENCOScsXG5cdERTY3k6ICdcXHUwNDA1Jyxcblx0ZHNjeTogJ1xcdTA0NTUnLFxuXHRkc29sOiAnXFx1MjlGNicsXG5cdERzdHJvazogJ1xcdTAxMTAnLFxuXHRkc3Ryb2s6ICdcXHUwMTExJyxcblx0ZHRkb3Q6ICdcXHUyMkYxJyxcblx0ZHRyaTogJ1xcdTI1QkYnLFxuXHRkdHJpZjogJ1xcdTI1QkUnLFxuXHRkdWFycjogJ1xcdTIxRjUnLFxuXHRkdWhhcjogJ1xcdTI5NkYnLFxuXHRkd2FuZ2xlOiAnXFx1MjlBNicsXG5cdERaY3k6ICdcXHUwNDBGJyxcblx0ZHpjeTogJ1xcdTA0NUYnLFxuXHRkemlncmFycjogJ1xcdTI3RkYnLFxuXHRFYWN1dGU6ICdcXHUwMEM5Jyxcblx0ZWFjdXRlOiAnXFx1MDBFOScsXG5cdGVhc3RlcjogJ1xcdTJBNkUnLFxuXHRFY2Fyb246ICdcXHUwMTFBJyxcblx0ZWNhcm9uOiAnXFx1MDExQicsXG5cdGVjaXI6ICdcXHUyMjU2Jyxcblx0RWNpcmM6ICdcXHUwMENBJyxcblx0ZWNpcmM6ICdcXHUwMEVBJyxcblx0ZWNvbG9uOiAnXFx1MjI1NScsXG5cdEVjeTogJ1xcdTA0MkQnLFxuXHRlY3k6ICdcXHUwNDREJyxcblx0ZUREb3Q6ICdcXHUyQTc3Jyxcblx0RWRvdDogJ1xcdTAxMTYnLFxuXHRlRG90OiAnXFx1MjI1MScsXG5cdGVkb3Q6ICdcXHUwMTE3Jyxcblx0ZWU6ICdcXHUyMTQ3Jyxcblx0ZWZEb3Q6ICdcXHUyMjUyJyxcblx0RWZyOiAnXFx1RDgzNVxcdUREMDgnLFxuXHRlZnI6ICdcXHVEODM1XFx1REQyMicsXG5cdGVnOiAnXFx1MkE5QScsXG5cdEVncmF2ZTogJ1xcdTAwQzgnLFxuXHRlZ3JhdmU6ICdcXHUwMEU4Jyxcblx0ZWdzOiAnXFx1MkE5NicsXG5cdGVnc2RvdDogJ1xcdTJBOTgnLFxuXHRlbDogJ1xcdTJBOTknLFxuXHRFbGVtZW50OiAnXFx1MjIwOCcsXG5cdGVsaW50ZXJzOiAnXFx1MjNFNycsXG5cdGVsbDogJ1xcdTIxMTMnLFxuXHRlbHM6ICdcXHUyQTk1Jyxcblx0ZWxzZG90OiAnXFx1MkE5NycsXG5cdEVtYWNyOiAnXFx1MDExMicsXG5cdGVtYWNyOiAnXFx1MDExMycsXG5cdGVtcHR5OiAnXFx1MjIwNScsXG5cdGVtcHR5c2V0OiAnXFx1MjIwNScsXG5cdEVtcHR5U21hbGxTcXVhcmU6ICdcXHUyNUZCJyxcblx0ZW1wdHl2OiAnXFx1MjIwNScsXG5cdEVtcHR5VmVyeVNtYWxsU3F1YXJlOiAnXFx1MjVBQicsXG5cdGVtc3A6ICdcXHUyMDAzJyxcblx0ZW1zcDEzOiAnXFx1MjAwNCcsXG5cdGVtc3AxNDogJ1xcdTIwMDUnLFxuXHRFTkc6ICdcXHUwMTRBJyxcblx0ZW5nOiAnXFx1MDE0QicsXG5cdGVuc3A6ICdcXHUyMDAyJyxcblx0RW9nb246ICdcXHUwMTE4Jyxcblx0ZW9nb246ICdcXHUwMTE5Jyxcblx0RW9wZjogJ1xcdUQ4MzVcXHVERDNDJyxcblx0ZW9wZjogJ1xcdUQ4MzVcXHVERDU2Jyxcblx0ZXBhcjogJ1xcdTIyRDUnLFxuXHRlcGFyc2w6ICdcXHUyOUUzJyxcblx0ZXBsdXM6ICdcXHUyQTcxJyxcblx0ZXBzaTogJ1xcdTAzQjUnLFxuXHRFcHNpbG9uOiAnXFx1MDM5NScsXG5cdGVwc2lsb246ICdcXHUwM0I1Jyxcblx0ZXBzaXY6ICdcXHUwM0Y1Jyxcblx0ZXFjaXJjOiAnXFx1MjI1NicsXG5cdGVxY29sb246ICdcXHUyMjU1Jyxcblx0ZXFzaW06ICdcXHUyMjQyJyxcblx0ZXFzbGFudGd0cjogJ1xcdTJBOTYnLFxuXHRlcXNsYW50bGVzczogJ1xcdTJBOTUnLFxuXHRFcXVhbDogJ1xcdTJBNzUnLFxuXHRlcXVhbHM6ICdcXHUwMDNEJyxcblx0RXF1YWxUaWxkZTogJ1xcdTIyNDInLFxuXHRlcXVlc3Q6ICdcXHUyMjVGJyxcblx0RXF1aWxpYnJpdW06ICdcXHUyMUNDJyxcblx0ZXF1aXY6ICdcXHUyMjYxJyxcblx0ZXF1aXZERDogJ1xcdTJBNzgnLFxuXHRlcXZwYXJzbDogJ1xcdTI5RTUnLFxuXHRlcmFycjogJ1xcdTI5NzEnLFxuXHRlckRvdDogJ1xcdTIyNTMnLFxuXHRFc2NyOiAnXFx1MjEzMCcsXG5cdGVzY3I6ICdcXHUyMTJGJyxcblx0ZXNkb3Q6ICdcXHUyMjUwJyxcblx0RXNpbTogJ1xcdTJBNzMnLFxuXHRlc2ltOiAnXFx1MjI0MicsXG5cdEV0YTogJ1xcdTAzOTcnLFxuXHRldGE6ICdcXHUwM0I3Jyxcblx0RVRIOiAnXFx1MDBEMCcsXG5cdGV0aDogJ1xcdTAwRjAnLFxuXHRFdW1sOiAnXFx1MDBDQicsXG5cdGV1bWw6ICdcXHUwMEVCJyxcblx0ZXVybzogJ1xcdTIwQUMnLFxuXHRleGNsOiAnXFx1MDAyMScsXG5cdGV4aXN0OiAnXFx1MjIwMycsXG5cdEV4aXN0czogJ1xcdTIyMDMnLFxuXHRleHBlY3RhdGlvbjogJ1xcdTIxMzAnLFxuXHRFeHBvbmVudGlhbEU6ICdcXHUyMTQ3Jyxcblx0ZXhwb25lbnRpYWxlOiAnXFx1MjE0NycsXG5cdGZhbGxpbmdkb3RzZXE6ICdcXHUyMjUyJyxcblx0RmN5OiAnXFx1MDQyNCcsXG5cdGZjeTogJ1xcdTA0NDQnLFxuXHRmZW1hbGU6ICdcXHUyNjQwJyxcblx0ZmZpbGlnOiAnXFx1RkIwMycsXG5cdGZmbGlnOiAnXFx1RkIwMCcsXG5cdGZmbGxpZzogJ1xcdUZCMDQnLFxuXHRGZnI6ICdcXHVEODM1XFx1REQwOScsXG5cdGZmcjogJ1xcdUQ4MzVcXHVERDIzJyxcblx0ZmlsaWc6ICdcXHVGQjAxJyxcblx0RmlsbGVkU21hbGxTcXVhcmU6ICdcXHUyNUZDJyxcblx0RmlsbGVkVmVyeVNtYWxsU3F1YXJlOiAnXFx1MjVBQScsXG5cdGZqbGlnOiAnXFx1MDA2NlxcdTAwNkEnLFxuXHRmbGF0OiAnXFx1MjY2RCcsXG5cdGZsbGlnOiAnXFx1RkIwMicsXG5cdGZsdG5zOiAnXFx1MjVCMScsXG5cdGZub2Y6ICdcXHUwMTkyJyxcblx0Rm9wZjogJ1xcdUQ4MzVcXHVERDNEJyxcblx0Zm9wZjogJ1xcdUQ4MzVcXHVERDU3Jyxcblx0Rm9yQWxsOiAnXFx1MjIwMCcsXG5cdGZvcmFsbDogJ1xcdTIyMDAnLFxuXHRmb3JrOiAnXFx1MjJENCcsXG5cdGZvcmt2OiAnXFx1MkFEOScsXG5cdEZvdXJpZXJ0cmY6ICdcXHUyMTMxJyxcblx0ZnBhcnRpbnQ6ICdcXHUyQTBEJyxcblx0ZnJhYzEyOiAnXFx1MDBCRCcsXG5cdGZyYWMxMzogJ1xcdTIxNTMnLFxuXHRmcmFjMTQ6ICdcXHUwMEJDJyxcblx0ZnJhYzE1OiAnXFx1MjE1NScsXG5cdGZyYWMxNjogJ1xcdTIxNTknLFxuXHRmcmFjMTg6ICdcXHUyMTVCJyxcblx0ZnJhYzIzOiAnXFx1MjE1NCcsXG5cdGZyYWMyNTogJ1xcdTIxNTYnLFxuXHRmcmFjMzQ6ICdcXHUwMEJFJyxcblx0ZnJhYzM1OiAnXFx1MjE1NycsXG5cdGZyYWMzODogJ1xcdTIxNUMnLFxuXHRmcmFjNDU6ICdcXHUyMTU4Jyxcblx0ZnJhYzU2OiAnXFx1MjE1QScsXG5cdGZyYWM1ODogJ1xcdTIxNUQnLFxuXHRmcmFjNzg6ICdcXHUyMTVFJyxcblx0ZnJhc2w6ICdcXHUyMDQ0Jyxcblx0ZnJvd246ICdcXHUyMzIyJyxcblx0RnNjcjogJ1xcdTIxMzEnLFxuXHRmc2NyOiAnXFx1RDgzNVxcdURDQkInLFxuXHRnYWN1dGU6ICdcXHUwMUY1Jyxcblx0R2FtbWE6ICdcXHUwMzkzJyxcblx0Z2FtbWE6ICdcXHUwM0IzJyxcblx0R2FtbWFkOiAnXFx1MDNEQycsXG5cdGdhbW1hZDogJ1xcdTAzREQnLFxuXHRnYXA6ICdcXHUyQTg2Jyxcblx0R2JyZXZlOiAnXFx1MDExRScsXG5cdGdicmV2ZTogJ1xcdTAxMUYnLFxuXHRHY2VkaWw6ICdcXHUwMTIyJyxcblx0R2NpcmM6ICdcXHUwMTFDJyxcblx0Z2NpcmM6ICdcXHUwMTFEJyxcblx0R2N5OiAnXFx1MDQxMycsXG5cdGdjeTogJ1xcdTA0MzMnLFxuXHRHZG90OiAnXFx1MDEyMCcsXG5cdGdkb3Q6ICdcXHUwMTIxJyxcblx0Z0U6ICdcXHUyMjY3Jyxcblx0Z2U6ICdcXHUyMjY1Jyxcblx0Z0VsOiAnXFx1MkE4QycsXG5cdGdlbDogJ1xcdTIyREInLFxuXHRnZXE6ICdcXHUyMjY1Jyxcblx0Z2VxcTogJ1xcdTIyNjcnLFxuXHRnZXFzbGFudDogJ1xcdTJBN0UnLFxuXHRnZXM6ICdcXHUyQTdFJyxcblx0Z2VzY2M6ICdcXHUyQUE5Jyxcblx0Z2VzZG90OiAnXFx1MkE4MCcsXG5cdGdlc2RvdG86ICdcXHUyQTgyJyxcblx0Z2VzZG90b2w6ICdcXHUyQTg0Jyxcblx0Z2VzbDogJ1xcdTIyREJcXHVGRTAwJyxcblx0Z2VzbGVzOiAnXFx1MkE5NCcsXG5cdEdmcjogJ1xcdUQ4MzVcXHVERDBBJyxcblx0Z2ZyOiAnXFx1RDgzNVxcdUREMjQnLFxuXHRHZzogJ1xcdTIyRDknLFxuXHRnZzogJ1xcdTIyNkInLFxuXHRnZ2c6ICdcXHUyMkQ5Jyxcblx0Z2ltZWw6ICdcXHUyMTM3Jyxcblx0R0pjeTogJ1xcdTA0MDMnLFxuXHRnamN5OiAnXFx1MDQ1MycsXG5cdGdsOiAnXFx1MjI3NycsXG5cdGdsYTogJ1xcdTJBQTUnLFxuXHRnbEU6ICdcXHUyQTkyJyxcblx0Z2xqOiAnXFx1MkFBNCcsXG5cdGduYXA6ICdcXHUyQThBJyxcblx0Z25hcHByb3g6ICdcXHUyQThBJyxcblx0Z25FOiAnXFx1MjI2OScsXG5cdGduZTogJ1xcdTJBODgnLFxuXHRnbmVxOiAnXFx1MkE4OCcsXG5cdGduZXFxOiAnXFx1MjI2OScsXG5cdGduc2ltOiAnXFx1MjJFNycsXG5cdEdvcGY6ICdcXHVEODM1XFx1REQzRScsXG5cdGdvcGY6ICdcXHVEODM1XFx1REQ1OCcsXG5cdGdyYXZlOiAnXFx1MDA2MCcsXG5cdEdyZWF0ZXJFcXVhbDogJ1xcdTIyNjUnLFxuXHRHcmVhdGVyRXF1YWxMZXNzOiAnXFx1MjJEQicsXG5cdEdyZWF0ZXJGdWxsRXF1YWw6ICdcXHUyMjY3Jyxcblx0R3JlYXRlckdyZWF0ZXI6ICdcXHUyQUEyJyxcblx0R3JlYXRlckxlc3M6ICdcXHUyMjc3Jyxcblx0R3JlYXRlclNsYW50RXF1YWw6ICdcXHUyQTdFJyxcblx0R3JlYXRlclRpbGRlOiAnXFx1MjI3MycsXG5cdEdzY3I6ICdcXHVEODM1XFx1RENBMicsXG5cdGdzY3I6ICdcXHUyMTBBJyxcblx0Z3NpbTogJ1xcdTIyNzMnLFxuXHRnc2ltZTogJ1xcdTJBOEUnLFxuXHRnc2ltbDogJ1xcdTJBOTAnLFxuXHRHdDogJ1xcdTIyNkInLFxuXHRHVDogJ1xcdTAwM0UnLFxuXHRndDogJ1xcdTAwM0UnLFxuXHRndGNjOiAnXFx1MkFBNycsXG5cdGd0Y2lyOiAnXFx1MkE3QScsXG5cdGd0ZG90OiAnXFx1MjJENycsXG5cdGd0bFBhcjogJ1xcdTI5OTUnLFxuXHRndHF1ZXN0OiAnXFx1MkE3QycsXG5cdGd0cmFwcHJveDogJ1xcdTJBODYnLFxuXHRndHJhcnI6ICdcXHUyOTc4Jyxcblx0Z3RyZG90OiAnXFx1MjJENycsXG5cdGd0cmVxbGVzczogJ1xcdTIyREInLFxuXHRndHJlcXFsZXNzOiAnXFx1MkE4QycsXG5cdGd0cmxlc3M6ICdcXHUyMjc3Jyxcblx0Z3Ryc2ltOiAnXFx1MjI3MycsXG5cdGd2ZXJ0bmVxcTogJ1xcdTIyNjlcXHVGRTAwJyxcblx0Z3ZuRTogJ1xcdTIyNjlcXHVGRTAwJyxcblx0SGFjZWs6ICdcXHUwMkM3Jyxcblx0aGFpcnNwOiAnXFx1MjAwQScsXG5cdGhhbGY6ICdcXHUwMEJEJyxcblx0aGFtaWx0OiAnXFx1MjEwQicsXG5cdEhBUkRjeTogJ1xcdTA0MkEnLFxuXHRoYXJkY3k6ICdcXHUwNDRBJyxcblx0aEFycjogJ1xcdTIxRDQnLFxuXHRoYXJyOiAnXFx1MjE5NCcsXG5cdGhhcnJjaXI6ICdcXHUyOTQ4Jyxcblx0aGFycnc6ICdcXHUyMUFEJyxcblx0SGF0OiAnXFx1MDA1RScsXG5cdGhiYXI6ICdcXHUyMTBGJyxcblx0SGNpcmM6ICdcXHUwMTI0Jyxcblx0aGNpcmM6ICdcXHUwMTI1Jyxcblx0aGVhcnRzOiAnXFx1MjY2NScsXG5cdGhlYXJ0c3VpdDogJ1xcdTI2NjUnLFxuXHRoZWxsaXA6ICdcXHUyMDI2Jyxcblx0aGVyY29uOiAnXFx1MjJCOScsXG5cdEhmcjogJ1xcdTIxMEMnLFxuXHRoZnI6ICdcXHVEODM1XFx1REQyNScsXG5cdEhpbGJlcnRTcGFjZTogJ1xcdTIxMEInLFxuXHRoa3NlYXJvdzogJ1xcdTI5MjUnLFxuXHRoa3N3YXJvdzogJ1xcdTI5MjYnLFxuXHRob2FycjogJ1xcdTIxRkYnLFxuXHRob210aHQ6ICdcXHUyMjNCJyxcblx0aG9va2xlZnRhcnJvdzogJ1xcdTIxQTknLFxuXHRob29rcmlnaHRhcnJvdzogJ1xcdTIxQUEnLFxuXHRIb3BmOiAnXFx1MjEwRCcsXG5cdGhvcGY6ICdcXHVEODM1XFx1REQ1OScsXG5cdGhvcmJhcjogJ1xcdTIwMTUnLFxuXHRIb3Jpem9udGFsTGluZTogJ1xcdTI1MDAnLFxuXHRIc2NyOiAnXFx1MjEwQicsXG5cdGhzY3I6ICdcXHVEODM1XFx1RENCRCcsXG5cdGhzbGFzaDogJ1xcdTIxMEYnLFxuXHRIc3Ryb2s6ICdcXHUwMTI2Jyxcblx0aHN0cm9rOiAnXFx1MDEyNycsXG5cdEh1bXBEb3duSHVtcDogJ1xcdTIyNEUnLFxuXHRIdW1wRXF1YWw6ICdcXHUyMjRGJyxcblx0aHlidWxsOiAnXFx1MjA0MycsXG5cdGh5cGhlbjogJ1xcdTIwMTAnLFxuXHRJYWN1dGU6ICdcXHUwMENEJyxcblx0aWFjdXRlOiAnXFx1MDBFRCcsXG5cdGljOiAnXFx1MjA2MycsXG5cdEljaXJjOiAnXFx1MDBDRScsXG5cdGljaXJjOiAnXFx1MDBFRScsXG5cdEljeTogJ1xcdTA0MTgnLFxuXHRpY3k6ICdcXHUwNDM4Jyxcblx0SWRvdDogJ1xcdTAxMzAnLFxuXHRJRWN5OiAnXFx1MDQxNScsXG5cdGllY3k6ICdcXHUwNDM1Jyxcblx0aWV4Y2w6ICdcXHUwMEExJyxcblx0aWZmOiAnXFx1MjFENCcsXG5cdElmcjogJ1xcdTIxMTEnLFxuXHRpZnI6ICdcXHVEODM1XFx1REQyNicsXG5cdElncmF2ZTogJ1xcdTAwQ0MnLFxuXHRpZ3JhdmU6ICdcXHUwMEVDJyxcblx0aWk6ICdcXHUyMTQ4Jyxcblx0aWlpaW50OiAnXFx1MkEwQycsXG5cdGlpaW50OiAnXFx1MjIyRCcsXG5cdGlpbmZpbjogJ1xcdTI5REMnLFxuXHRpaW90YTogJ1xcdTIxMjknLFxuXHRJSmxpZzogJ1xcdTAxMzInLFxuXHRpamxpZzogJ1xcdTAxMzMnLFxuXHRJbTogJ1xcdTIxMTEnLFxuXHRJbWFjcjogJ1xcdTAxMkEnLFxuXHRpbWFjcjogJ1xcdTAxMkInLFxuXHRpbWFnZTogJ1xcdTIxMTEnLFxuXHRJbWFnaW5hcnlJOiAnXFx1MjE0OCcsXG5cdGltYWdsaW5lOiAnXFx1MjExMCcsXG5cdGltYWdwYXJ0OiAnXFx1MjExMScsXG5cdGltYXRoOiAnXFx1MDEzMScsXG5cdGltb2Y6ICdcXHUyMkI3Jyxcblx0aW1wZWQ6ICdcXHUwMUI1Jyxcblx0SW1wbGllczogJ1xcdTIxRDInLFxuXHRpbjogJ1xcdTIyMDgnLFxuXHRpbmNhcmU6ICdcXHUyMTA1Jyxcblx0aW5maW46ICdcXHUyMjFFJyxcblx0aW5maW50aWU6ICdcXHUyOUREJyxcblx0aW5vZG90OiAnXFx1MDEzMScsXG5cdEludDogJ1xcdTIyMkMnLFxuXHRpbnQ6ICdcXHUyMjJCJyxcblx0aW50Y2FsOiAnXFx1MjJCQScsXG5cdGludGVnZXJzOiAnXFx1MjEyNCcsXG5cdEludGVncmFsOiAnXFx1MjIyQicsXG5cdGludGVyY2FsOiAnXFx1MjJCQScsXG5cdEludGVyc2VjdGlvbjogJ1xcdTIyQzInLFxuXHRpbnRsYXJoazogJ1xcdTJBMTcnLFxuXHRpbnRwcm9kOiAnXFx1MkEzQycsXG5cdEludmlzaWJsZUNvbW1hOiAnXFx1MjA2MycsXG5cdEludmlzaWJsZVRpbWVzOiAnXFx1MjA2MicsXG5cdElPY3k6ICdcXHUwNDAxJyxcblx0aW9jeTogJ1xcdTA0NTEnLFxuXHRJb2dvbjogJ1xcdTAxMkUnLFxuXHRpb2dvbjogJ1xcdTAxMkYnLFxuXHRJb3BmOiAnXFx1RDgzNVxcdURENDAnLFxuXHRpb3BmOiAnXFx1RDgzNVxcdURENUEnLFxuXHRJb3RhOiAnXFx1MDM5OScsXG5cdGlvdGE6ICdcXHUwM0I5Jyxcblx0aXByb2Q6ICdcXHUyQTNDJyxcblx0aXF1ZXN0OiAnXFx1MDBCRicsXG5cdElzY3I6ICdcXHUyMTEwJyxcblx0aXNjcjogJ1xcdUQ4MzVcXHVEQ0JFJyxcblx0aXNpbjogJ1xcdTIyMDgnLFxuXHRpc2luZG90OiAnXFx1MjJGNScsXG5cdGlzaW5FOiAnXFx1MjJGOScsXG5cdGlzaW5zOiAnXFx1MjJGNCcsXG5cdGlzaW5zdjogJ1xcdTIyRjMnLFxuXHRpc2ludjogJ1xcdTIyMDgnLFxuXHRpdDogJ1xcdTIwNjInLFxuXHRJdGlsZGU6ICdcXHUwMTI4Jyxcblx0aXRpbGRlOiAnXFx1MDEyOScsXG5cdEl1a2N5OiAnXFx1MDQwNicsXG5cdGl1a2N5OiAnXFx1MDQ1NicsXG5cdEl1bWw6ICdcXHUwMENGJyxcblx0aXVtbDogJ1xcdTAwRUYnLFxuXHRKY2lyYzogJ1xcdTAxMzQnLFxuXHRqY2lyYzogJ1xcdTAxMzUnLFxuXHRKY3k6ICdcXHUwNDE5Jyxcblx0amN5OiAnXFx1MDQzOScsXG5cdEpmcjogJ1xcdUQ4MzVcXHVERDBEJyxcblx0amZyOiAnXFx1RDgzNVxcdUREMjcnLFxuXHRqbWF0aDogJ1xcdTAyMzcnLFxuXHRKb3BmOiAnXFx1RDgzNVxcdURENDEnLFxuXHRqb3BmOiAnXFx1RDgzNVxcdURENUInLFxuXHRKc2NyOiAnXFx1RDgzNVxcdURDQTUnLFxuXHRqc2NyOiAnXFx1RDgzNVxcdURDQkYnLFxuXHRKc2VyY3k6ICdcXHUwNDA4Jyxcblx0anNlcmN5OiAnXFx1MDQ1OCcsXG5cdEp1a2N5OiAnXFx1MDQwNCcsXG5cdGp1a2N5OiAnXFx1MDQ1NCcsXG5cdEthcHBhOiAnXFx1MDM5QScsXG5cdGthcHBhOiAnXFx1MDNCQScsXG5cdGthcHBhdjogJ1xcdTAzRjAnLFxuXHRLY2VkaWw6ICdcXHUwMTM2Jyxcblx0a2NlZGlsOiAnXFx1MDEzNycsXG5cdEtjeTogJ1xcdTA0MUEnLFxuXHRrY3k6ICdcXHUwNDNBJyxcblx0S2ZyOiAnXFx1RDgzNVxcdUREMEUnLFxuXHRrZnI6ICdcXHVEODM1XFx1REQyOCcsXG5cdGtncmVlbjogJ1xcdTAxMzgnLFxuXHRLSGN5OiAnXFx1MDQyNScsXG5cdGtoY3k6ICdcXHUwNDQ1Jyxcblx0S0pjeTogJ1xcdTA0MEMnLFxuXHRramN5OiAnXFx1MDQ1QycsXG5cdEtvcGY6ICdcXHVEODM1XFx1REQ0MicsXG5cdGtvcGY6ICdcXHVEODM1XFx1REQ1QycsXG5cdEtzY3I6ICdcXHVEODM1XFx1RENBNicsXG5cdGtzY3I6ICdcXHVEODM1XFx1RENDMCcsXG5cdGxBYXJyOiAnXFx1MjFEQScsXG5cdExhY3V0ZTogJ1xcdTAxMzknLFxuXHRsYWN1dGU6ICdcXHUwMTNBJyxcblx0bGFlbXB0eXY6ICdcXHUyOUI0Jyxcblx0bGFncmFuOiAnXFx1MjExMicsXG5cdExhbWJkYTogJ1xcdTAzOUInLFxuXHRsYW1iZGE6ICdcXHUwM0JCJyxcblx0TGFuZzogJ1xcdTI3RUEnLFxuXHRsYW5nOiAnXFx1MjdFOCcsXG5cdGxhbmdkOiAnXFx1Mjk5MScsXG5cdGxhbmdsZTogJ1xcdTI3RTgnLFxuXHRsYXA6ICdcXHUyQTg1Jyxcblx0TGFwbGFjZXRyZjogJ1xcdTIxMTInLFxuXHRsYXF1bzogJ1xcdTAwQUInLFxuXHRMYXJyOiAnXFx1MjE5RScsXG5cdGxBcnI6ICdcXHUyMUQwJyxcblx0bGFycjogJ1xcdTIxOTAnLFxuXHRsYXJyYjogJ1xcdTIxRTQnLFxuXHRsYXJyYmZzOiAnXFx1MjkxRicsXG5cdGxhcnJmczogJ1xcdTI5MUQnLFxuXHRsYXJyaGs6ICdcXHUyMUE5Jyxcblx0bGFycmxwOiAnXFx1MjFBQicsXG5cdGxhcnJwbDogJ1xcdTI5MzknLFxuXHRsYXJyc2ltOiAnXFx1Mjk3MycsXG5cdGxhcnJ0bDogJ1xcdTIxQTInLFxuXHRsYXQ6ICdcXHUyQUFCJyxcblx0bEF0YWlsOiAnXFx1MjkxQicsXG5cdGxhdGFpbDogJ1xcdTI5MTknLFxuXHRsYXRlOiAnXFx1MkFBRCcsXG5cdGxhdGVzOiAnXFx1MkFBRFxcdUZFMDAnLFxuXHRsQmFycjogJ1xcdTI5MEUnLFxuXHRsYmFycjogJ1xcdTI5MEMnLFxuXHRsYmJyazogJ1xcdTI3NzInLFxuXHRsYnJhY2U6ICdcXHUwMDdCJyxcblx0bGJyYWNrOiAnXFx1MDA1QicsXG5cdGxicmtlOiAnXFx1Mjk4QicsXG5cdGxicmtzbGQ6ICdcXHUyOThGJyxcblx0bGJya3NsdTogJ1xcdTI5OEQnLFxuXHRMY2Fyb246ICdcXHUwMTNEJyxcblx0bGNhcm9uOiAnXFx1MDEzRScsXG5cdExjZWRpbDogJ1xcdTAxM0InLFxuXHRsY2VkaWw6ICdcXHUwMTNDJyxcblx0bGNlaWw6ICdcXHUyMzA4Jyxcblx0bGN1YjogJ1xcdTAwN0InLFxuXHRMY3k6ICdcXHUwNDFCJyxcblx0bGN5OiAnXFx1MDQzQicsXG5cdGxkY2E6ICdcXHUyOTM2Jyxcblx0bGRxdW86ICdcXHUyMDFDJyxcblx0bGRxdW9yOiAnXFx1MjAxRScsXG5cdGxkcmRoYXI6ICdcXHUyOTY3Jyxcblx0bGRydXNoYXI6ICdcXHUyOTRCJyxcblx0bGRzaDogJ1xcdTIxQjInLFxuXHRsRTogJ1xcdTIyNjYnLFxuXHRsZTogJ1xcdTIyNjQnLFxuXHRMZWZ0QW5nbGVCcmFja2V0OiAnXFx1MjdFOCcsXG5cdExlZnRBcnJvdzogJ1xcdTIxOTAnLFxuXHRMZWZ0YXJyb3c6ICdcXHUyMUQwJyxcblx0bGVmdGFycm93OiAnXFx1MjE5MCcsXG5cdExlZnRBcnJvd0JhcjogJ1xcdTIxRTQnLFxuXHRMZWZ0QXJyb3dSaWdodEFycm93OiAnXFx1MjFDNicsXG5cdGxlZnRhcnJvd3RhaWw6ICdcXHUyMUEyJyxcblx0TGVmdENlaWxpbmc6ICdcXHUyMzA4Jyxcblx0TGVmdERvdWJsZUJyYWNrZXQ6ICdcXHUyN0U2Jyxcblx0TGVmdERvd25UZWVWZWN0b3I6ICdcXHUyOTYxJyxcblx0TGVmdERvd25WZWN0b3I6ICdcXHUyMUMzJyxcblx0TGVmdERvd25WZWN0b3JCYXI6ICdcXHUyOTU5Jyxcblx0TGVmdEZsb29yOiAnXFx1MjMwQScsXG5cdGxlZnRoYXJwb29uZG93bjogJ1xcdTIxQkQnLFxuXHRsZWZ0aGFycG9vbnVwOiAnXFx1MjFCQycsXG5cdGxlZnRsZWZ0YXJyb3dzOiAnXFx1MjFDNycsXG5cdExlZnRSaWdodEFycm93OiAnXFx1MjE5NCcsXG5cdExlZnRyaWdodGFycm93OiAnXFx1MjFENCcsXG5cdGxlZnRyaWdodGFycm93OiAnXFx1MjE5NCcsXG5cdGxlZnRyaWdodGFycm93czogJ1xcdTIxQzYnLFxuXHRsZWZ0cmlnaHRoYXJwb29uczogJ1xcdTIxQ0InLFxuXHRsZWZ0cmlnaHRzcXVpZ2Fycm93OiAnXFx1MjFBRCcsXG5cdExlZnRSaWdodFZlY3RvcjogJ1xcdTI5NEUnLFxuXHRMZWZ0VGVlOiAnXFx1MjJBMycsXG5cdExlZnRUZWVBcnJvdzogJ1xcdTIxQTQnLFxuXHRMZWZ0VGVlVmVjdG9yOiAnXFx1Mjk1QScsXG5cdGxlZnR0aHJlZXRpbWVzOiAnXFx1MjJDQicsXG5cdExlZnRUcmlhbmdsZTogJ1xcdTIyQjInLFxuXHRMZWZ0VHJpYW5nbGVCYXI6ICdcXHUyOUNGJyxcblx0TGVmdFRyaWFuZ2xlRXF1YWw6ICdcXHUyMkI0Jyxcblx0TGVmdFVwRG93blZlY3RvcjogJ1xcdTI5NTEnLFxuXHRMZWZ0VXBUZWVWZWN0b3I6ICdcXHUyOTYwJyxcblx0TGVmdFVwVmVjdG9yOiAnXFx1MjFCRicsXG5cdExlZnRVcFZlY3RvckJhcjogJ1xcdTI5NTgnLFxuXHRMZWZ0VmVjdG9yOiAnXFx1MjFCQycsXG5cdExlZnRWZWN0b3JCYXI6ICdcXHUyOTUyJyxcblx0bEVnOiAnXFx1MkE4QicsXG5cdGxlZzogJ1xcdTIyREEnLFxuXHRsZXE6ICdcXHUyMjY0Jyxcblx0bGVxcTogJ1xcdTIyNjYnLFxuXHRsZXFzbGFudDogJ1xcdTJBN0QnLFxuXHRsZXM6ICdcXHUyQTdEJyxcblx0bGVzY2M6ICdcXHUyQUE4Jyxcblx0bGVzZG90OiAnXFx1MkE3RicsXG5cdGxlc2RvdG86ICdcXHUyQTgxJyxcblx0bGVzZG90b3I6ICdcXHUyQTgzJyxcblx0bGVzZzogJ1xcdTIyREFcXHVGRTAwJyxcblx0bGVzZ2VzOiAnXFx1MkE5MycsXG5cdGxlc3NhcHByb3g6ICdcXHUyQTg1Jyxcblx0bGVzc2RvdDogJ1xcdTIyRDYnLFxuXHRsZXNzZXFndHI6ICdcXHUyMkRBJyxcblx0bGVzc2VxcWd0cjogJ1xcdTJBOEInLFxuXHRMZXNzRXF1YWxHcmVhdGVyOiAnXFx1MjJEQScsXG5cdExlc3NGdWxsRXF1YWw6ICdcXHUyMjY2Jyxcblx0TGVzc0dyZWF0ZXI6ICdcXHUyMjc2Jyxcblx0bGVzc2d0cjogJ1xcdTIyNzYnLFxuXHRMZXNzTGVzczogJ1xcdTJBQTEnLFxuXHRsZXNzc2ltOiAnXFx1MjI3MicsXG5cdExlc3NTbGFudEVxdWFsOiAnXFx1MkE3RCcsXG5cdExlc3NUaWxkZTogJ1xcdTIyNzInLFxuXHRsZmlzaHQ6ICdcXHUyOTdDJyxcblx0bGZsb29yOiAnXFx1MjMwQScsXG5cdExmcjogJ1xcdUQ4MzVcXHVERDBGJyxcblx0bGZyOiAnXFx1RDgzNVxcdUREMjknLFxuXHRsZzogJ1xcdTIyNzYnLFxuXHRsZ0U6ICdcXHUyQTkxJyxcblx0bEhhcjogJ1xcdTI5NjInLFxuXHRsaGFyZDogJ1xcdTIxQkQnLFxuXHRsaGFydTogJ1xcdTIxQkMnLFxuXHRsaGFydWw6ICdcXHUyOTZBJyxcblx0bGhibGs6ICdcXHUyNTg0Jyxcblx0TEpjeTogJ1xcdTA0MDknLFxuXHRsamN5OiAnXFx1MDQ1OScsXG5cdExsOiAnXFx1MjJEOCcsXG5cdGxsOiAnXFx1MjI2QScsXG5cdGxsYXJyOiAnXFx1MjFDNycsXG5cdGxsY29ybmVyOiAnXFx1MjMxRScsXG5cdExsZWZ0YXJyb3c6ICdcXHUyMURBJyxcblx0bGxoYXJkOiAnXFx1Mjk2QicsXG5cdGxsdHJpOiAnXFx1MjVGQScsXG5cdExtaWRvdDogJ1xcdTAxM0YnLFxuXHRsbWlkb3Q6ICdcXHUwMTQwJyxcblx0bG1vdXN0OiAnXFx1MjNCMCcsXG5cdGxtb3VzdGFjaGU6ICdcXHUyM0IwJyxcblx0bG5hcDogJ1xcdTJBODknLFxuXHRsbmFwcHJveDogJ1xcdTJBODknLFxuXHRsbkU6ICdcXHUyMjY4Jyxcblx0bG5lOiAnXFx1MkE4NycsXG5cdGxuZXE6ICdcXHUyQTg3Jyxcblx0bG5lcXE6ICdcXHUyMjY4Jyxcblx0bG5zaW06ICdcXHUyMkU2Jyxcblx0bG9hbmc6ICdcXHUyN0VDJyxcblx0bG9hcnI6ICdcXHUyMUZEJyxcblx0bG9icms6ICdcXHUyN0U2Jyxcblx0TG9uZ0xlZnRBcnJvdzogJ1xcdTI3RjUnLFxuXHRMb25nbGVmdGFycm93OiAnXFx1MjdGOCcsXG5cdGxvbmdsZWZ0YXJyb3c6ICdcXHUyN0Y1Jyxcblx0TG9uZ0xlZnRSaWdodEFycm93OiAnXFx1MjdGNycsXG5cdExvbmdsZWZ0cmlnaHRhcnJvdzogJ1xcdTI3RkEnLFxuXHRsb25nbGVmdHJpZ2h0YXJyb3c6ICdcXHUyN0Y3Jyxcblx0bG9uZ21hcHN0bzogJ1xcdTI3RkMnLFxuXHRMb25nUmlnaHRBcnJvdzogJ1xcdTI3RjYnLFxuXHRMb25ncmlnaHRhcnJvdzogJ1xcdTI3RjknLFxuXHRsb25ncmlnaHRhcnJvdzogJ1xcdTI3RjYnLFxuXHRsb29wYXJyb3dsZWZ0OiAnXFx1MjFBQicsXG5cdGxvb3BhcnJvd3JpZ2h0OiAnXFx1MjFBQycsXG5cdGxvcGFyOiAnXFx1Mjk4NScsXG5cdExvcGY6ICdcXHVEODM1XFx1REQ0MycsXG5cdGxvcGY6ICdcXHVEODM1XFx1REQ1RCcsXG5cdGxvcGx1czogJ1xcdTJBMkQnLFxuXHRsb3RpbWVzOiAnXFx1MkEzNCcsXG5cdGxvd2FzdDogJ1xcdTIyMTcnLFxuXHRsb3diYXI6ICdcXHUwMDVGJyxcblx0TG93ZXJMZWZ0QXJyb3c6ICdcXHUyMTk5Jyxcblx0TG93ZXJSaWdodEFycm93OiAnXFx1MjE5OCcsXG5cdGxvejogJ1xcdTI1Q0EnLFxuXHRsb3plbmdlOiAnXFx1MjVDQScsXG5cdGxvemY6ICdcXHUyOUVCJyxcblx0bHBhcjogJ1xcdTAwMjgnLFxuXHRscGFybHQ6ICdcXHUyOTkzJyxcblx0bHJhcnI6ICdcXHUyMUM2Jyxcblx0bHJjb3JuZXI6ICdcXHUyMzFGJyxcblx0bHJoYXI6ICdcXHUyMUNCJyxcblx0bHJoYXJkOiAnXFx1Mjk2RCcsXG5cdGxybTogJ1xcdTIwMEUnLFxuXHRscnRyaTogJ1xcdTIyQkYnLFxuXHRsc2FxdW86ICdcXHUyMDM5Jyxcblx0THNjcjogJ1xcdTIxMTInLFxuXHRsc2NyOiAnXFx1RDgzNVxcdURDQzEnLFxuXHRMc2g6ICdcXHUyMUIwJyxcblx0bHNoOiAnXFx1MjFCMCcsXG5cdGxzaW06ICdcXHUyMjcyJyxcblx0bHNpbWU6ICdcXHUyQThEJyxcblx0bHNpbWc6ICdcXHUyQThGJyxcblx0bHNxYjogJ1xcdTAwNUInLFxuXHRsc3F1bzogJ1xcdTIwMTgnLFxuXHRsc3F1b3I6ICdcXHUyMDFBJyxcblx0THN0cm9rOiAnXFx1MDE0MScsXG5cdGxzdHJvazogJ1xcdTAxNDInLFxuXHRMdDogJ1xcdTIyNkEnLFxuXHRMVDogJ1xcdTAwM0MnLFxuXHRsdDogJ1xcdTAwM0MnLFxuXHRsdGNjOiAnXFx1MkFBNicsXG5cdGx0Y2lyOiAnXFx1MkE3OScsXG5cdGx0ZG90OiAnXFx1MjJENicsXG5cdGx0aHJlZTogJ1xcdTIyQ0InLFxuXHRsdGltZXM6ICdcXHUyMkM5Jyxcblx0bHRsYXJyOiAnXFx1Mjk3NicsXG5cdGx0cXVlc3Q6ICdcXHUyQTdCJyxcblx0bHRyaTogJ1xcdTI1QzMnLFxuXHRsdHJpZTogJ1xcdTIyQjQnLFxuXHRsdHJpZjogJ1xcdTI1QzInLFxuXHRsdHJQYXI6ICdcXHUyOTk2Jyxcblx0bHVyZHNoYXI6ICdcXHUyOTRBJyxcblx0bHVydWhhcjogJ1xcdTI5NjYnLFxuXHRsdmVydG5lcXE6ICdcXHUyMjY4XFx1RkUwMCcsXG5cdGx2bkU6ICdcXHUyMjY4XFx1RkUwMCcsXG5cdG1hY3I6ICdcXHUwMEFGJyxcblx0bWFsZTogJ1xcdTI2NDInLFxuXHRtYWx0OiAnXFx1MjcyMCcsXG5cdG1hbHRlc2U6ICdcXHUyNzIwJyxcblx0TWFwOiAnXFx1MjkwNScsXG5cdG1hcDogJ1xcdTIxQTYnLFxuXHRtYXBzdG86ICdcXHUyMUE2Jyxcblx0bWFwc3RvZG93bjogJ1xcdTIxQTcnLFxuXHRtYXBzdG9sZWZ0OiAnXFx1MjFBNCcsXG5cdG1hcHN0b3VwOiAnXFx1MjFBNScsXG5cdG1hcmtlcjogJ1xcdTI1QUUnLFxuXHRtY29tbWE6ICdcXHUyQTI5Jyxcblx0TWN5OiAnXFx1MDQxQycsXG5cdG1jeTogJ1xcdTA0M0MnLFxuXHRtZGFzaDogJ1xcdTIwMTQnLFxuXHRtRERvdDogJ1xcdTIyM0EnLFxuXHRtZWFzdXJlZGFuZ2xlOiAnXFx1MjIyMScsXG5cdE1lZGl1bVNwYWNlOiAnXFx1MjA1RicsXG5cdE1lbGxpbnRyZjogJ1xcdTIxMzMnLFxuXHRNZnI6ICdcXHVEODM1XFx1REQxMCcsXG5cdG1mcjogJ1xcdUQ4MzVcXHVERDJBJyxcblx0bWhvOiAnXFx1MjEyNycsXG5cdG1pY3JvOiAnXFx1MDBCNScsXG5cdG1pZDogJ1xcdTIyMjMnLFxuXHRtaWRhc3Q6ICdcXHUwMDJBJyxcblx0bWlkY2lyOiAnXFx1MkFGMCcsXG5cdG1pZGRvdDogJ1xcdTAwQjcnLFxuXHRtaW51czogJ1xcdTIyMTInLFxuXHRtaW51c2I6ICdcXHUyMjlGJyxcblx0bWludXNkOiAnXFx1MjIzOCcsXG5cdG1pbnVzZHU6ICdcXHUyQTJBJyxcblx0TWludXNQbHVzOiAnXFx1MjIxMycsXG5cdG1sY3A6ICdcXHUyQURCJyxcblx0bWxkcjogJ1xcdTIwMjYnLFxuXHRtbnBsdXM6ICdcXHUyMjEzJyxcblx0bW9kZWxzOiAnXFx1MjJBNycsXG5cdE1vcGY6ICdcXHVEODM1XFx1REQ0NCcsXG5cdG1vcGY6ICdcXHVEODM1XFx1REQ1RScsXG5cdG1wOiAnXFx1MjIxMycsXG5cdE1zY3I6ICdcXHUyMTMzJyxcblx0bXNjcjogJ1xcdUQ4MzVcXHVEQ0MyJyxcblx0bXN0cG9zOiAnXFx1MjIzRScsXG5cdE11OiAnXFx1MDM5QycsXG5cdG11OiAnXFx1MDNCQycsXG5cdG11bHRpbWFwOiAnXFx1MjJCOCcsXG5cdG11bWFwOiAnXFx1MjJCOCcsXG5cdG5hYmxhOiAnXFx1MjIwNycsXG5cdE5hY3V0ZTogJ1xcdTAxNDMnLFxuXHRuYWN1dGU6ICdcXHUwMTQ0Jyxcblx0bmFuZzogJ1xcdTIyMjBcXHUyMEQyJyxcblx0bmFwOiAnXFx1MjI0OScsXG5cdG5hcEU6ICdcXHUyQTcwXFx1MDMzOCcsXG5cdG5hcGlkOiAnXFx1MjI0QlxcdTAzMzgnLFxuXHRuYXBvczogJ1xcdTAxNDknLFxuXHRuYXBwcm94OiAnXFx1MjI0OScsXG5cdG5hdHVyOiAnXFx1MjY2RScsXG5cdG5hdHVyYWw6ICdcXHUyNjZFJyxcblx0bmF0dXJhbHM6ICdcXHUyMTE1Jyxcblx0bmJzcDogJ1xcdTAwQTAnLFxuXHRuYnVtcDogJ1xcdTIyNEVcXHUwMzM4Jyxcblx0bmJ1bXBlOiAnXFx1MjI0RlxcdTAzMzgnLFxuXHRuY2FwOiAnXFx1MkE0MycsXG5cdE5jYXJvbjogJ1xcdTAxNDcnLFxuXHRuY2Fyb246ICdcXHUwMTQ4Jyxcblx0TmNlZGlsOiAnXFx1MDE0NScsXG5cdG5jZWRpbDogJ1xcdTAxNDYnLFxuXHRuY29uZzogJ1xcdTIyNDcnLFxuXHRuY29uZ2RvdDogJ1xcdTJBNkRcXHUwMzM4Jyxcblx0bmN1cDogJ1xcdTJBNDInLFxuXHROY3k6ICdcXHUwNDFEJyxcblx0bmN5OiAnXFx1MDQzRCcsXG5cdG5kYXNoOiAnXFx1MjAxMycsXG5cdG5lOiAnXFx1MjI2MCcsXG5cdG5lYXJoazogJ1xcdTI5MjQnLFxuXHRuZUFycjogJ1xcdTIxRDcnLFxuXHRuZWFycjogJ1xcdTIxOTcnLFxuXHRuZWFycm93OiAnXFx1MjE5NycsXG5cdG5lZG90OiAnXFx1MjI1MFxcdTAzMzgnLFxuXHROZWdhdGl2ZU1lZGl1bVNwYWNlOiAnXFx1MjAwQicsXG5cdE5lZ2F0aXZlVGhpY2tTcGFjZTogJ1xcdTIwMEInLFxuXHROZWdhdGl2ZVRoaW5TcGFjZTogJ1xcdTIwMEInLFxuXHROZWdhdGl2ZVZlcnlUaGluU3BhY2U6ICdcXHUyMDBCJyxcblx0bmVxdWl2OiAnXFx1MjI2MicsXG5cdG5lc2VhcjogJ1xcdTI5MjgnLFxuXHRuZXNpbTogJ1xcdTIyNDJcXHUwMzM4Jyxcblx0TmVzdGVkR3JlYXRlckdyZWF0ZXI6ICdcXHUyMjZCJyxcblx0TmVzdGVkTGVzc0xlc3M6ICdcXHUyMjZBJyxcblx0TmV3TGluZTogJ1xcdTAwMEEnLFxuXHRuZXhpc3Q6ICdcXHUyMjA0Jyxcblx0bmV4aXN0czogJ1xcdTIyMDQnLFxuXHROZnI6ICdcXHVEODM1XFx1REQxMScsXG5cdG5mcjogJ1xcdUQ4MzVcXHVERDJCJyxcblx0bmdFOiAnXFx1MjI2N1xcdTAzMzgnLFxuXHRuZ2U6ICdcXHUyMjcxJyxcblx0bmdlcTogJ1xcdTIyNzEnLFxuXHRuZ2VxcTogJ1xcdTIyNjdcXHUwMzM4Jyxcblx0bmdlcXNsYW50OiAnXFx1MkE3RVxcdTAzMzgnLFxuXHRuZ2VzOiAnXFx1MkE3RVxcdTAzMzgnLFxuXHRuR2c6ICdcXHUyMkQ5XFx1MDMzOCcsXG5cdG5nc2ltOiAnXFx1MjI3NScsXG5cdG5HdDogJ1xcdTIyNkJcXHUyMEQyJyxcblx0bmd0OiAnXFx1MjI2RicsXG5cdG5ndHI6ICdcXHUyMjZGJyxcblx0bkd0djogJ1xcdTIyNkJcXHUwMzM4Jyxcblx0bmhBcnI6ICdcXHUyMUNFJyxcblx0bmhhcnI6ICdcXHUyMUFFJyxcblx0bmhwYXI6ICdcXHUyQUYyJyxcblx0bmk6ICdcXHUyMjBCJyxcblx0bmlzOiAnXFx1MjJGQycsXG5cdG5pc2Q6ICdcXHUyMkZBJyxcblx0bml2OiAnXFx1MjIwQicsXG5cdE5KY3k6ICdcXHUwNDBBJyxcblx0bmpjeTogJ1xcdTA0NUEnLFxuXHRubEFycjogJ1xcdTIxQ0QnLFxuXHRubGFycjogJ1xcdTIxOUEnLFxuXHRubGRyOiAnXFx1MjAyNScsXG5cdG5sRTogJ1xcdTIyNjZcXHUwMzM4Jyxcblx0bmxlOiAnXFx1MjI3MCcsXG5cdG5MZWZ0YXJyb3c6ICdcXHUyMUNEJyxcblx0bmxlZnRhcnJvdzogJ1xcdTIxOUEnLFxuXHRuTGVmdHJpZ2h0YXJyb3c6ICdcXHUyMUNFJyxcblx0bmxlZnRyaWdodGFycm93OiAnXFx1MjFBRScsXG5cdG5sZXE6ICdcXHUyMjcwJyxcblx0bmxlcXE6ICdcXHUyMjY2XFx1MDMzOCcsXG5cdG5sZXFzbGFudDogJ1xcdTJBN0RcXHUwMzM4Jyxcblx0bmxlczogJ1xcdTJBN0RcXHUwMzM4Jyxcblx0bmxlc3M6ICdcXHUyMjZFJyxcblx0bkxsOiAnXFx1MjJEOFxcdTAzMzgnLFxuXHRubHNpbTogJ1xcdTIyNzQnLFxuXHRuTHQ6ICdcXHUyMjZBXFx1MjBEMicsXG5cdG5sdDogJ1xcdTIyNkUnLFxuXHRubHRyaTogJ1xcdTIyRUEnLFxuXHRubHRyaWU6ICdcXHUyMkVDJyxcblx0bkx0djogJ1xcdTIyNkFcXHUwMzM4Jyxcblx0bm1pZDogJ1xcdTIyMjQnLFxuXHROb0JyZWFrOiAnXFx1MjA2MCcsXG5cdE5vbkJyZWFraW5nU3BhY2U6ICdcXHUwMEEwJyxcblx0Tm9wZjogJ1xcdTIxMTUnLFxuXHRub3BmOiAnXFx1RDgzNVxcdURENUYnLFxuXHROb3Q6ICdcXHUyQUVDJyxcblx0bm90OiAnXFx1MDBBQycsXG5cdE5vdENvbmdydWVudDogJ1xcdTIyNjInLFxuXHROb3RDdXBDYXA6ICdcXHUyMjZEJyxcblx0Tm90RG91YmxlVmVydGljYWxCYXI6ICdcXHUyMjI2Jyxcblx0Tm90RWxlbWVudDogJ1xcdTIyMDknLFxuXHROb3RFcXVhbDogJ1xcdTIyNjAnLFxuXHROb3RFcXVhbFRpbGRlOiAnXFx1MjI0MlxcdTAzMzgnLFxuXHROb3RFeGlzdHM6ICdcXHUyMjA0Jyxcblx0Tm90R3JlYXRlcjogJ1xcdTIyNkYnLFxuXHROb3RHcmVhdGVyRXF1YWw6ICdcXHUyMjcxJyxcblx0Tm90R3JlYXRlckZ1bGxFcXVhbDogJ1xcdTIyNjdcXHUwMzM4Jyxcblx0Tm90R3JlYXRlckdyZWF0ZXI6ICdcXHUyMjZCXFx1MDMzOCcsXG5cdE5vdEdyZWF0ZXJMZXNzOiAnXFx1MjI3OScsXG5cdE5vdEdyZWF0ZXJTbGFudEVxdWFsOiAnXFx1MkE3RVxcdTAzMzgnLFxuXHROb3RHcmVhdGVyVGlsZGU6ICdcXHUyMjc1Jyxcblx0Tm90SHVtcERvd25IdW1wOiAnXFx1MjI0RVxcdTAzMzgnLFxuXHROb3RIdW1wRXF1YWw6ICdcXHUyMjRGXFx1MDMzOCcsXG5cdG5vdGluOiAnXFx1MjIwOScsXG5cdG5vdGluZG90OiAnXFx1MjJGNVxcdTAzMzgnLFxuXHRub3RpbkU6ICdcXHUyMkY5XFx1MDMzOCcsXG5cdG5vdGludmE6ICdcXHUyMjA5Jyxcblx0bm90aW52YjogJ1xcdTIyRjcnLFxuXHRub3RpbnZjOiAnXFx1MjJGNicsXG5cdE5vdExlZnRUcmlhbmdsZTogJ1xcdTIyRUEnLFxuXHROb3RMZWZ0VHJpYW5nbGVCYXI6ICdcXHUyOUNGXFx1MDMzOCcsXG5cdE5vdExlZnRUcmlhbmdsZUVxdWFsOiAnXFx1MjJFQycsXG5cdE5vdExlc3M6ICdcXHUyMjZFJyxcblx0Tm90TGVzc0VxdWFsOiAnXFx1MjI3MCcsXG5cdE5vdExlc3NHcmVhdGVyOiAnXFx1MjI3OCcsXG5cdE5vdExlc3NMZXNzOiAnXFx1MjI2QVxcdTAzMzgnLFxuXHROb3RMZXNzU2xhbnRFcXVhbDogJ1xcdTJBN0RcXHUwMzM4Jyxcblx0Tm90TGVzc1RpbGRlOiAnXFx1MjI3NCcsXG5cdE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiAnXFx1MkFBMlxcdTAzMzgnLFxuXHROb3ROZXN0ZWRMZXNzTGVzczogJ1xcdTJBQTFcXHUwMzM4Jyxcblx0bm90bmk6ICdcXHUyMjBDJyxcblx0bm90bml2YTogJ1xcdTIyMEMnLFxuXHRub3RuaXZiOiAnXFx1MjJGRScsXG5cdG5vdG5pdmM6ICdcXHUyMkZEJyxcblx0Tm90UHJlY2VkZXM6ICdcXHUyMjgwJyxcblx0Tm90UHJlY2VkZXNFcXVhbDogJ1xcdTJBQUZcXHUwMzM4Jyxcblx0Tm90UHJlY2VkZXNTbGFudEVxdWFsOiAnXFx1MjJFMCcsXG5cdE5vdFJldmVyc2VFbGVtZW50OiAnXFx1MjIwQycsXG5cdE5vdFJpZ2h0VHJpYW5nbGU6ICdcXHUyMkVCJyxcblx0Tm90UmlnaHRUcmlhbmdsZUJhcjogJ1xcdTI5RDBcXHUwMzM4Jyxcblx0Tm90UmlnaHRUcmlhbmdsZUVxdWFsOiAnXFx1MjJFRCcsXG5cdE5vdFNxdWFyZVN1YnNldDogJ1xcdTIyOEZcXHUwMzM4Jyxcblx0Tm90U3F1YXJlU3Vic2V0RXF1YWw6ICdcXHUyMkUyJyxcblx0Tm90U3F1YXJlU3VwZXJzZXQ6ICdcXHUyMjkwXFx1MDMzOCcsXG5cdE5vdFNxdWFyZVN1cGVyc2V0RXF1YWw6ICdcXHUyMkUzJyxcblx0Tm90U3Vic2V0OiAnXFx1MjI4MlxcdTIwRDInLFxuXHROb3RTdWJzZXRFcXVhbDogJ1xcdTIyODgnLFxuXHROb3RTdWNjZWVkczogJ1xcdTIyODEnLFxuXHROb3RTdWNjZWVkc0VxdWFsOiAnXFx1MkFCMFxcdTAzMzgnLFxuXHROb3RTdWNjZWVkc1NsYW50RXF1YWw6ICdcXHUyMkUxJyxcblx0Tm90U3VjY2VlZHNUaWxkZTogJ1xcdTIyN0ZcXHUwMzM4Jyxcblx0Tm90U3VwZXJzZXQ6ICdcXHUyMjgzXFx1MjBEMicsXG5cdE5vdFN1cGVyc2V0RXF1YWw6ICdcXHUyMjg5Jyxcblx0Tm90VGlsZGU6ICdcXHUyMjQxJyxcblx0Tm90VGlsZGVFcXVhbDogJ1xcdTIyNDQnLFxuXHROb3RUaWxkZUZ1bGxFcXVhbDogJ1xcdTIyNDcnLFxuXHROb3RUaWxkZVRpbGRlOiAnXFx1MjI0OScsXG5cdE5vdFZlcnRpY2FsQmFyOiAnXFx1MjIyNCcsXG5cdG5wYXI6ICdcXHUyMjI2Jyxcblx0bnBhcmFsbGVsOiAnXFx1MjIyNicsXG5cdG5wYXJzbDogJ1xcdTJBRkRcXHUyMEU1Jyxcblx0bnBhcnQ6ICdcXHUyMjAyXFx1MDMzOCcsXG5cdG5wb2xpbnQ6ICdcXHUyQTE0Jyxcblx0bnByOiAnXFx1MjI4MCcsXG5cdG5wcmN1ZTogJ1xcdTIyRTAnLFxuXHRucHJlOiAnXFx1MkFBRlxcdTAzMzgnLFxuXHRucHJlYzogJ1xcdTIyODAnLFxuXHRucHJlY2VxOiAnXFx1MkFBRlxcdTAzMzgnLFxuXHRuckFycjogJ1xcdTIxQ0YnLFxuXHRucmFycjogJ1xcdTIxOUInLFxuXHRucmFycmM6ICdcXHUyOTMzXFx1MDMzOCcsXG5cdG5yYXJydzogJ1xcdTIxOURcXHUwMzM4Jyxcblx0blJpZ2h0YXJyb3c6ICdcXHUyMUNGJyxcblx0bnJpZ2h0YXJyb3c6ICdcXHUyMTlCJyxcblx0bnJ0cmk6ICdcXHUyMkVCJyxcblx0bnJ0cmllOiAnXFx1MjJFRCcsXG5cdG5zYzogJ1xcdTIyODEnLFxuXHRuc2NjdWU6ICdcXHUyMkUxJyxcblx0bnNjZTogJ1xcdTJBQjBcXHUwMzM4Jyxcblx0TnNjcjogJ1xcdUQ4MzVcXHVEQ0E5Jyxcblx0bnNjcjogJ1xcdUQ4MzVcXHVEQ0MzJyxcblx0bnNob3J0bWlkOiAnXFx1MjIyNCcsXG5cdG5zaG9ydHBhcmFsbGVsOiAnXFx1MjIyNicsXG5cdG5zaW06ICdcXHUyMjQxJyxcblx0bnNpbWU6ICdcXHUyMjQ0Jyxcblx0bnNpbWVxOiAnXFx1MjI0NCcsXG5cdG5zbWlkOiAnXFx1MjIyNCcsXG5cdG5zcGFyOiAnXFx1MjIyNicsXG5cdG5zcXN1YmU6ICdcXHUyMkUyJyxcblx0bnNxc3VwZTogJ1xcdTIyRTMnLFxuXHRuc3ViOiAnXFx1MjI4NCcsXG5cdG5zdWJFOiAnXFx1MkFDNVxcdTAzMzgnLFxuXHRuc3ViZTogJ1xcdTIyODgnLFxuXHRuc3Vic2V0OiAnXFx1MjI4MlxcdTIwRDInLFxuXHRuc3Vic2V0ZXE6ICdcXHUyMjg4Jyxcblx0bnN1YnNldGVxcTogJ1xcdTJBQzVcXHUwMzM4Jyxcblx0bnN1Y2M6ICdcXHUyMjgxJyxcblx0bnN1Y2NlcTogJ1xcdTJBQjBcXHUwMzM4Jyxcblx0bnN1cDogJ1xcdTIyODUnLFxuXHRuc3VwRTogJ1xcdTJBQzZcXHUwMzM4Jyxcblx0bnN1cGU6ICdcXHUyMjg5Jyxcblx0bnN1cHNldDogJ1xcdTIyODNcXHUyMEQyJyxcblx0bnN1cHNldGVxOiAnXFx1MjI4OScsXG5cdG5zdXBzZXRlcXE6ICdcXHUyQUM2XFx1MDMzOCcsXG5cdG50Z2w6ICdcXHUyMjc5Jyxcblx0TnRpbGRlOiAnXFx1MDBEMScsXG5cdG50aWxkZTogJ1xcdTAwRjEnLFxuXHRudGxnOiAnXFx1MjI3OCcsXG5cdG50cmlhbmdsZWxlZnQ6ICdcXHUyMkVBJyxcblx0bnRyaWFuZ2xlbGVmdGVxOiAnXFx1MjJFQycsXG5cdG50cmlhbmdsZXJpZ2h0OiAnXFx1MjJFQicsXG5cdG50cmlhbmdsZXJpZ2h0ZXE6ICdcXHUyMkVEJyxcblx0TnU6ICdcXHUwMzlEJyxcblx0bnU6ICdcXHUwM0JEJyxcblx0bnVtOiAnXFx1MDAyMycsXG5cdG51bWVybzogJ1xcdTIxMTYnLFxuXHRudW1zcDogJ1xcdTIwMDcnLFxuXHRudmFwOiAnXFx1MjI0RFxcdTIwRDInLFxuXHRuVkRhc2g6ICdcXHUyMkFGJyxcblx0blZkYXNoOiAnXFx1MjJBRScsXG5cdG52RGFzaDogJ1xcdTIyQUQnLFxuXHRudmRhc2g6ICdcXHUyMkFDJyxcblx0bnZnZTogJ1xcdTIyNjVcXHUyMEQyJyxcblx0bnZndDogJ1xcdTAwM0VcXHUyMEQyJyxcblx0bnZIYXJyOiAnXFx1MjkwNCcsXG5cdG52aW5maW46ICdcXHUyOURFJyxcblx0bnZsQXJyOiAnXFx1MjkwMicsXG5cdG52bGU6ICdcXHUyMjY0XFx1MjBEMicsXG5cdG52bHQ6ICdcXHUwMDNDXFx1MjBEMicsXG5cdG52bHRyaWU6ICdcXHUyMkI0XFx1MjBEMicsXG5cdG52ckFycjogJ1xcdTI5MDMnLFxuXHRudnJ0cmllOiAnXFx1MjJCNVxcdTIwRDInLFxuXHRudnNpbTogJ1xcdTIyM0NcXHUyMEQyJyxcblx0bndhcmhrOiAnXFx1MjkyMycsXG5cdG53QXJyOiAnXFx1MjFENicsXG5cdG53YXJyOiAnXFx1MjE5NicsXG5cdG53YXJyb3c6ICdcXHUyMTk2Jyxcblx0bnduZWFyOiAnXFx1MjkyNycsXG5cdE9hY3V0ZTogJ1xcdTAwRDMnLFxuXHRvYWN1dGU6ICdcXHUwMEYzJyxcblx0b2FzdDogJ1xcdTIyOUInLFxuXHRvY2lyOiAnXFx1MjI5QScsXG5cdE9jaXJjOiAnXFx1MDBENCcsXG5cdG9jaXJjOiAnXFx1MDBGNCcsXG5cdE9jeTogJ1xcdTA0MUUnLFxuXHRvY3k6ICdcXHUwNDNFJyxcblx0b2Rhc2g6ICdcXHUyMjlEJyxcblx0T2RibGFjOiAnXFx1MDE1MCcsXG5cdG9kYmxhYzogJ1xcdTAxNTEnLFxuXHRvZGl2OiAnXFx1MkEzOCcsXG5cdG9kb3Q6ICdcXHUyMjk5Jyxcblx0b2Rzb2xkOiAnXFx1MjlCQycsXG5cdE9FbGlnOiAnXFx1MDE1MicsXG5cdG9lbGlnOiAnXFx1MDE1MycsXG5cdG9mY2lyOiAnXFx1MjlCRicsXG5cdE9mcjogJ1xcdUQ4MzVcXHVERDEyJyxcblx0b2ZyOiAnXFx1RDgzNVxcdUREMkMnLFxuXHRvZ29uOiAnXFx1MDJEQicsXG5cdE9ncmF2ZTogJ1xcdTAwRDInLFxuXHRvZ3JhdmU6ICdcXHUwMEYyJyxcblx0b2d0OiAnXFx1MjlDMScsXG5cdG9oYmFyOiAnXFx1MjlCNScsXG5cdG9obTogJ1xcdTAzQTknLFxuXHRvaW50OiAnXFx1MjIyRScsXG5cdG9sYXJyOiAnXFx1MjFCQScsXG5cdG9sY2lyOiAnXFx1MjlCRScsXG5cdG9sY3Jvc3M6ICdcXHUyOUJCJyxcblx0b2xpbmU6ICdcXHUyMDNFJyxcblx0b2x0OiAnXFx1MjlDMCcsXG5cdE9tYWNyOiAnXFx1MDE0QycsXG5cdG9tYWNyOiAnXFx1MDE0RCcsXG5cdE9tZWdhOiAnXFx1MDNBOScsXG5cdG9tZWdhOiAnXFx1MDNDOScsXG5cdE9taWNyb246ICdcXHUwMzlGJyxcblx0b21pY3JvbjogJ1xcdTAzQkYnLFxuXHRvbWlkOiAnXFx1MjlCNicsXG5cdG9taW51czogJ1xcdTIyOTYnLFxuXHRPb3BmOiAnXFx1RDgzNVxcdURENDYnLFxuXHRvb3BmOiAnXFx1RDgzNVxcdURENjAnLFxuXHRvcGFyOiAnXFx1MjlCNycsXG5cdE9wZW5DdXJseURvdWJsZVF1b3RlOiAnXFx1MjAxQycsXG5cdE9wZW5DdXJseVF1b3RlOiAnXFx1MjAxOCcsXG5cdG9wZXJwOiAnXFx1MjlCOScsXG5cdG9wbHVzOiAnXFx1MjI5NScsXG5cdE9yOiAnXFx1MkE1NCcsXG5cdG9yOiAnXFx1MjIyOCcsXG5cdG9yYXJyOiAnXFx1MjFCQicsXG5cdG9yZDogJ1xcdTJBNUQnLFxuXHRvcmRlcjogJ1xcdTIxMzQnLFxuXHRvcmRlcm9mOiAnXFx1MjEzNCcsXG5cdG9yZGY6ICdcXHUwMEFBJyxcblx0b3JkbTogJ1xcdTAwQkEnLFxuXHRvcmlnb2Y6ICdcXHUyMkI2Jyxcblx0b3JvcjogJ1xcdTJBNTYnLFxuXHRvcnNsb3BlOiAnXFx1MkE1NycsXG5cdG9ydjogJ1xcdTJBNUInLFxuXHRvUzogJ1xcdTI0QzgnLFxuXHRPc2NyOiAnXFx1RDgzNVxcdURDQUEnLFxuXHRvc2NyOiAnXFx1MjEzNCcsXG5cdE9zbGFzaDogJ1xcdTAwRDgnLFxuXHRvc2xhc2g6ICdcXHUwMEY4Jyxcblx0b3NvbDogJ1xcdTIyOTgnLFxuXHRPdGlsZGU6ICdcXHUwMEQ1Jyxcblx0b3RpbGRlOiAnXFx1MDBGNScsXG5cdE90aW1lczogJ1xcdTJBMzcnLFxuXHRvdGltZXM6ICdcXHUyMjk3Jyxcblx0b3RpbWVzYXM6ICdcXHUyQTM2Jyxcblx0T3VtbDogJ1xcdTAwRDYnLFxuXHRvdW1sOiAnXFx1MDBGNicsXG5cdG92YmFyOiAnXFx1MjMzRCcsXG5cdE92ZXJCYXI6ICdcXHUyMDNFJyxcblx0T3ZlckJyYWNlOiAnXFx1MjNERScsXG5cdE92ZXJCcmFja2V0OiAnXFx1MjNCNCcsXG5cdE92ZXJQYXJlbnRoZXNpczogJ1xcdTIzREMnLFxuXHRwYXI6ICdcXHUyMjI1Jyxcblx0cGFyYTogJ1xcdTAwQjYnLFxuXHRwYXJhbGxlbDogJ1xcdTIyMjUnLFxuXHRwYXJzaW06ICdcXHUyQUYzJyxcblx0cGFyc2w6ICdcXHUyQUZEJyxcblx0cGFydDogJ1xcdTIyMDInLFxuXHRQYXJ0aWFsRDogJ1xcdTIyMDInLFxuXHRQY3k6ICdcXHUwNDFGJyxcblx0cGN5OiAnXFx1MDQzRicsXG5cdHBlcmNudDogJ1xcdTAwMjUnLFxuXHRwZXJpb2Q6ICdcXHUwMDJFJyxcblx0cGVybWlsOiAnXFx1MjAzMCcsXG5cdHBlcnA6ICdcXHUyMkE1Jyxcblx0cGVydGVuazogJ1xcdTIwMzEnLFxuXHRQZnI6ICdcXHVEODM1XFx1REQxMycsXG5cdHBmcjogJ1xcdUQ4MzVcXHVERDJEJyxcblx0UGhpOiAnXFx1MDNBNicsXG5cdHBoaTogJ1xcdTAzQzYnLFxuXHRwaGl2OiAnXFx1MDNENScsXG5cdHBobW1hdDogJ1xcdTIxMzMnLFxuXHRwaG9uZTogJ1xcdTI2MEUnLFxuXHRQaTogJ1xcdTAzQTAnLFxuXHRwaTogJ1xcdTAzQzAnLFxuXHRwaXRjaGZvcms6ICdcXHUyMkQ0Jyxcblx0cGl2OiAnXFx1MDNENicsXG5cdHBsYW5jazogJ1xcdTIxMEYnLFxuXHRwbGFuY2toOiAnXFx1MjEwRScsXG5cdHBsYW5rdjogJ1xcdTIxMEYnLFxuXHRwbHVzOiAnXFx1MDAyQicsXG5cdHBsdXNhY2lyOiAnXFx1MkEyMycsXG5cdHBsdXNiOiAnXFx1MjI5RScsXG5cdHBsdXNjaXI6ICdcXHUyQTIyJyxcblx0cGx1c2RvOiAnXFx1MjIxNCcsXG5cdHBsdXNkdTogJ1xcdTJBMjUnLFxuXHRwbHVzZTogJ1xcdTJBNzInLFxuXHRQbHVzTWludXM6ICdcXHUwMEIxJyxcblx0cGx1c21uOiAnXFx1MDBCMScsXG5cdHBsdXNzaW06ICdcXHUyQTI2Jyxcblx0cGx1c3R3bzogJ1xcdTJBMjcnLFxuXHRwbTogJ1xcdTAwQjEnLFxuXHRQb2luY2FyZXBsYW5lOiAnXFx1MjEwQycsXG5cdHBvaW50aW50OiAnXFx1MkExNScsXG5cdFBvcGY6ICdcXHUyMTE5Jyxcblx0cG9wZjogJ1xcdUQ4MzVcXHVERDYxJyxcblx0cG91bmQ6ICdcXHUwMEEzJyxcblx0UHI6ICdcXHUyQUJCJyxcblx0cHI6ICdcXHUyMjdBJyxcblx0cHJhcDogJ1xcdTJBQjcnLFxuXHRwcmN1ZTogJ1xcdTIyN0MnLFxuXHRwckU6ICdcXHUyQUIzJyxcblx0cHJlOiAnXFx1MkFBRicsXG5cdHByZWM6ICdcXHUyMjdBJyxcblx0cHJlY2FwcHJveDogJ1xcdTJBQjcnLFxuXHRwcmVjY3VybHllcTogJ1xcdTIyN0MnLFxuXHRQcmVjZWRlczogJ1xcdTIyN0EnLFxuXHRQcmVjZWRlc0VxdWFsOiAnXFx1MkFBRicsXG5cdFByZWNlZGVzU2xhbnRFcXVhbDogJ1xcdTIyN0MnLFxuXHRQcmVjZWRlc1RpbGRlOiAnXFx1MjI3RScsXG5cdHByZWNlcTogJ1xcdTJBQUYnLFxuXHRwcmVjbmFwcHJveDogJ1xcdTJBQjknLFxuXHRwcmVjbmVxcTogJ1xcdTJBQjUnLFxuXHRwcmVjbnNpbTogJ1xcdTIyRTgnLFxuXHRwcmVjc2ltOiAnXFx1MjI3RScsXG5cdFByaW1lOiAnXFx1MjAzMycsXG5cdHByaW1lOiAnXFx1MjAzMicsXG5cdHByaW1lczogJ1xcdTIxMTknLFxuXHRwcm5hcDogJ1xcdTJBQjknLFxuXHRwcm5FOiAnXFx1MkFCNScsXG5cdHBybnNpbTogJ1xcdTIyRTgnLFxuXHRwcm9kOiAnXFx1MjIwRicsXG5cdFByb2R1Y3Q6ICdcXHUyMjBGJyxcblx0cHJvZmFsYXI6ICdcXHUyMzJFJyxcblx0cHJvZmxpbmU6ICdcXHUyMzEyJyxcblx0cHJvZnN1cmY6ICdcXHUyMzEzJyxcblx0cHJvcDogJ1xcdTIyMUQnLFxuXHRQcm9wb3J0aW9uOiAnXFx1MjIzNycsXG5cdFByb3BvcnRpb25hbDogJ1xcdTIyMUQnLFxuXHRwcm9wdG86ICdcXHUyMjFEJyxcblx0cHJzaW06ICdcXHUyMjdFJyxcblx0cHJ1cmVsOiAnXFx1MjJCMCcsXG5cdFBzY3I6ICdcXHVEODM1XFx1RENBQicsXG5cdHBzY3I6ICdcXHVEODM1XFx1RENDNScsXG5cdFBzaTogJ1xcdTAzQTgnLFxuXHRwc2k6ICdcXHUwM0M4Jyxcblx0cHVuY3NwOiAnXFx1MjAwOCcsXG5cdFFmcjogJ1xcdUQ4MzVcXHVERDE0Jyxcblx0cWZyOiAnXFx1RDgzNVxcdUREMkUnLFxuXHRxaW50OiAnXFx1MkEwQycsXG5cdFFvcGY6ICdcXHUyMTFBJyxcblx0cW9wZjogJ1xcdUQ4MzVcXHVERDYyJyxcblx0cXByaW1lOiAnXFx1MjA1NycsXG5cdFFzY3I6ICdcXHVEODM1XFx1RENBQycsXG5cdHFzY3I6ICdcXHVEODM1XFx1RENDNicsXG5cdHF1YXRlcm5pb25zOiAnXFx1MjEwRCcsXG5cdHF1YXRpbnQ6ICdcXHUyQTE2Jyxcblx0cXVlc3Q6ICdcXHUwMDNGJyxcblx0cXVlc3RlcTogJ1xcdTIyNUYnLFxuXHRRVU9UOiAnXFx1MDAyMicsXG5cdHF1b3Q6ICdcXHUwMDIyJyxcblx0ckFhcnI6ICdcXHUyMURCJyxcblx0cmFjZTogJ1xcdTIyM0RcXHUwMzMxJyxcblx0UmFjdXRlOiAnXFx1MDE1NCcsXG5cdHJhY3V0ZTogJ1xcdTAxNTUnLFxuXHRyYWRpYzogJ1xcdTIyMUEnLFxuXHRyYWVtcHR5djogJ1xcdTI5QjMnLFxuXHRSYW5nOiAnXFx1MjdFQicsXG5cdHJhbmc6ICdcXHUyN0U5Jyxcblx0cmFuZ2Q6ICdcXHUyOTkyJyxcblx0cmFuZ2U6ICdcXHUyOUE1Jyxcblx0cmFuZ2xlOiAnXFx1MjdFOScsXG5cdHJhcXVvOiAnXFx1MDBCQicsXG5cdFJhcnI6ICdcXHUyMUEwJyxcblx0ckFycjogJ1xcdTIxRDInLFxuXHRyYXJyOiAnXFx1MjE5MicsXG5cdHJhcnJhcDogJ1xcdTI5NzUnLFxuXHRyYXJyYjogJ1xcdTIxRTUnLFxuXHRyYXJyYmZzOiAnXFx1MjkyMCcsXG5cdHJhcnJjOiAnXFx1MjkzMycsXG5cdHJhcnJmczogJ1xcdTI5MUUnLFxuXHRyYXJyaGs6ICdcXHUyMUFBJyxcblx0cmFycmxwOiAnXFx1MjFBQycsXG5cdHJhcnJwbDogJ1xcdTI5NDUnLFxuXHRyYXJyc2ltOiAnXFx1Mjk3NCcsXG5cdFJhcnJ0bDogJ1xcdTI5MTYnLFxuXHRyYXJydGw6ICdcXHUyMUEzJyxcblx0cmFycnc6ICdcXHUyMTlEJyxcblx0ckF0YWlsOiAnXFx1MjkxQycsXG5cdHJhdGFpbDogJ1xcdTI5MUEnLFxuXHRyYXRpbzogJ1xcdTIyMzYnLFxuXHRyYXRpb25hbHM6ICdcXHUyMTFBJyxcblx0UkJhcnI6ICdcXHUyOTEwJyxcblx0ckJhcnI6ICdcXHUyOTBGJyxcblx0cmJhcnI6ICdcXHUyOTBEJyxcblx0cmJicms6ICdcXHUyNzczJyxcblx0cmJyYWNlOiAnXFx1MDA3RCcsXG5cdHJicmFjazogJ1xcdTAwNUQnLFxuXHRyYnJrZTogJ1xcdTI5OEMnLFxuXHRyYnJrc2xkOiAnXFx1Mjk4RScsXG5cdHJicmtzbHU6ICdcXHUyOTkwJyxcblx0UmNhcm9uOiAnXFx1MDE1OCcsXG5cdHJjYXJvbjogJ1xcdTAxNTknLFxuXHRSY2VkaWw6ICdcXHUwMTU2Jyxcblx0cmNlZGlsOiAnXFx1MDE1NycsXG5cdHJjZWlsOiAnXFx1MjMwOScsXG5cdHJjdWI6ICdcXHUwMDdEJyxcblx0UmN5OiAnXFx1MDQyMCcsXG5cdHJjeTogJ1xcdTA0NDAnLFxuXHRyZGNhOiAnXFx1MjkzNycsXG5cdHJkbGRoYXI6ICdcXHUyOTY5Jyxcblx0cmRxdW86ICdcXHUyMDFEJyxcblx0cmRxdW9yOiAnXFx1MjAxRCcsXG5cdHJkc2g6ICdcXHUyMUIzJyxcblx0UmU6ICdcXHUyMTFDJyxcblx0cmVhbDogJ1xcdTIxMUMnLFxuXHRyZWFsaW5lOiAnXFx1MjExQicsXG5cdHJlYWxwYXJ0OiAnXFx1MjExQycsXG5cdHJlYWxzOiAnXFx1MjExRCcsXG5cdHJlY3Q6ICdcXHUyNUFEJyxcblx0UkVHOiAnXFx1MDBBRScsXG5cdHJlZzogJ1xcdTAwQUUnLFxuXHRSZXZlcnNlRWxlbWVudDogJ1xcdTIyMEInLFxuXHRSZXZlcnNlRXF1aWxpYnJpdW06ICdcXHUyMUNCJyxcblx0UmV2ZXJzZVVwRXF1aWxpYnJpdW06ICdcXHUyOTZGJyxcblx0cmZpc2h0OiAnXFx1Mjk3RCcsXG5cdHJmbG9vcjogJ1xcdTIzMEInLFxuXHRSZnI6ICdcXHUyMTFDJyxcblx0cmZyOiAnXFx1RDgzNVxcdUREMkYnLFxuXHRySGFyOiAnXFx1Mjk2NCcsXG5cdHJoYXJkOiAnXFx1MjFDMScsXG5cdHJoYXJ1OiAnXFx1MjFDMCcsXG5cdHJoYXJ1bDogJ1xcdTI5NkMnLFxuXHRSaG86ICdcXHUwM0ExJyxcblx0cmhvOiAnXFx1MDNDMScsXG5cdHJob3Y6ICdcXHUwM0YxJyxcblx0UmlnaHRBbmdsZUJyYWNrZXQ6ICdcXHUyN0U5Jyxcblx0UmlnaHRBcnJvdzogJ1xcdTIxOTInLFxuXHRSaWdodGFycm93OiAnXFx1MjFEMicsXG5cdHJpZ2h0YXJyb3c6ICdcXHUyMTkyJyxcblx0UmlnaHRBcnJvd0JhcjogJ1xcdTIxRTUnLFxuXHRSaWdodEFycm93TGVmdEFycm93OiAnXFx1MjFDNCcsXG5cdHJpZ2h0YXJyb3d0YWlsOiAnXFx1MjFBMycsXG5cdFJpZ2h0Q2VpbGluZzogJ1xcdTIzMDknLFxuXHRSaWdodERvdWJsZUJyYWNrZXQ6ICdcXHUyN0U3Jyxcblx0UmlnaHREb3duVGVlVmVjdG9yOiAnXFx1Mjk1RCcsXG5cdFJpZ2h0RG93blZlY3RvcjogJ1xcdTIxQzInLFxuXHRSaWdodERvd25WZWN0b3JCYXI6ICdcXHUyOTU1Jyxcblx0UmlnaHRGbG9vcjogJ1xcdTIzMEInLFxuXHRyaWdodGhhcnBvb25kb3duOiAnXFx1MjFDMScsXG5cdHJpZ2h0aGFycG9vbnVwOiAnXFx1MjFDMCcsXG5cdHJpZ2h0bGVmdGFycm93czogJ1xcdTIxQzQnLFxuXHRyaWdodGxlZnRoYXJwb29uczogJ1xcdTIxQ0MnLFxuXHRyaWdodHJpZ2h0YXJyb3dzOiAnXFx1MjFDOScsXG5cdHJpZ2h0c3F1aWdhcnJvdzogJ1xcdTIxOUQnLFxuXHRSaWdodFRlZTogJ1xcdTIyQTInLFxuXHRSaWdodFRlZUFycm93OiAnXFx1MjFBNicsXG5cdFJpZ2h0VGVlVmVjdG9yOiAnXFx1Mjk1QicsXG5cdHJpZ2h0dGhyZWV0aW1lczogJ1xcdTIyQ0MnLFxuXHRSaWdodFRyaWFuZ2xlOiAnXFx1MjJCMycsXG5cdFJpZ2h0VHJpYW5nbGVCYXI6ICdcXHUyOUQwJyxcblx0UmlnaHRUcmlhbmdsZUVxdWFsOiAnXFx1MjJCNScsXG5cdFJpZ2h0VXBEb3duVmVjdG9yOiAnXFx1Mjk0RicsXG5cdFJpZ2h0VXBUZWVWZWN0b3I6ICdcXHUyOTVDJyxcblx0UmlnaHRVcFZlY3RvcjogJ1xcdTIxQkUnLFxuXHRSaWdodFVwVmVjdG9yQmFyOiAnXFx1Mjk1NCcsXG5cdFJpZ2h0VmVjdG9yOiAnXFx1MjFDMCcsXG5cdFJpZ2h0VmVjdG9yQmFyOiAnXFx1Mjk1MycsXG5cdHJpbmc6ICdcXHUwMkRBJyxcblx0cmlzaW5nZG90c2VxOiAnXFx1MjI1MycsXG5cdHJsYXJyOiAnXFx1MjFDNCcsXG5cdHJsaGFyOiAnXFx1MjFDQycsXG5cdHJsbTogJ1xcdTIwMEYnLFxuXHRybW91c3Q6ICdcXHUyM0IxJyxcblx0cm1vdXN0YWNoZTogJ1xcdTIzQjEnLFxuXHRybm1pZDogJ1xcdTJBRUUnLFxuXHRyb2FuZzogJ1xcdTI3RUQnLFxuXHRyb2FycjogJ1xcdTIxRkUnLFxuXHRyb2JyazogJ1xcdTI3RTcnLFxuXHRyb3BhcjogJ1xcdTI5ODYnLFxuXHRSb3BmOiAnXFx1MjExRCcsXG5cdHJvcGY6ICdcXHVEODM1XFx1REQ2MycsXG5cdHJvcGx1czogJ1xcdTJBMkUnLFxuXHRyb3RpbWVzOiAnXFx1MkEzNScsXG5cdFJvdW5kSW1wbGllczogJ1xcdTI5NzAnLFxuXHRycGFyOiAnXFx1MDAyOScsXG5cdHJwYXJndDogJ1xcdTI5OTQnLFxuXHRycHBvbGludDogJ1xcdTJBMTInLFxuXHRycmFycjogJ1xcdTIxQzknLFxuXHRScmlnaHRhcnJvdzogJ1xcdTIxREInLFxuXHRyc2FxdW86ICdcXHUyMDNBJyxcblx0UnNjcjogJ1xcdTIxMUInLFxuXHRyc2NyOiAnXFx1RDgzNVxcdURDQzcnLFxuXHRSc2g6ICdcXHUyMUIxJyxcblx0cnNoOiAnXFx1MjFCMScsXG5cdHJzcWI6ICdcXHUwMDVEJyxcblx0cnNxdW86ICdcXHUyMDE5Jyxcblx0cnNxdW9yOiAnXFx1MjAxOScsXG5cdHJ0aHJlZTogJ1xcdTIyQ0MnLFxuXHRydGltZXM6ICdcXHUyMkNBJyxcblx0cnRyaTogJ1xcdTI1QjknLFxuXHRydHJpZTogJ1xcdTIyQjUnLFxuXHRydHJpZjogJ1xcdTI1QjgnLFxuXHRydHJpbHRyaTogJ1xcdTI5Q0UnLFxuXHRSdWxlRGVsYXllZDogJ1xcdTI5RjQnLFxuXHRydWx1aGFyOiAnXFx1Mjk2OCcsXG5cdHJ4OiAnXFx1MjExRScsXG5cdFNhY3V0ZTogJ1xcdTAxNUEnLFxuXHRzYWN1dGU6ICdcXHUwMTVCJyxcblx0c2JxdW86ICdcXHUyMDFBJyxcblx0U2M6ICdcXHUyQUJDJyxcblx0c2M6ICdcXHUyMjdCJyxcblx0c2NhcDogJ1xcdTJBQjgnLFxuXHRTY2Fyb246ICdcXHUwMTYwJyxcblx0c2Nhcm9uOiAnXFx1MDE2MScsXG5cdHNjY3VlOiAnXFx1MjI3RCcsXG5cdHNjRTogJ1xcdTJBQjQnLFxuXHRzY2U6ICdcXHUyQUIwJyxcblx0U2NlZGlsOiAnXFx1MDE1RScsXG5cdHNjZWRpbDogJ1xcdTAxNUYnLFxuXHRTY2lyYzogJ1xcdTAxNUMnLFxuXHRzY2lyYzogJ1xcdTAxNUQnLFxuXHRzY25hcDogJ1xcdTJBQkEnLFxuXHRzY25FOiAnXFx1MkFCNicsXG5cdHNjbnNpbTogJ1xcdTIyRTknLFxuXHRzY3BvbGludDogJ1xcdTJBMTMnLFxuXHRzY3NpbTogJ1xcdTIyN0YnLFxuXHRTY3k6ICdcXHUwNDIxJyxcblx0c2N5OiAnXFx1MDQ0MScsXG5cdHNkb3Q6ICdcXHUyMkM1Jyxcblx0c2RvdGI6ICdcXHUyMkExJyxcblx0c2RvdGU6ICdcXHUyQTY2Jyxcblx0c2VhcmhrOiAnXFx1MjkyNScsXG5cdHNlQXJyOiAnXFx1MjFEOCcsXG5cdHNlYXJyOiAnXFx1MjE5OCcsXG5cdHNlYXJyb3c6ICdcXHUyMTk4Jyxcblx0c2VjdDogJ1xcdTAwQTcnLFxuXHRzZW1pOiAnXFx1MDAzQicsXG5cdHNlc3dhcjogJ1xcdTI5MjknLFxuXHRzZXRtaW51czogJ1xcdTIyMTYnLFxuXHRzZXRtbjogJ1xcdTIyMTYnLFxuXHRzZXh0OiAnXFx1MjczNicsXG5cdFNmcjogJ1xcdUQ4MzVcXHVERDE2Jyxcblx0c2ZyOiAnXFx1RDgzNVxcdUREMzAnLFxuXHRzZnJvd246ICdcXHUyMzIyJyxcblx0c2hhcnA6ICdcXHUyNjZGJyxcblx0U0hDSGN5OiAnXFx1MDQyOScsXG5cdHNoY2hjeTogJ1xcdTA0NDknLFxuXHRTSGN5OiAnXFx1MDQyOCcsXG5cdHNoY3k6ICdcXHUwNDQ4Jyxcblx0U2hvcnREb3duQXJyb3c6ICdcXHUyMTkzJyxcblx0U2hvcnRMZWZ0QXJyb3c6ICdcXHUyMTkwJyxcblx0c2hvcnRtaWQ6ICdcXHUyMjIzJyxcblx0c2hvcnRwYXJhbGxlbDogJ1xcdTIyMjUnLFxuXHRTaG9ydFJpZ2h0QXJyb3c6ICdcXHUyMTkyJyxcblx0U2hvcnRVcEFycm93OiAnXFx1MjE5MScsXG5cdHNoeTogJ1xcdTAwQUQnLFxuXHRTaWdtYTogJ1xcdTAzQTMnLFxuXHRzaWdtYTogJ1xcdTAzQzMnLFxuXHRzaWdtYWY6ICdcXHUwM0MyJyxcblx0c2lnbWF2OiAnXFx1MDNDMicsXG5cdHNpbTogJ1xcdTIyM0MnLFxuXHRzaW1kb3Q6ICdcXHUyQTZBJyxcblx0c2ltZTogJ1xcdTIyNDMnLFxuXHRzaW1lcTogJ1xcdTIyNDMnLFxuXHRzaW1nOiAnXFx1MkE5RScsXG5cdHNpbWdFOiAnXFx1MkFBMCcsXG5cdHNpbWw6ICdcXHUyQTlEJyxcblx0c2ltbEU6ICdcXHUyQTlGJyxcblx0c2ltbmU6ICdcXHUyMjQ2Jyxcblx0c2ltcGx1czogJ1xcdTJBMjQnLFxuXHRzaW1yYXJyOiAnXFx1Mjk3MicsXG5cdHNsYXJyOiAnXFx1MjE5MCcsXG5cdFNtYWxsQ2lyY2xlOiAnXFx1MjIxOCcsXG5cdHNtYWxsc2V0bWludXM6ICdcXHUyMjE2Jyxcblx0c21hc2hwOiAnXFx1MkEzMycsXG5cdHNtZXBhcnNsOiAnXFx1MjlFNCcsXG5cdHNtaWQ6ICdcXHUyMjIzJyxcblx0c21pbGU6ICdcXHUyMzIzJyxcblx0c210OiAnXFx1MkFBQScsXG5cdHNtdGU6ICdcXHUyQUFDJyxcblx0c210ZXM6ICdcXHUyQUFDXFx1RkUwMCcsXG5cdFNPRlRjeTogJ1xcdTA0MkMnLFxuXHRzb2Z0Y3k6ICdcXHUwNDRDJyxcblx0c29sOiAnXFx1MDAyRicsXG5cdHNvbGI6ICdcXHUyOUM0Jyxcblx0c29sYmFyOiAnXFx1MjMzRicsXG5cdFNvcGY6ICdcXHVEODM1XFx1REQ0QScsXG5cdHNvcGY6ICdcXHVEODM1XFx1REQ2NCcsXG5cdHNwYWRlczogJ1xcdTI2NjAnLFxuXHRzcGFkZXN1aXQ6ICdcXHUyNjYwJyxcblx0c3BhcjogJ1xcdTIyMjUnLFxuXHRzcWNhcDogJ1xcdTIyOTMnLFxuXHRzcWNhcHM6ICdcXHUyMjkzXFx1RkUwMCcsXG5cdHNxY3VwOiAnXFx1MjI5NCcsXG5cdHNxY3VwczogJ1xcdTIyOTRcXHVGRTAwJyxcblx0U3FydDogJ1xcdTIyMUEnLFxuXHRzcXN1YjogJ1xcdTIyOEYnLFxuXHRzcXN1YmU6ICdcXHUyMjkxJyxcblx0c3FzdWJzZXQ6ICdcXHUyMjhGJyxcblx0c3FzdWJzZXRlcTogJ1xcdTIyOTEnLFxuXHRzcXN1cDogJ1xcdTIyOTAnLFxuXHRzcXN1cGU6ICdcXHUyMjkyJyxcblx0c3FzdXBzZXQ6ICdcXHUyMjkwJyxcblx0c3FzdXBzZXRlcTogJ1xcdTIyOTInLFxuXHRzcXU6ICdcXHUyNUExJyxcblx0U3F1YXJlOiAnXFx1MjVBMScsXG5cdHNxdWFyZTogJ1xcdTI1QTEnLFxuXHRTcXVhcmVJbnRlcnNlY3Rpb246ICdcXHUyMjkzJyxcblx0U3F1YXJlU3Vic2V0OiAnXFx1MjI4RicsXG5cdFNxdWFyZVN1YnNldEVxdWFsOiAnXFx1MjI5MScsXG5cdFNxdWFyZVN1cGVyc2V0OiAnXFx1MjI5MCcsXG5cdFNxdWFyZVN1cGVyc2V0RXF1YWw6ICdcXHUyMjkyJyxcblx0U3F1YXJlVW5pb246ICdcXHUyMjk0Jyxcblx0c3F1YXJmOiAnXFx1MjVBQScsXG5cdHNxdWY6ICdcXHUyNUFBJyxcblx0c3JhcnI6ICdcXHUyMTkyJyxcblx0U3NjcjogJ1xcdUQ4MzVcXHVEQ0FFJyxcblx0c3NjcjogJ1xcdUQ4MzVcXHVEQ0M4Jyxcblx0c3NldG1uOiAnXFx1MjIxNicsXG5cdHNzbWlsZTogJ1xcdTIzMjMnLFxuXHRzc3RhcmY6ICdcXHUyMkM2Jyxcblx0U3RhcjogJ1xcdTIyQzYnLFxuXHRzdGFyOiAnXFx1MjYwNicsXG5cdHN0YXJmOiAnXFx1MjYwNScsXG5cdHN0cmFpZ2h0ZXBzaWxvbjogJ1xcdTAzRjUnLFxuXHRzdHJhaWdodHBoaTogJ1xcdTAzRDUnLFxuXHRzdHJuczogJ1xcdTAwQUYnLFxuXHRTdWI6ICdcXHUyMkQwJyxcblx0c3ViOiAnXFx1MjI4MicsXG5cdHN1YmRvdDogJ1xcdTJBQkQnLFxuXHRzdWJFOiAnXFx1MkFDNScsXG5cdHN1YmU6ICdcXHUyMjg2Jyxcblx0c3ViZWRvdDogJ1xcdTJBQzMnLFxuXHRzdWJtdWx0OiAnXFx1MkFDMScsXG5cdHN1Ym5FOiAnXFx1MkFDQicsXG5cdHN1Ym5lOiAnXFx1MjI4QScsXG5cdHN1YnBsdXM6ICdcXHUyQUJGJyxcblx0c3VicmFycjogJ1xcdTI5NzknLFxuXHRTdWJzZXQ6ICdcXHUyMkQwJyxcblx0c3Vic2V0OiAnXFx1MjI4MicsXG5cdHN1YnNldGVxOiAnXFx1MjI4NicsXG5cdHN1YnNldGVxcTogJ1xcdTJBQzUnLFxuXHRTdWJzZXRFcXVhbDogJ1xcdTIyODYnLFxuXHRzdWJzZXRuZXE6ICdcXHUyMjhBJyxcblx0c3Vic2V0bmVxcTogJ1xcdTJBQ0InLFxuXHRzdWJzaW06ICdcXHUyQUM3Jyxcblx0c3Vic3ViOiAnXFx1MkFENScsXG5cdHN1YnN1cDogJ1xcdTJBRDMnLFxuXHRzdWNjOiAnXFx1MjI3QicsXG5cdHN1Y2NhcHByb3g6ICdcXHUyQUI4Jyxcblx0c3VjY2N1cmx5ZXE6ICdcXHUyMjdEJyxcblx0U3VjY2VlZHM6ICdcXHUyMjdCJyxcblx0U3VjY2VlZHNFcXVhbDogJ1xcdTJBQjAnLFxuXHRTdWNjZWVkc1NsYW50RXF1YWw6ICdcXHUyMjdEJyxcblx0U3VjY2VlZHNUaWxkZTogJ1xcdTIyN0YnLFxuXHRzdWNjZXE6ICdcXHUyQUIwJyxcblx0c3VjY25hcHByb3g6ICdcXHUyQUJBJyxcblx0c3VjY25lcXE6ICdcXHUyQUI2Jyxcblx0c3VjY25zaW06ICdcXHUyMkU5Jyxcblx0c3VjY3NpbTogJ1xcdTIyN0YnLFxuXHRTdWNoVGhhdDogJ1xcdTIyMEInLFxuXHRTdW06ICdcXHUyMjExJyxcblx0c3VtOiAnXFx1MjIxMScsXG5cdHN1bmc6ICdcXHUyNjZBJyxcblx0U3VwOiAnXFx1MjJEMScsXG5cdHN1cDogJ1xcdTIyODMnLFxuXHRzdXAxOiAnXFx1MDBCOScsXG5cdHN1cDI6ICdcXHUwMEIyJyxcblx0c3VwMzogJ1xcdTAwQjMnLFxuXHRzdXBkb3Q6ICdcXHUyQUJFJyxcblx0c3VwZHN1YjogJ1xcdTJBRDgnLFxuXHRzdXBFOiAnXFx1MkFDNicsXG5cdHN1cGU6ICdcXHUyMjg3Jyxcblx0c3VwZWRvdDogJ1xcdTJBQzQnLFxuXHRTdXBlcnNldDogJ1xcdTIyODMnLFxuXHRTdXBlcnNldEVxdWFsOiAnXFx1MjI4NycsXG5cdHN1cGhzb2w6ICdcXHUyN0M5Jyxcblx0c3VwaHN1YjogJ1xcdTJBRDcnLFxuXHRzdXBsYXJyOiAnXFx1Mjk3QicsXG5cdHN1cG11bHQ6ICdcXHUyQUMyJyxcblx0c3VwbkU6ICdcXHUyQUNDJyxcblx0c3VwbmU6ICdcXHUyMjhCJyxcblx0c3VwcGx1czogJ1xcdTJBQzAnLFxuXHRTdXBzZXQ6ICdcXHUyMkQxJyxcblx0c3Vwc2V0OiAnXFx1MjI4MycsXG5cdHN1cHNldGVxOiAnXFx1MjI4NycsXG5cdHN1cHNldGVxcTogJ1xcdTJBQzYnLFxuXHRzdXBzZXRuZXE6ICdcXHUyMjhCJyxcblx0c3Vwc2V0bmVxcTogJ1xcdTJBQ0MnLFxuXHRzdXBzaW06ICdcXHUyQUM4Jyxcblx0c3Vwc3ViOiAnXFx1MkFENCcsXG5cdHN1cHN1cDogJ1xcdTJBRDYnLFxuXHRzd2FyaGs6ICdcXHUyOTI2Jyxcblx0c3dBcnI6ICdcXHUyMUQ5Jyxcblx0c3dhcnI6ICdcXHUyMTk5Jyxcblx0c3dhcnJvdzogJ1xcdTIxOTknLFxuXHRzd253YXI6ICdcXHUyOTJBJyxcblx0c3psaWc6ICdcXHUwMERGJyxcblx0VGFiOiAnXFx1MDAwOScsXG5cdHRhcmdldDogJ1xcdTIzMTYnLFxuXHRUYXU6ICdcXHUwM0E0Jyxcblx0dGF1OiAnXFx1MDNDNCcsXG5cdHRicms6ICdcXHUyM0I0Jyxcblx0VGNhcm9uOiAnXFx1MDE2NCcsXG5cdHRjYXJvbjogJ1xcdTAxNjUnLFxuXHRUY2VkaWw6ICdcXHUwMTYyJyxcblx0dGNlZGlsOiAnXFx1MDE2MycsXG5cdFRjeTogJ1xcdTA0MjInLFxuXHR0Y3k6ICdcXHUwNDQyJyxcblx0dGRvdDogJ1xcdTIwREInLFxuXHR0ZWxyZWM6ICdcXHUyMzE1Jyxcblx0VGZyOiAnXFx1RDgzNVxcdUREMTcnLFxuXHR0ZnI6ICdcXHVEODM1XFx1REQzMScsXG5cdHRoZXJlNDogJ1xcdTIyMzQnLFxuXHRUaGVyZWZvcmU6ICdcXHUyMjM0Jyxcblx0dGhlcmVmb3JlOiAnXFx1MjIzNCcsXG5cdFRoZXRhOiAnXFx1MDM5OCcsXG5cdHRoZXRhOiAnXFx1MDNCOCcsXG5cdHRoZXRhc3ltOiAnXFx1MDNEMScsXG5cdHRoZXRhdjogJ1xcdTAzRDEnLFxuXHR0aGlja2FwcHJveDogJ1xcdTIyNDgnLFxuXHR0aGlja3NpbTogJ1xcdTIyM0MnLFxuXHRUaGlja1NwYWNlOiAnXFx1MjA1RlxcdTIwMEEnLFxuXHR0aGluc3A6ICdcXHUyMDA5Jyxcblx0VGhpblNwYWNlOiAnXFx1MjAwOScsXG5cdHRoa2FwOiAnXFx1MjI0OCcsXG5cdHRoa3NpbTogJ1xcdTIyM0MnLFxuXHRUSE9STjogJ1xcdTAwREUnLFxuXHR0aG9ybjogJ1xcdTAwRkUnLFxuXHRUaWxkZTogJ1xcdTIyM0MnLFxuXHR0aWxkZTogJ1xcdTAyREMnLFxuXHRUaWxkZUVxdWFsOiAnXFx1MjI0MycsXG5cdFRpbGRlRnVsbEVxdWFsOiAnXFx1MjI0NScsXG5cdFRpbGRlVGlsZGU6ICdcXHUyMjQ4Jyxcblx0dGltZXM6ICdcXHUwMEQ3Jyxcblx0dGltZXNiOiAnXFx1MjJBMCcsXG5cdHRpbWVzYmFyOiAnXFx1MkEzMScsXG5cdHRpbWVzZDogJ1xcdTJBMzAnLFxuXHR0aW50OiAnXFx1MjIyRCcsXG5cdHRvZWE6ICdcXHUyOTI4Jyxcblx0dG9wOiAnXFx1MjJBNCcsXG5cdHRvcGJvdDogJ1xcdTIzMzYnLFxuXHR0b3BjaXI6ICdcXHUyQUYxJyxcblx0VG9wZjogJ1xcdUQ4MzVcXHVERDRCJyxcblx0dG9wZjogJ1xcdUQ4MzVcXHVERDY1Jyxcblx0dG9wZm9yazogJ1xcdTJBREEnLFxuXHR0b3NhOiAnXFx1MjkyOScsXG5cdHRwcmltZTogJ1xcdTIwMzQnLFxuXHRUUkFERTogJ1xcdTIxMjInLFxuXHR0cmFkZTogJ1xcdTIxMjInLFxuXHR0cmlhbmdsZTogJ1xcdTI1QjUnLFxuXHR0cmlhbmdsZWRvd246ICdcXHUyNUJGJyxcblx0dHJpYW5nbGVsZWZ0OiAnXFx1MjVDMycsXG5cdHRyaWFuZ2xlbGVmdGVxOiAnXFx1MjJCNCcsXG5cdHRyaWFuZ2xlcTogJ1xcdTIyNUMnLFxuXHR0cmlhbmdsZXJpZ2h0OiAnXFx1MjVCOScsXG5cdHRyaWFuZ2xlcmlnaHRlcTogJ1xcdTIyQjUnLFxuXHR0cmlkb3Q6ICdcXHUyNUVDJyxcblx0dHJpZTogJ1xcdTIyNUMnLFxuXHR0cmltaW51czogJ1xcdTJBM0EnLFxuXHRUcmlwbGVEb3Q6ICdcXHUyMERCJyxcblx0dHJpcGx1czogJ1xcdTJBMzknLFxuXHR0cmlzYjogJ1xcdTI5Q0QnLFxuXHR0cml0aW1lOiAnXFx1MkEzQicsXG5cdHRycGV6aXVtOiAnXFx1MjNFMicsXG5cdFRzY3I6ICdcXHVEODM1XFx1RENBRicsXG5cdHRzY3I6ICdcXHVEODM1XFx1RENDOScsXG5cdFRTY3k6ICdcXHUwNDI2Jyxcblx0dHNjeTogJ1xcdTA0NDYnLFxuXHRUU0hjeTogJ1xcdTA0MEInLFxuXHR0c2hjeTogJ1xcdTA0NUInLFxuXHRUc3Ryb2s6ICdcXHUwMTY2Jyxcblx0dHN0cm9rOiAnXFx1MDE2NycsXG5cdHR3aXh0OiAnXFx1MjI2QycsXG5cdHR3b2hlYWRsZWZ0YXJyb3c6ICdcXHUyMTlFJyxcblx0dHdvaGVhZHJpZ2h0YXJyb3c6ICdcXHUyMUEwJyxcblx0VWFjdXRlOiAnXFx1MDBEQScsXG5cdHVhY3V0ZTogJ1xcdTAwRkEnLFxuXHRVYXJyOiAnXFx1MjE5RicsXG5cdHVBcnI6ICdcXHUyMUQxJyxcblx0dWFycjogJ1xcdTIxOTEnLFxuXHRVYXJyb2NpcjogJ1xcdTI5NDknLFxuXHRVYnJjeTogJ1xcdTA0MEUnLFxuXHR1YnJjeTogJ1xcdTA0NUUnLFxuXHRVYnJldmU6ICdcXHUwMTZDJyxcblx0dWJyZXZlOiAnXFx1MDE2RCcsXG5cdFVjaXJjOiAnXFx1MDBEQicsXG5cdHVjaXJjOiAnXFx1MDBGQicsXG5cdFVjeTogJ1xcdTA0MjMnLFxuXHR1Y3k6ICdcXHUwNDQzJyxcblx0dWRhcnI6ICdcXHUyMUM1Jyxcblx0VWRibGFjOiAnXFx1MDE3MCcsXG5cdHVkYmxhYzogJ1xcdTAxNzEnLFxuXHR1ZGhhcjogJ1xcdTI5NkUnLFxuXHR1ZmlzaHQ6ICdcXHUyOTdFJyxcblx0VWZyOiAnXFx1RDgzNVxcdUREMTgnLFxuXHR1ZnI6ICdcXHVEODM1XFx1REQzMicsXG5cdFVncmF2ZTogJ1xcdTAwRDknLFxuXHR1Z3JhdmU6ICdcXHUwMEY5Jyxcblx0dUhhcjogJ1xcdTI5NjMnLFxuXHR1aGFybDogJ1xcdTIxQkYnLFxuXHR1aGFycjogJ1xcdTIxQkUnLFxuXHR1aGJsazogJ1xcdTI1ODAnLFxuXHR1bGNvcm46ICdcXHUyMzFDJyxcblx0dWxjb3JuZXI6ICdcXHUyMzFDJyxcblx0dWxjcm9wOiAnXFx1MjMwRicsXG5cdHVsdHJpOiAnXFx1MjVGOCcsXG5cdFVtYWNyOiAnXFx1MDE2QScsXG5cdHVtYWNyOiAnXFx1MDE2QicsXG5cdHVtbDogJ1xcdTAwQTgnLFxuXHRVbmRlckJhcjogJ1xcdTAwNUYnLFxuXHRVbmRlckJyYWNlOiAnXFx1MjNERicsXG5cdFVuZGVyQnJhY2tldDogJ1xcdTIzQjUnLFxuXHRVbmRlclBhcmVudGhlc2lzOiAnXFx1MjNERCcsXG5cdFVuaW9uOiAnXFx1MjJDMycsXG5cdFVuaW9uUGx1czogJ1xcdTIyOEUnLFxuXHRVb2dvbjogJ1xcdTAxNzInLFxuXHR1b2dvbjogJ1xcdTAxNzMnLFxuXHRVb3BmOiAnXFx1RDgzNVxcdURENEMnLFxuXHR1b3BmOiAnXFx1RDgzNVxcdURENjYnLFxuXHRVcEFycm93OiAnXFx1MjE5MScsXG5cdFVwYXJyb3c6ICdcXHUyMUQxJyxcblx0dXBhcnJvdzogJ1xcdTIxOTEnLFxuXHRVcEFycm93QmFyOiAnXFx1MjkxMicsXG5cdFVwQXJyb3dEb3duQXJyb3c6ICdcXHUyMUM1Jyxcblx0VXBEb3duQXJyb3c6ICdcXHUyMTk1Jyxcblx0VXBkb3duYXJyb3c6ICdcXHUyMUQ1Jyxcblx0dXBkb3duYXJyb3c6ICdcXHUyMTk1Jyxcblx0VXBFcXVpbGlicml1bTogJ1xcdTI5NkUnLFxuXHR1cGhhcnBvb25sZWZ0OiAnXFx1MjFCRicsXG5cdHVwaGFycG9vbnJpZ2h0OiAnXFx1MjFCRScsXG5cdHVwbHVzOiAnXFx1MjI4RScsXG5cdFVwcGVyTGVmdEFycm93OiAnXFx1MjE5NicsXG5cdFVwcGVyUmlnaHRBcnJvdzogJ1xcdTIxOTcnLFxuXHRVcHNpOiAnXFx1MDNEMicsXG5cdHVwc2k6ICdcXHUwM0M1Jyxcblx0dXBzaWg6ICdcXHUwM0QyJyxcblx0VXBzaWxvbjogJ1xcdTAzQTUnLFxuXHR1cHNpbG9uOiAnXFx1MDNDNScsXG5cdFVwVGVlOiAnXFx1MjJBNScsXG5cdFVwVGVlQXJyb3c6ICdcXHUyMUE1Jyxcblx0dXB1cGFycm93czogJ1xcdTIxQzgnLFxuXHR1cmNvcm46ICdcXHUyMzFEJyxcblx0dXJjb3JuZXI6ICdcXHUyMzFEJyxcblx0dXJjcm9wOiAnXFx1MjMwRScsXG5cdFVyaW5nOiAnXFx1MDE2RScsXG5cdHVyaW5nOiAnXFx1MDE2RicsXG5cdHVydHJpOiAnXFx1MjVGOScsXG5cdFVzY3I6ICdcXHVEODM1XFx1RENCMCcsXG5cdHVzY3I6ICdcXHVEODM1XFx1RENDQScsXG5cdHV0ZG90OiAnXFx1MjJGMCcsXG5cdFV0aWxkZTogJ1xcdTAxNjgnLFxuXHR1dGlsZGU6ICdcXHUwMTY5Jyxcblx0dXRyaTogJ1xcdTI1QjUnLFxuXHR1dHJpZjogJ1xcdTI1QjQnLFxuXHR1dWFycjogJ1xcdTIxQzgnLFxuXHRVdW1sOiAnXFx1MDBEQycsXG5cdHV1bWw6ICdcXHUwMEZDJyxcblx0dXdhbmdsZTogJ1xcdTI5QTcnLFxuXHR2YW5ncnQ6ICdcXHUyOTlDJyxcblx0dmFyZXBzaWxvbjogJ1xcdTAzRjUnLFxuXHR2YXJrYXBwYTogJ1xcdTAzRjAnLFxuXHR2YXJub3RoaW5nOiAnXFx1MjIwNScsXG5cdHZhcnBoaTogJ1xcdTAzRDUnLFxuXHR2YXJwaTogJ1xcdTAzRDYnLFxuXHR2YXJwcm9wdG86ICdcXHUyMjFEJyxcblx0dkFycjogJ1xcdTIxRDUnLFxuXHR2YXJyOiAnXFx1MjE5NScsXG5cdHZhcnJobzogJ1xcdTAzRjEnLFxuXHR2YXJzaWdtYTogJ1xcdTAzQzInLFxuXHR2YXJzdWJzZXRuZXE6ICdcXHUyMjhBXFx1RkUwMCcsXG5cdHZhcnN1YnNldG5lcXE6ICdcXHUyQUNCXFx1RkUwMCcsXG5cdHZhcnN1cHNldG5lcTogJ1xcdTIyOEJcXHVGRTAwJyxcblx0dmFyc3Vwc2V0bmVxcTogJ1xcdTJBQ0NcXHVGRTAwJyxcblx0dmFydGhldGE6ICdcXHUwM0QxJyxcblx0dmFydHJpYW5nbGVsZWZ0OiAnXFx1MjJCMicsXG5cdHZhcnRyaWFuZ2xlcmlnaHQ6ICdcXHUyMkIzJyxcblx0VmJhcjogJ1xcdTJBRUInLFxuXHR2QmFyOiAnXFx1MkFFOCcsXG5cdHZCYXJ2OiAnXFx1MkFFOScsXG5cdFZjeTogJ1xcdTA0MTInLFxuXHR2Y3k6ICdcXHUwNDMyJyxcblx0VkRhc2g6ICdcXHUyMkFCJyxcblx0VmRhc2g6ICdcXHUyMkE5Jyxcblx0dkRhc2g6ICdcXHUyMkE4Jyxcblx0dmRhc2g6ICdcXHUyMkEyJyxcblx0VmRhc2hsOiAnXFx1MkFFNicsXG5cdFZlZTogJ1xcdTIyQzEnLFxuXHR2ZWU6ICdcXHUyMjI4Jyxcblx0dmVlYmFyOiAnXFx1MjJCQicsXG5cdHZlZWVxOiAnXFx1MjI1QScsXG5cdHZlbGxpcDogJ1xcdTIyRUUnLFxuXHRWZXJiYXI6ICdcXHUyMDE2Jyxcblx0dmVyYmFyOiAnXFx1MDA3QycsXG5cdFZlcnQ6ICdcXHUyMDE2Jyxcblx0dmVydDogJ1xcdTAwN0MnLFxuXHRWZXJ0aWNhbEJhcjogJ1xcdTIyMjMnLFxuXHRWZXJ0aWNhbExpbmU6ICdcXHUwMDdDJyxcblx0VmVydGljYWxTZXBhcmF0b3I6ICdcXHUyNzU4Jyxcblx0VmVydGljYWxUaWxkZTogJ1xcdTIyNDAnLFxuXHRWZXJ5VGhpblNwYWNlOiAnXFx1MjAwQScsXG5cdFZmcjogJ1xcdUQ4MzVcXHVERDE5Jyxcblx0dmZyOiAnXFx1RDgzNVxcdUREMzMnLFxuXHR2bHRyaTogJ1xcdTIyQjInLFxuXHR2bnN1YjogJ1xcdTIyODJcXHUyMEQyJyxcblx0dm5zdXA6ICdcXHUyMjgzXFx1MjBEMicsXG5cdFZvcGY6ICdcXHVEODM1XFx1REQ0RCcsXG5cdHZvcGY6ICdcXHVEODM1XFx1REQ2NycsXG5cdHZwcm9wOiAnXFx1MjIxRCcsXG5cdHZydHJpOiAnXFx1MjJCMycsXG5cdFZzY3I6ICdcXHVEODM1XFx1RENCMScsXG5cdHZzY3I6ICdcXHVEODM1XFx1RENDQicsXG5cdHZzdWJuRTogJ1xcdTJBQ0JcXHVGRTAwJyxcblx0dnN1Ym5lOiAnXFx1MjI4QVxcdUZFMDAnLFxuXHR2c3VwbkU6ICdcXHUyQUNDXFx1RkUwMCcsXG5cdHZzdXBuZTogJ1xcdTIyOEJcXHVGRTAwJyxcblx0VnZkYXNoOiAnXFx1MjJBQScsXG5cdHZ6aWd6YWc6ICdcXHUyOTlBJyxcblx0V2NpcmM6ICdcXHUwMTc0Jyxcblx0d2NpcmM6ICdcXHUwMTc1Jyxcblx0d2VkYmFyOiAnXFx1MkE1RicsXG5cdFdlZGdlOiAnXFx1MjJDMCcsXG5cdHdlZGdlOiAnXFx1MjIyNycsXG5cdHdlZGdlcTogJ1xcdTIyNTknLFxuXHR3ZWllcnA6ICdcXHUyMTE4Jyxcblx0V2ZyOiAnXFx1RDgzNVxcdUREMUEnLFxuXHR3ZnI6ICdcXHVEODM1XFx1REQzNCcsXG5cdFdvcGY6ICdcXHVEODM1XFx1REQ0RScsXG5cdHdvcGY6ICdcXHVEODM1XFx1REQ2OCcsXG5cdHdwOiAnXFx1MjExOCcsXG5cdHdyOiAnXFx1MjI0MCcsXG5cdHdyZWF0aDogJ1xcdTIyNDAnLFxuXHRXc2NyOiAnXFx1RDgzNVxcdURDQjInLFxuXHR3c2NyOiAnXFx1RDgzNVxcdURDQ0MnLFxuXHR4Y2FwOiAnXFx1MjJDMicsXG5cdHhjaXJjOiAnXFx1MjVFRicsXG5cdHhjdXA6ICdcXHUyMkMzJyxcblx0eGR0cmk6ICdcXHUyNUJEJyxcblx0WGZyOiAnXFx1RDgzNVxcdUREMUInLFxuXHR4ZnI6ICdcXHVEODM1XFx1REQzNScsXG5cdHhoQXJyOiAnXFx1MjdGQScsXG5cdHhoYXJyOiAnXFx1MjdGNycsXG5cdFhpOiAnXFx1MDM5RScsXG5cdHhpOiAnXFx1MDNCRScsXG5cdHhsQXJyOiAnXFx1MjdGOCcsXG5cdHhsYXJyOiAnXFx1MjdGNScsXG5cdHhtYXA6ICdcXHUyN0ZDJyxcblx0eG5pczogJ1xcdTIyRkInLFxuXHR4b2RvdDogJ1xcdTJBMDAnLFxuXHRYb3BmOiAnXFx1RDgzNVxcdURENEYnLFxuXHR4b3BmOiAnXFx1RDgzNVxcdURENjknLFxuXHR4b3BsdXM6ICdcXHUyQTAxJyxcblx0eG90aW1lOiAnXFx1MkEwMicsXG5cdHhyQXJyOiAnXFx1MjdGOScsXG5cdHhyYXJyOiAnXFx1MjdGNicsXG5cdFhzY3I6ICdcXHVEODM1XFx1RENCMycsXG5cdHhzY3I6ICdcXHVEODM1XFx1RENDRCcsXG5cdHhzcWN1cDogJ1xcdTJBMDYnLFxuXHR4dXBsdXM6ICdcXHUyQTA0Jyxcblx0eHV0cmk6ICdcXHUyNUIzJyxcblx0eHZlZTogJ1xcdTIyQzEnLFxuXHR4d2VkZ2U6ICdcXHUyMkMwJyxcblx0WWFjdXRlOiAnXFx1MDBERCcsXG5cdHlhY3V0ZTogJ1xcdTAwRkQnLFxuXHRZQWN5OiAnXFx1MDQyRicsXG5cdHlhY3k6ICdcXHUwNDRGJyxcblx0WWNpcmM6ICdcXHUwMTc2Jyxcblx0eWNpcmM6ICdcXHUwMTc3Jyxcblx0WWN5OiAnXFx1MDQyQicsXG5cdHljeTogJ1xcdTA0NEInLFxuXHR5ZW46ICdcXHUwMEE1Jyxcblx0WWZyOiAnXFx1RDgzNVxcdUREMUMnLFxuXHR5ZnI6ICdcXHVEODM1XFx1REQzNicsXG5cdFlJY3k6ICdcXHUwNDA3Jyxcblx0eWljeTogJ1xcdTA0NTcnLFxuXHRZb3BmOiAnXFx1RDgzNVxcdURENTAnLFxuXHR5b3BmOiAnXFx1RDgzNVxcdURENkEnLFxuXHRZc2NyOiAnXFx1RDgzNVxcdURDQjQnLFxuXHR5c2NyOiAnXFx1RDgzNVxcdURDQ0UnLFxuXHRZVWN5OiAnXFx1MDQyRScsXG5cdHl1Y3k6ICdcXHUwNDRFJyxcblx0WXVtbDogJ1xcdTAxNzgnLFxuXHR5dW1sOiAnXFx1MDBGRicsXG5cdFphY3V0ZTogJ1xcdTAxNzknLFxuXHR6YWN1dGU6ICdcXHUwMTdBJyxcblx0WmNhcm9uOiAnXFx1MDE3RCcsXG5cdHpjYXJvbjogJ1xcdTAxN0UnLFxuXHRaY3k6ICdcXHUwNDE3Jyxcblx0emN5OiAnXFx1MDQzNycsXG5cdFpkb3Q6ICdcXHUwMTdCJyxcblx0emRvdDogJ1xcdTAxN0MnLFxuXHR6ZWV0cmY6ICdcXHUyMTI4Jyxcblx0WmVyb1dpZHRoU3BhY2U6ICdcXHUyMDBCJyxcblx0WmV0YTogJ1xcdTAzOTYnLFxuXHR6ZXRhOiAnXFx1MDNCNicsXG5cdFpmcjogJ1xcdTIxMjgnLFxuXHR6ZnI6ICdcXHVEODM1XFx1REQzNycsXG5cdFpIY3k6ICdcXHUwNDE2Jyxcblx0emhjeTogJ1xcdTA0MzYnLFxuXHR6aWdyYXJyOiAnXFx1MjFERCcsXG5cdFpvcGY6ICdcXHUyMTI0Jyxcblx0em9wZjogJ1xcdUQ4MzVcXHVERDZCJyxcblx0WnNjcjogJ1xcdUQ4MzVcXHVEQ0I1Jyxcblx0enNjcjogJ1xcdUQ4MzVcXHVEQ0NGJyxcblx0endqOiAnXFx1MjAwRCcsXG5cdHp3bmo6ICdcXHUyMDBDJyxcbn0pO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgSFRNTF9FTlRJVElFU2AgaW5zdGVhZFxuICogQHNlZSBIVE1MX0VOVElUSUVTXG4gKi9cbmV4cG9ydHMuZW50aXR5TWFwID0gZXhwb3J0cy5IVE1MX0VOVElUSUVTO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@xmldom/xmldom/lib/entities.js\n"); + +/***/ }), + +/***/ "./node_modules/@xmldom/xmldom/lib/index.js": +/*!**************************************************!*\ + !*** ./node_modules/@xmldom/xmldom/lib/index.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var dom = __webpack_require__(/*! ./dom */ \"./node_modules/@xmldom/xmldom/lib/dom.js\")\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = __webpack_require__(/*! ./dom-parser */ \"./node_modules/@xmldom/xmldom/lib/dom-parser.js\").DOMParser\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL25vZGVfbW9kdWxlcy9AeG1sZG9tL3htbGRvbS9saWIvaW5kZXguanM/MjEwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsdURBQU87QUFDekI7QUFDQTtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLHFFQUFjIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0B4bWxkb20veG1sZG9tL2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkb20gPSByZXF1aXJlKCcuL2RvbScpXG5leHBvcnRzLkRPTUltcGxlbWVudGF0aW9uID0gZG9tLkRPTUltcGxlbWVudGF0aW9uXG5leHBvcnRzLlhNTFNlcmlhbGl6ZXIgPSBkb20uWE1MU2VyaWFsaXplclxuZXhwb3J0cy5ET01QYXJzZXIgPSByZXF1aXJlKCcuL2RvbS1wYXJzZXInKS5ET01QYXJzZXJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@xmldom/xmldom/lib/index.js\n"); + +/***/ }), + +/***/ "./node_modules/@xmldom/xmldom/lib/sax.js": +/*!************************************************!*\ + !*** ./node_modules/@xmldom/xmldom/lib/sax.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("var NAMESPACE = __webpack_require__(/*! ./conventions */ \"./node_modules/@xmldom/xmldom/lib/conventions.js\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//\",\n input: \"__KEY__=__DATA__\"\n },\n post: {\n value: \"\" + \"\" + \"__IDENTIFIER__\" + \"\" + \"\" + \"\" + \"\" + \"\" + \"__RAWDATAOUTPUT__\" + \"\" + \"\" + \"\",\n input: \"\" + \"__KEY__\" + \"\" + \"__DATA__\" + \"\" + \"\"\n }\n },\n /**\n * Namespace par defaut de la requete POST.\n *\n * @returns {String} namespace\n */\n namespaceByDefault: function namespaceByDefault() {\n var ns = [\"xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"\", \"xmlns=\\\"http://www.opengis.net/wps/1.0.0\\\"\", \"xmlns:wfs=\\\"http://www.opengis.net/wfs\\\"\", \"xmlns:wps=\\\"http://www.opengis.net/wps/1.0.0\\\"\", \"xmlns:ows=\\\"http://www.opengis.net/ows/1.1\\\"\", \"xmlns:gml=\\\"http://www.opengis.net/gml\\\"\", \"xmlns:ogc=\\\"http://www.opengis.net/ogc\\\"\", \"xmlns:wcs=\\\"http://www.opengis.net/wcs/1.1.1\\\"\", \"xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\"];\n return ns.join(\" \");\n },\n /**\n * Schemalocation par defaut.\n *\n * @returns {String} schemaLocation\n */\n schemaLocationByDefault: function schemaLocationByDefault() {\n return \"xsi:schemaLocation=\\\"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd\\\"\";\n },\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // service=__SERVICE__\n * // &version=__VERSION__\n * // &rawdataoutput=__RAWDATAOUTPUT__\n * // &identifier=__IDENTIFIER__\n * // &request=__REQUEST__\n * // &datainputs=\"__DATAINPUTS__\"\n * // avec __DATAINPUTS__ = __KEY__=__DATA__;...\n *\n * // POST out :\n * // \n * // \n * // __IDENTIFIER__\n * // \n * // \n * // \n * // \n * // \n * // __RAWDATAOUTPUT__\n * // \n * // \n * // \",\n * // avec __DATAINPUTS__\n * // \n * // __KEY__\n * // \n * // __DATA__\n * // \n * // \n *\n * @returns {Boolean} validation de la construction de la requete\n */\n processRequestString: function processRequestString() {\n this.logger.trace(\"WPS::processRequestString ()\");\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n } else {\n this.logger.error(\"No other method supported by the service !\");\n return false;\n }\n template = template.replace(/__SERVICE__/g, this.paramservice);\n template = template.replace(/__VERSION__/g, this.paramversion);\n template = template.replace(/__RAWDATAOUTPUT__/g, this.paramrawdataoutput);\n template = template.replace(/__IDENTIFIER__/g, this.paramidentifier);\n template = template.replace(/__REQUEST__/g, this.paramrequest);\n\n // ajout +\n if (this.method === \"POST\") {\n template = template.replace(/__NAMESPACE__/g, this.namespaceByDefault);\n template = template.replace(/__SCHEMALOCATION__/g, this.schemaLocationByDefault);\n }\n\n // ajout des datainputs\n template = template.replace(//g, this.__addDataInputs());\n if (!template) {\n this.logger.warn(\"traduction tmpl : empty request !?\");\n return false;\n }\n this.requestString = template;\n this.logger.trace(\"traduction tmpl\", template);\n return true;\n },\n /**\n * Ajout des données\n *\n * @returns {String} Données concaténées dans une chaine\n */\n __addDataInputs: function __addDataInputs() {\n this.logger.trace(\"WPS::__addDataInputs ()\");\n\n // c'est un peu grossier...\n var tmpl = this.method === \"GET\" ? this.template.get.input : this.template.post.input;\n var sep = this.method === \"GET\" ? \";\" : \"\";\n var result = \"\";\n var that = this;\n var map = this.DataObject.getData();\n for (var i = 0; i < map.length; i++) {\n // FIXME closure ?\n (function (j) {\n if (sep) {\n sep = j === map.length - 1 ? \"\" : \";\";\n }\n result = result.concat(that.__addDataInput(tmpl, map[j].k, map[j].v), sep);\n })(i);\n }\n return result;\n },\n /**\n * Ajout d'une donnée.\n *\n * @param {String} tmpl - template\n * @param {String} key - clef\n * @param {String} data - valeur\n * @returns {String} chaine avec les substitutions clef/valeur\n */\n __addDataInput: function __addDataInput(tmpl, key, data) {\n var tmp = tmpl;\n tmp = tmp.replace(/__KEY__/g, key);\n tmp = tmp.replace(/__DATA__/g, data);\n return tmp;\n },\n /**\n * Definir le mode de requête\n *\n * @param {String} method - GET|POST\n */\n setMethod: function setMethod(method) {\n if (method === \"GET\" || method === \"POST\") {\n this.method = method;\n } else {\n this.logger.warn(\"support only GET and POST method !\");\n }\n },\n /**\n * Retourne le mode de requete (GET|POST).\n *\n * @returns {AltiRequest.options.mode|String} methode (GET|POST)\n */\n getMethod: function getMethod() {\n return this.method;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (WPS);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9Gb3JtYXRzL1dQUy5qcz8xODQ0Il0sIm5hbWVzIjpbIldQUyIsIm9wdGlvbnMiLCJsb2dnZXIiLCJMb2dnZXIiLCJnZXRMb2dnZXIiLCJ0cmFjZSIsIlR5cGVFcnJvciIsIkRhdGFPYmplY3QiLCJkYXRhIiwicGFyYW1zZXJ2aWNlIiwicGFyYW0iLCJzZXJ2aWNlIiwicGFyYW12ZXJzaW9uIiwidmVyc2lvbiIsInBhcmFtaWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJwYXJhbXJhd2RhdGFvdXRwdXQiLCJyYXdkYXRhb3V0cHV0IiwicGFyYW1yZXF1ZXN0IiwicmVxdWVzdCIsIm1ldGhvZCIsInByb3RvdHlwZSIsInJlcXVlc3RTdHJpbmciLCJjb25zdHJ1Y3RvciIsInRlbXBsYXRlIiwiZ2V0IiwidmFsdWUiLCJpbnB1dCIsInBvc3QiLCJuYW1lc3BhY2VCeURlZmF1bHQiLCJucyIsImpvaW4iLCJzY2hlbWFMb2NhdGlvbkJ5RGVmYXVsdCIsInByb2Nlc3NSZXF1ZXN0U3RyaW5nIiwiZXJyb3IiLCJyZXBsYWNlIiwiX19hZGREYXRhSW5wdXRzIiwid2FybiIsInRtcGwiLCJzZXAiLCJyZXN1bHQiLCJ0aGF0IiwibWFwIiwiZ2V0RGF0YSIsImkiLCJsZW5ndGgiLCJqIiwiY29uY2F0IiwiX19hZGREYXRhSW5wdXQiLCJrIiwidiIsImtleSIsInRtcCIsInNldE1ldGhvZCIsImdldE1ldGhvZCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBR0EsQ0FBRUMsT0FBTyxFQUFFO0VBQ25CLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztFQUNoQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLHNCQUFzQixDQUFDO0VBRXpDLElBQUksRUFBRSxJQUFJLFlBQVlMLEdBQUcsQ0FBQyxFQUFFO0lBQ3hCLE1BQU0sSUFBSU0sU0FBUyxDQUFDLGlEQUFpRCxDQUFDO0VBQzFFO0VBRUEsSUFBSSxDQUFDTCxPQUFPLEdBQUdBLE9BQU8sSUFBSSxDQUFDLENBQUM7O0VBRTVCO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQ00sVUFBVSxHQUFHLElBQUksQ0FBQ04sT0FBTyxDQUFDTyxJQUFJO0VBRW5DLElBQUksQ0FBQyxJQUFJLENBQUNELFVBQVUsRUFBRTtJQUNsQixNQUFNLElBQUlELFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQztFQUM1RDs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0csWUFBWSxHQUFHLElBQUksQ0FBQ1IsT0FBTyxDQUFDUyxLQUFLLENBQUNDLE9BQU8sSUFBSSxLQUFLOztFQUV2RDtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsWUFBWSxHQUFHLElBQUksQ0FBQ1gsT0FBTyxDQUFDUyxLQUFLLENBQUNHLE9BQU8sSUFBSSxPQUFPOztFQUV6RDtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUksQ0FBQ2IsT0FBTyxDQUFDUyxLQUFLLENBQUNLLFVBQVUsSUFBSSxRQUFROztFQUVoRTtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUcsSUFBSSxDQUFDZixPQUFPLENBQUNTLEtBQUssQ0FBQ08sYUFBYSxJQUFJLFFBQVE7O0VBRXRFO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSSxDQUFDakIsT0FBTyxDQUFDUyxLQUFLLENBQUNTLE9BQU8sSUFBSSxTQUFTOztFQUUzRDtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUksQ0FBQ25CLE9BQU8sQ0FBQ21CLE1BQU0sSUFBSSxLQUFLO0FBQzlDO0FBRUFwQixHQUFHLENBQUNxQixTQUFTLEdBQUc7RUFFWjtBQUNKO0FBQ0E7O0VBRUk7QUFDSjtBQUNBO0FBQ0E7RUFDSUMsYUFBYSxFQUFHLElBQUk7RUFFcEI7QUFDSjtBQUNBO0VBQ0lDLFdBQVcsRUFBR3ZCLEdBQUc7RUFFakI7QUFDSjtBQUNBO0VBQ0l3QixRQUFRLEVBQUc7SUFDUEMsR0FBRyxFQUFHO01BQ0ZDLEtBQUssRUFBRyxxQkFBcUIsR0FDekIsc0JBQXNCLEdBQ3RCLGtDQUFrQyxHQUNsQyw0QkFBNEIsR0FDNUIsc0JBQXNCLEdBQ3RCLHFDQUFxQztNQUV6Q0MsS0FBSyxFQUFHO0lBRVosQ0FBQztJQUNEQyxJQUFJLEVBQUc7TUFFSEYsS0FBSyxFQUFHLDRDQUE0QyxHQUNoRCxtRUFBbUUsR0FDbkUsbUNBQW1DLEdBQ25DLGlEQUFpRCxHQUNqRCxrQkFBa0IsR0FDbEIseUJBQXlCLEdBQ3pCLG1CQUFtQixHQUNuQixvQkFBb0IsR0FDcEIscUJBQXFCLEdBQ3JCLG9EQUFvRCxHQUNwRCxzQkFBc0IsR0FDdEIscUJBQXFCLEdBQ3JCLG9CQUFvQjtNQUV4QkMsS0FBSyxFQUFHLGFBQWEsR0FDakIsMENBQTBDLEdBQzFDLFlBQVksR0FDWiw2Q0FBNkMsR0FDN0MsYUFBYSxHQUNiO0lBQ1I7RUFDSixDQUFDO0VBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJRSxrQkFBa0IsRUFBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBQWU7SUFDN0IsSUFBSUMsRUFBRSxHQUFHLENBQ0wseURBQXlELEVBQ3pELDRDQUE0QyxFQUM1QywwQ0FBMEMsRUFDMUMsZ0RBQWdELEVBQ2hELDhDQUE4QyxFQUM5QywwQ0FBMEMsRUFDMUMsMENBQTBDLEVBQzFDLGdEQUFnRCxFQUNoRCw4Q0FBOEMsQ0FDakQ7SUFFRCxPQUFPQSxFQUFFLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDdkIsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsdUJBQXVCLEVBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBQSxFQUFlO0lBQ2xDLE9BQU8seUdBQXlHO0VBQ3BILENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxvQkFBb0IsRUFBRyxTQUF2QkEsb0JBQW9CQSxDQUFBLEVBQWU7SUFDL0IsSUFBSSxDQUFDL0IsTUFBTSxDQUFDRyxLQUFLLENBQUMsOEJBQThCLENBQUM7SUFFakQsSUFBSW1CLFFBQVEsR0FBRyxFQUFFO0lBQ2pCLElBQUksSUFBSSxDQUFDSixNQUFNLEtBQUssTUFBTSxFQUFFO01BQ3hCSSxRQUFRLEdBQUcsSUFBSSxDQUFDQSxRQUFRLENBQUNJLElBQUksQ0FBQ0YsS0FBSztJQUN2QyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNOLE1BQU0sS0FBSyxLQUFLLEVBQUU7TUFDOUJJLFFBQVEsR0FBRyxJQUFJLENBQUNBLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLO0lBQ3RDLENBQUMsTUFBTTtNQUNILElBQUksQ0FBQ3hCLE1BQU0sQ0FBQ2dDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQztNQUMvRCxPQUFPLEtBQUs7SUFDaEI7SUFFQVYsUUFBUSxHQUFHQSxRQUFRLENBQUNXLE9BQU8sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDMUIsWUFBWSxDQUFDO0lBQzlEZSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ1csT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUN2QixZQUFZLENBQUM7SUFDOURZLFFBQVEsR0FBR0EsUUFBUSxDQUFDVyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDbkIsa0JBQWtCLENBQUM7SUFDMUVRLFFBQVEsR0FBR0EsUUFBUSxDQUFDVyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDckIsZUFBZSxDQUFDO0lBQ3BFVSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ1csT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUNqQixZQUFZLENBQUM7O0lBRTlEO0lBQ0EsSUFBSSxJQUFJLENBQUNFLE1BQU0sS0FBSyxNQUFNLEVBQUU7TUFDeEJJLFFBQVEsR0FBR0EsUUFBUSxDQUFDVyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDTixrQkFBa0IsQ0FBQztNQUN0RUwsUUFBUSxHQUFHQSxRQUFRLENBQUNXLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUNILHVCQUF1QixDQUFDO0lBQ3BGOztJQUVBO0lBQ0FSLFFBQVEsR0FBR0EsUUFBUSxDQUFDVyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRS9FLElBQUksQ0FBQ1osUUFBUSxFQUFFO01BQ1gsSUFBSSxDQUFDdEIsTUFBTSxDQUFDbUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDO01BQ3RELE9BQU8sS0FBSztJQUNoQjtJQUVBLElBQUksQ0FBQ2YsYUFBYSxHQUFHRSxRQUFRO0lBQzdCLElBQUksQ0FBQ3RCLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLGlCQUFpQixFQUFFbUIsUUFBUSxDQUFDO0lBRTlDLE9BQU8sSUFBSTtFQUNmLENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0lZLGVBQWUsRUFBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUFlO0lBQzFCLElBQUksQ0FBQ2xDLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLHlCQUF5QixDQUFDOztJQUU1QztJQUNBLElBQUlpQyxJQUFJLEdBQUcsSUFBSSxDQUFDbEIsTUFBTSxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUNJLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDRSxLQUFLLEdBQUcsSUFBSSxDQUFDSCxRQUFRLENBQUNJLElBQUksQ0FBQ0QsS0FBSztJQUNyRixJQUFJWSxHQUFHLEdBQUcsSUFBSSxDQUFDbkIsTUFBTSxLQUFLLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRTtJQUUxQyxJQUFJb0IsTUFBTSxHQUFHLEVBQUU7SUFDZixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUNmLElBQUlDLEdBQUcsR0FBRyxJQUFJLENBQUNuQyxVQUFVLENBQUNvQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsR0FBRyxDQUFDRyxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO01BQ2pDO01BQ0EsQ0FBQyxVQUFVRSxDQUFDLEVBQUU7UUFDVixJQUFJUCxHQUFHLEVBQUU7VUFDTEEsR0FBRyxHQUFJTyxDQUFDLEtBQUtKLEdBQUcsQ0FBQ0csTUFBTSxHQUFHLENBQUMsR0FBSSxFQUFFLEdBQUcsR0FBRztRQUMzQztRQUNBTCxNQUFNLEdBQUdBLE1BQU0sQ0FBQ08sTUFBTSxDQUFDTixJQUFJLENBQUNPLGNBQWMsQ0FBQ1YsSUFBSSxFQUFFSSxHQUFHLENBQUNJLENBQUMsQ0FBQyxDQUFDRyxDQUFDLEVBQUVQLEdBQUcsQ0FBQ0ksQ0FBQyxDQUFDLENBQUNJLENBQUMsQ0FBQyxFQUFFWCxHQUFHLENBQUM7TUFDOUUsQ0FBQyxFQUFFSyxDQUFDLENBQUM7SUFDVDtJQUVBLE9BQU9KLE1BQU07RUFDakIsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSVEsY0FBYyxFQUFHLFNBQWpCQSxjQUFjQSxDQUFhVixJQUFJLEVBQUVhLEdBQUcsRUFBRTNDLElBQUksRUFBRTtJQUN4QyxJQUFJNEMsR0FBRyxHQUFHZCxJQUFJO0lBQ2RjLEdBQUcsR0FBR0EsR0FBRyxDQUFDakIsT0FBTyxDQUFDLFVBQVUsRUFBRWdCLEdBQUcsQ0FBQztJQUNsQ0MsR0FBRyxHQUFHQSxHQUFHLENBQUNqQixPQUFPLENBQUMsV0FBVyxFQUFFM0IsSUFBSSxDQUFDO0lBQ3BDLE9BQU80QyxHQUFHO0VBQ2QsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsU0FBUyxFQUFHLFNBQVpBLFNBQVNBLENBQWFqQyxNQUFNLEVBQUU7SUFDMUIsSUFBSUEsTUFBTSxLQUFLLEtBQUssSUFBSUEsTUFBTSxLQUFLLE1BQU0sRUFBRTtNQUN2QyxJQUFJLENBQUNBLE1BQU0sR0FBR0EsTUFBTTtJQUN4QixDQUFDLE1BQU07TUFDSCxJQUFJLENBQUNsQixNQUFNLENBQUNtQyxJQUFJLENBQUMsb0NBQW9DLENBQUM7SUFDMUQ7RUFDSixDQUFDO0VBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJaUIsU0FBUyxFQUFHLFNBQVpBLFNBQVNBLENBQUEsRUFBZTtJQUNwQixPQUFPLElBQUksQ0FBQ2xDLE1BQU07RUFDdEI7QUFDSixDQUFDO0FBRWNwQixrRUFBRyIsImZpbGUiOiIuL3NyYy9Gb3JtYXRzL1dQUy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSBcIi4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqIFN0YW5kYXJkIFdQU1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIEdwLkZvcm1hdHMuV1BTXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMuZGF0YSAtIG9iamV0XG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLm1ldGhvZCAtIFBPU1R8R0VUXG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLnBhcmFtLnNlcnZpY2UgLSBcIldQU1wiXG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLnBhcmFtLnZlcnNpb24gLSBcIjEuMC4wXCJcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMucGFyYW0uaWRlbnRpZmllciAtIFwiZ3M6V1BTRWxldmF0aW9ufGdzOldQU0xpbmVFbGV2YXRpb25cIlxuICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy5wYXJhbS5yYXdkYXRhb3V0cHV0IC0gXCJyZXN1bHRcIlxuICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy5wYXJhbS5yZXF1ZXN0IC0gXCJFeGVjdXRlXCJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMub25zdWNjZXNzIC0gZnVuY3Rpb24gY2FsbGJhY2sgc3VjY2VzcyAoVE9ETylcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMub25lcnJvciAgIC0gZnVuY3Rpb24gY2FsbGJhY2sgZXJyb3IgICAoVE9ETylcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdQUyAob3B0aW9ucykge1xuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiW0NvbnN0cnVjdGV1ciBXUFMoKV1cIik7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV1BTKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiV1BTIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIE9iamV0IERBVEFcbiAgICAgKi9cbiAgICB0aGlzLkRhdGFPYmplY3QgPSB0aGlzLm9wdGlvbnMuZGF0YTtcblxuICAgIGlmICghdGhpcy5EYXRhT2JqZWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGlzIGRhdGEgb2JqZWN0IGlzIG5vdCBkZWZpbmVkICFcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcGFyYW0gc2VydmljZS5cbiAgICAgKiBQYXIgZGVmYXV0LCBcIldQU1wiLlxuICAgICAqL1xuICAgIHRoaXMucGFyYW1zZXJ2aWNlID0gdGhpcy5vcHRpb25zLnBhcmFtLnNlcnZpY2UgfHwgXCJXUFNcIjtcblxuICAgIC8qKlxuICAgICAqIHBhcmFtIHZlcnNpb24uXG4gICAgICogUGFyIGRlZmF1dCwgXCIxLjAuMFwiLlxuICAgICAqL1xuICAgIHRoaXMucGFyYW12ZXJzaW9uID0gdGhpcy5vcHRpb25zLnBhcmFtLnZlcnNpb24gfHwgXCIxLjAuMFwiO1xuXG4gICAgLyoqXG4gICAgICogcGFyYW0gaWRlbnRpZmllclxuICAgICAqIFBhciBkZWZhdXQsIFwiZ3M6V1BTXCJcbiAgICAgKi9cbiAgICB0aGlzLnBhcmFtaWRlbnRpZmllciA9IHRoaXMub3B0aW9ucy5wYXJhbS5pZGVudGlmaWVyIHx8IFwiZ3M6V1BTXCI7XG5cbiAgICAvKipcbiAgICAgKiBwYXJhbSByYXdkYXRhb3V0cHV0XG4gICAgICogUGFyIGRlZmF1dCwgXCJyZXN1bHRcIi5cbiAgICAgKi9cbiAgICB0aGlzLnBhcmFtcmF3ZGF0YW91dHB1dCA9IHRoaXMub3B0aW9ucy5wYXJhbS5yYXdkYXRhb3V0cHV0IHx8IFwicmVzdWx0XCI7XG5cbiAgICAvKipcbiAgICAgKiBwYXJhbSByZXF1ZXN0XG4gICAgICogUGFyIGRlZmF1dCwgXCJFeGVjdXRlXCIuXG4gICAgICovXG4gICAgdGhpcy5wYXJhbXJlcXVlc3QgPSB0aGlzLm9wdGlvbnMucGFyYW0ucmVxdWVzdCB8fCBcIkV4ZWN1dGVcIjtcblxuICAgIC8qKlxuICAgICAqIG1ldGhvZGUuXG4gICAgICogUGFyIGRlZmF1dCwgXCJHRVRcIi5cbiAgICAgKi9cbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIjtcbn1cblxuV1BTLnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIEBsZW5kcyBtb2R1bGU6V1BTI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogcmVxdWVzdFxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgcmVxdWVzdFN0cmluZyA6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIDogV1BTLFxuXG4gICAgLyoqXG4gICAgICogVGVtcGxhdGUgZGUgbGEgcmVxdcOqdGUuXG4gICAgICovXG4gICAgdGVtcGxhdGUgOiB7XG4gICAgICAgIGdldCA6IHtcbiAgICAgICAgICAgIHZhbHVlIDogXCJzZXJ2aWNlPV9fU0VSVklDRV9fXCIgK1xuICAgICAgICAgICAgICAgIFwiJnZlcnNpb249X19WRVJTSU9OX19cIiArXG4gICAgICAgICAgICAgICAgXCImcmF3ZGF0YW91dHB1dD1fX1JBV0RBVEFPVVRQVVRfX1wiICtcbiAgICAgICAgICAgICAgICBcIiZpZGVudGlmaWVyPV9fSURFTlRJRklFUl9fXCIgK1xuICAgICAgICAgICAgICAgIFwiJnJlcXVlc3Q9X19SRVFVRVNUX19cIiArXG4gICAgICAgICAgICAgICAgXCImZGF0YWlucHV0cz08IS0tIF9fREFUQUlOUFVUU19fIC0tPlwiLFxuXG4gICAgICAgICAgICBpbnB1dCA6IFwiX19LRVlfXz1fX0RBVEFfX1wiXG5cbiAgICAgICAgfSxcbiAgICAgICAgcG9zdCA6IHtcblxuICAgICAgICAgICAgdmFsdWUgOiBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XCIgK1xuICAgICAgICAgICAgICAgIFwiPHdwczpfX1JFUVVFU1RfXyB2ZXJzaW9uPVxcXCJfX1ZFUlNJT05fX1xcXCIgc2VydmljZT1cXFwiX19TRVJWSUNFX19cXFwiIFwiICtcbiAgICAgICAgICAgICAgICBcIl9fTkFNRVNQQUNFX18gX19TQ0hFTUFMT0NBVElPTl9fPlwiICtcbiAgICAgICAgICAgICAgICBcIjxvd3M6SWRlbnRpZmllcj5fX0lERU5USUZJRVJfXzwvb3dzOklkZW50aWZpZXI+XCIgK1xuICAgICAgICAgICAgICAgIFwiPHdwczpEYXRhSW5wdXRzPlwiICtcbiAgICAgICAgICAgICAgICBcIjwhLS0gX19EQVRBSU5QVVRTX18gLS0+XCIgK1xuICAgICAgICAgICAgICAgIFwiPC93cHM6RGF0YUlucHV0cz5cIiArXG4gICAgICAgICAgICAgICAgXCI8d3BzOlJlc3BvbnNlRm9ybT5cIiArXG4gICAgICAgICAgICAgICAgXCI8d3BzOlJhd0RhdGFPdXRwdXQ+XCIgK1xuICAgICAgICAgICAgICAgIFwiPG93czpJZGVudGlmaWVyPl9fUkFXREFUQU9VVFBVVF9fPC9vd3M6SWRlbnRpZmllcj5cIiArXG4gICAgICAgICAgICAgICAgXCI8L3dwczpSYXdEYXRhT3V0cHV0PlwiICtcbiAgICAgICAgICAgICAgICBcIjwvd3BzOlJlc3BvbnNlRm9ybT5cIiArXG4gICAgICAgICAgICAgICAgXCI8L3dwczpfX1JFUVVFU1RfXz5cIixcblxuICAgICAgICAgICAgaW5wdXQgOiBcIjx3cHM6SW5wdXQ+XCIgK1xuICAgICAgICAgICAgICAgIFwiPG93czpJZGVudGlmaWVyPl9fS0VZX188L293czpJZGVudGlmaWVyPlwiICtcbiAgICAgICAgICAgICAgICBcIjx3cHM6RGF0YT5cIiArXG4gICAgICAgICAgICAgICAgXCI8d3BzOkxpdGVyYWxEYXRhPl9fREFUQV9fPC93cHM6TGl0ZXJhbERhdGE+XCIgK1xuICAgICAgICAgICAgICAgIFwiPC93cHM6RGF0YT5cIiArXG4gICAgICAgICAgICAgICAgXCI8L3dwczpJbnB1dD5cIlxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5hbWVzcGFjZSBwYXIgZGVmYXV0IGRlIGxhIHJlcXVldGUgUE9TVC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5hbWVzcGFjZVxuICAgICAqL1xuICAgIG5hbWVzcGFjZUJ5RGVmYXVsdCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5zID0gW1xuICAgICAgICAgICAgXCJ4bWxuczp4c2k9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXFxcIlwiLFxuICAgICAgICAgICAgXCJ4bWxucz1cXFwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjBcXFwiXCIsXG4gICAgICAgICAgICBcInhtbG5zOndmcz1cXFwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93ZnNcXFwiXCIsXG4gICAgICAgICAgICBcInhtbG5zOndwcz1cXFwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjBcXFwiXCIsXG4gICAgICAgICAgICBcInhtbG5zOm93cz1cXFwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9vd3MvMS4xXFxcIlwiLFxuICAgICAgICAgICAgXCJ4bWxuczpnbWw9XFxcImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sXFxcIlwiLFxuICAgICAgICAgICAgXCJ4bWxuczpvZ2M9XFxcImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvb2djXFxcIlwiLFxuICAgICAgICAgICAgXCJ4bWxuczp3Y3M9XFxcImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvd2NzLzEuMS4xXFxcIlwiLFxuICAgICAgICAgICAgXCJ4bWxuczp4bGluaz1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1xcXCJcIlxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiBucy5qb2luKFwiIFwiKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NoZW1hbG9jYXRpb24gcGFyIGRlZmF1dC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHNjaGVtYUxvY2F0aW9uXG4gICAgICovXG4gICAgc2NoZW1hTG9jYXRpb25CeURlZmF1bHQgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcInhzaTpzY2hlbWFMb2NhdGlvbj1cXFwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjAgaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd3BzLzEuMC4wL3dwc0FsbC54c2RcXFwiXCI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdGlvbiBkZSBsYSByZXF1w6p0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gR0VUICBvdXQgOlxuICAgICAqIC8vICBzZXJ2aWNlPV9fU0VSVklDRV9fXG4gICAgICogLy8gICZ2ZXJzaW9uPV9fVkVSU0lPTl9fXG4gICAgICogLy8gICZyYXdkYXRhb3V0cHV0PV9fUkFXREFUQU9VVFBVVF9fXG4gICAgICogLy8gICZpZGVudGlmaWVyPV9fSURFTlRJRklFUl9fXG4gICAgICogLy8gICZyZXF1ZXN0PV9fUkVRVUVTVF9fXG4gICAgICogLy8gICZkYXRhaW5wdXRzPVwiX19EQVRBSU5QVVRTX19cIlxuICAgICAqIC8vICBhdmVjIF9fREFUQUlOUFVUU19fID0gX19LRVlfXz1fX0RBVEFfXzsuLi5cbiAgICAgKlxuICAgICAqIC8vIFBPU1Qgb3V0IDpcbiAgICAgKiAvLyAgICAgIDw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XG4gICAgICogLy8gICAgICA8d3BzOl9fUkVRVUVTVF9fIHZlcnNpb249XFxcIl9fVkVSU0lPTl9fXFxcIiBzZXJ2aWNlPVxcXCJfX1NFUlZJQ0VfX1xcXCJcbiAgICAgKiAvLyAgICAgICAgIF9fTkFNRVNQQUNFX18gX19TQ0hFTUFMT0NBVElPTl9fPlxuICAgICAqIC8vICAgICAgICAgIDxvd3M6SWRlbnRpZmllcj5fX0lERU5USUZJRVJfXzwvb3dzOklkZW50aWZpZXI+XG4gICAgICogLy8gICAgICAgICAgPHdwczpEYXRhSW5wdXRzPlxuICAgICAqIC8vICAgICAgICAgICAgICA8IS0tIF9fREFUQUlOUFVUU19fIC0tPlxuICAgICAqIC8vICAgICAgICAgIDwvd3BzOkRhdGFJbnB1dHM+XG4gICAgICogLy8gICAgICAgICAgPHdwczpSZXNwb25zZUZvcm0+XG4gICAgICogLy8gICAgICAgICAgICAgIDx3cHM6UmF3RGF0YU91dHB1dD5cbiAgICAgKiAvLyAgICAgICAgICAgICAgPG93czpJZGVudGlmaWVyPl9fUkFXREFUQU9VVFBVVF9fPC9vd3M6SWRlbnRpZmllcj5cbiAgICAgKiAvLyAgICAgICAgICAgICAgPC93cHM6UmF3RGF0YU91dHB1dD5cbiAgICAgKiAvLyAgICAgICAgICA8L3dwczpSZXNwb25zZUZvcm0+XG4gICAgICogLy8gICAgICA8L3dwczpfX1JFUVVFU1RfXz5cIixcbiAgICAgKiAvLyAgICAgIGF2ZWMgX19EQVRBSU5QVVRTX19cbiAgICAgKiAvLyAgICAgICAgICAgICA8d3BzOklucHV0PlxuICAgICAqIC8vICAgICAgICAgICAgICAgICAgPG93czpJZGVudGlmaWVyPl9fS0VZX188L293czpJZGVudGlmaWVyPlxuICAgICAqIC8vICAgICAgICAgICAgICAgICAgPHdwczpEYXRhPlxuICAgICAqIC8vICAgICAgICAgICAgICAgICAgICA8d3BzOkxpdGVyYWxEYXRhPl9fREFUQV9fPC93cHM6TGl0ZXJhbERhdGE+XG4gICAgICogLy8gICAgICAgICAgICAgICAgICA8L3dwczpEYXRhPlxuICAgICAqIC8vICAgICAgICAgICAgICA8L3dwczpJbnB1dD5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB2YWxpZGF0aW9uIGRlIGxhIGNvbnN0cnVjdGlvbiBkZSBsYSByZXF1ZXRlXG4gICAgICovXG4gICAgcHJvY2Vzc1JlcXVlc3RTdHJpbmcgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiV1BTOjpwcm9jZXNzUmVxdWVzdFN0cmluZyAoKVwiKTtcblxuICAgICAgICB2YXIgdGVtcGxhdGUgPSBcIlwiO1xuICAgICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUucG9zdC52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlLmdldC52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiTm8gb3RoZXIgbWV0aG9kIHN1cHBvcnRlZCBieSB0aGUgc2VydmljZSAhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9fX1NFUlZJQ0VfXy9nLCB0aGlzLnBhcmFtc2VydmljZSk7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgvX19WRVJTSU9OX18vZywgdGhpcy5wYXJhbXZlcnNpb24pO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoL19fUkFXREFUQU9VVFBVVF9fL2csIHRoaXMucGFyYW1yYXdkYXRhb3V0cHV0KTtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9fX0lERU5USUZJRVJfXy9nLCB0aGlzLnBhcmFtaWRlbnRpZmllcik7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgvX19SRVFVRVNUX18vZywgdGhpcy5wYXJhbXJlcXVlc3QpO1xuXG4gICAgICAgIC8vIGFqb3V0ICtcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIlBPU1RcIikge1xuICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9fX05BTUVTUEFDRV9fL2csIHRoaXMubmFtZXNwYWNlQnlEZWZhdWx0KTtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgvX19TQ0hFTUFMT0NBVElPTl9fL2csIHRoaXMuc2NoZW1hTG9jYXRpb25CeURlZmF1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWpvdXQgZGVzIGRhdGFpbnB1dHNcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC88IS0tIF9fREFUQUlOUFVUU19fIC0tPi9nLCB0aGlzLl9fYWRkRGF0YUlucHV0cygpKTtcblxuICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwidHJhZHVjdGlvbiB0bXBsIDogZW1wdHkgcmVxdWVzdCAhP1wiKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdFN0cmluZyA9IHRlbXBsYXRlO1xuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcInRyYWR1Y3Rpb24gdG1wbFwiLCB0ZW1wbGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFqb3V0IGRlcyBkb25uw6llc1xuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gRG9ubsOpZXMgY29uY2F0w6luw6llcyBkYW5zIHVuZSBjaGFpbmVcbiAgICAgKi9cbiAgICBfX2FkZERhdGFJbnB1dHMgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiV1BTOjpfX2FkZERhdGFJbnB1dHMgKClcIik7XG5cbiAgICAgICAgLy8gYydlc3QgdW4gcGV1IGdyb3NzaWVyLi4uXG4gICAgICAgIHZhciB0bXBsID0gdGhpcy5tZXRob2QgPT09IFwiR0VUXCIgPyB0aGlzLnRlbXBsYXRlLmdldC5pbnB1dCA6IHRoaXMudGVtcGxhdGUucG9zdC5pbnB1dDtcbiAgICAgICAgdmFyIHNlcCA9IHRoaXMubWV0aG9kID09PSBcIkdFVFwiID8gXCI7XCIgOiBcIlwiO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSBcIlwiO1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBtYXAgPSB0aGlzLkRhdGFPYmplY3QuZ2V0RGF0YSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gRklYTUUgY2xvc3VyZSA/XG4gICAgICAgICAgICAoZnVuY3Rpb24gKGopIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcCA9IChqID09PSBtYXAubGVuZ3RoIC0gMSkgPyBcIlwiIDogXCI7XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodGhhdC5fX2FkZERhdGFJbnB1dCh0bXBsLCBtYXBbal0uaywgbWFwW2pdLnYpLCBzZXApO1xuICAgICAgICAgICAgfSkoaSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBam91dCBkJ3VuZSBkb25uw6llLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRtcGwgLSB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgLSBjbGVmXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGEgLSB2YWxldXJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBjaGFpbmUgYXZlYyBsZXMgc3Vic3RpdHV0aW9ucyBjbGVmL3ZhbGV1clxuICAgICAqL1xuICAgIF9fYWRkRGF0YUlucHV0IDogZnVuY3Rpb24gKHRtcGwsIGtleSwgZGF0YSkge1xuICAgICAgICB2YXIgdG1wID0gdG1wbDtcbiAgICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL19fS0VZX18vZywga2V5KTtcbiAgICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL19fREFUQV9fL2csIGRhdGEpO1xuICAgICAgICByZXR1cm4gdG1wO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmlyIGxlIG1vZGUgZGUgcmVxdcOqdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2QgLSBHRVR8UE9TVFxuICAgICAqL1xuICAgIHNldE1ldGhvZCA6IGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIiB8fCBtZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJzdXBwb3J0IG9ubHkgR0VUIGFuZCBQT1NUIG1ldGhvZCAhXCIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIGxlIG1vZGUgZGUgcmVxdWV0ZSAoR0VUfFBPU1QpLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FsdGlSZXF1ZXN0Lm9wdGlvbnMubW9kZXxTdHJpbmd9IG1ldGhvZGUgKEdFVHxQT1NUKVxuICAgICAqL1xuICAgIGdldE1ldGhvZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFdQUztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Formats/WPS.js\n"); + +/***/ }), + +/***/ "./src/Formats/XML.js": +/*!****************************!*\ + !*** ./src/Formats/XML.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* global require */\n\n\n// import __xmldom from \"xmldom\";\n\n/**\n * @classdesc\n *\n * Classe permettant d'écrire ou de lire du XML, sous forme de document DOM,\n * éventuellement selon des clés de lecture (readers) ou d'écriture (writers) spécifiques.\n *\n * @constructor\n * @alias Gp.Formats.XML\n *\n * @param {Object} [options] - options du format XML\n *\n * @param {Object} [options.reader] - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n *\n * @param {Object} [options.writers] - writers\n *\n * @param {String} [options.xmlString] - chaîne de caractère contenant du XML à interpréter.\n *\n * @private\n */\nfunction XML(options) {\n if (!(this instanceof XML)) {\n throw new TypeError(\"XML constructor cannot be called as a function.\");\n }\n\n // FIXME : notion de singleton\n\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur XML ()]\");\n\n /**\n * Chaîne de caractères contenant le texte XML\n * @type {String}\n */\n this.xmlString = null;\n\n /**\n * DOM Element correspondant à la structure du XML.\n * @type {DOMElement}\n */\n this.xmlDoc = null;\n\n /**\n * Objet contenant des fonctions de lecture des différentes balises XML.\n * @type {Object}\n */\n this.reader = null;\n\n // traitement des paramètres d'options s'il y en a\n if (options) {\n if (options.xmlString && typeof options.xmlString === \"string\") {\n this.xmlString = options.xmlString;\n // Si une chaine de caractère a été passée en entrée : on la transforme aussi en XML document\n this.xmlDoc = __getXMLDOC(options.xmlString);\n }\n if (options.reader) {\n this.setReader(options.reader);\n }\n }\n}\nXML.prototype = {\n /**\n * @lends module:XML\n */\n\n /*\n * Constructeur (alias)\n */\n constructor: XML,\n /**\n * Méthode permettant de récupérer la chaîne de caractères associée au format XML\n *\n * @returns {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n getXMLString: function getXMLString() {\n return this.xmlString;\n },\n /**\n * Méthode permettant d'attribuer une chaîne de caractères au format XML (attribut xmlString).\n * La méthode va aussi transformer cette chaîne de caractères en document XML,\n * afin de remplir l'attribut xmlDoc.\n *\n * @param {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n setXMLString: function setXMLString(xmlString) {\n if (xmlString && typeof xmlString === \"string\") {\n this.xmlString = xmlString;\n this.xmlDoc = __getXMLDOC(xmlString);\n }\n },\n /**\n * Méthode permettant de récupérer les readers associés au format XML, s'ils ont été définis\n *\n * @return {Object} readers - les readers associés au format XML, s'ils existent,\n * sous forme d'une collection de fonctions\n */\n getReader: function getReader() {\n return this.reader;\n },\n /**\n * Méthode permettant d'attribuer des readers, sous la forme d'un objet de fonctions (node, data),\n * lorsqu'ils n'ont pas été définis lors de l'instanciation par exemple (new XML (options)).\n *\n * @param {Object} reader - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n */\n setReader: function setReader(reader) {\n if (reader && reader.read && typeof reader.read === \"function\") {\n this.reader = reader;\n }\n },\n /**\n * Méthode permettant de récupérer le document XML associé au format, s'il existe.\n *\n * @return {DOMElement} xmlDoc - le document XML (DOM document node) s'il existe\n */\n getXMLDoc: function getXMLDoc() {\n return this.xmlDoc;\n },\n /**\n * Setter\n */\n setXMLDoc: function setXMLDoc(doc) {\n this.xmlDoc = doc;\n },\n /**\n * Méthode initialisant la lecture du XML, à partir d'un XML Document :\n * création d'un objet JavaScript contenant les informations du XML,\n * sauf dans le cas où il n'existe pas de XML Document à interpréter (retourne un objet vide).\n *\n * @return {Object} [parserOutput] - un objet JavaScript contenant les informations du XML :\n * - soit toutes les informations si aucun reader n'a été spécifié à la création du format\n * - soit les informations spécifiées dans le reader.\n */\n parse: function parse() {\n // build xml document from xmlString\n if (!this.xmlDoc && this.xmlString) {\n this.xmlDoc = __getXMLDOC(this.xmlString);\n }\n if (this.xmlDoc) {\n var root = __getRootNode(this.xmlDoc);\n if (root) {\n var parserOutput;\n // call reader if exists\n if (this.reader && this.reader.read) {\n parserOutput = this.reader.read(root);\n } else {\n parserOutput = {};\n parserOutput[root.nodeName] = __readDefault(root);\n }\n return parserOutput;\n } else {\n return {};\n }\n }\n }\n};\n\n/**\n * Méthode de la classe (privée) permettant de créer un XML Document à partir d'une chaîne de caractères XML,\n * en utilisant DOMParser () lorsque c'est possible.\n * For more information, see: https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface\n *\n * @private\n * @memberof XML\n * @method __getXMLDOC\n * @param {String} xmlString - xml string to be converted into DOM element\n * @return {DOMElement} - the corresponding XML Document\n */\nfunction __getXMLDOC(xmlString) {\n if (typeof window === \"undefined\") {\n // env. nodejs\n var DOMParser = __webpack_require__(/*! @xmldom/xmldom */ \"./node_modules/@xmldom/xmldom/lib/index.js\").DOMParser; // __xmldom.DOMParser;\n return new DOMParser().parseFromString(xmlString, \"text/xml\");\n } else {\n // env. browser\n\n var parser;\n var xmlDoc;\n var errorMsg = \"Erreur lors du parsing de la réponse du service : XML non conforme\";\n if (window.ActiveXObject) {\n // Internet Explorer < 9\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(xmlString);\n var parseError = xmlDoc.parseError;\n if (parseError.errorCode) {\n if (parseError.line && parseError.linepos) {\n errorMsg += \"( ligne \" + parseError.line + \", colonne \" + parseError.linepos;\n }\n if (parseError.reason) {\n errorMsg += \": \" + parseError.reason + \")\";\n }\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else if (window.DOMParser) {\n // les autres (Chrome, Mozilla, IE >= 9)\n parser = new window.DOMParser();\n try {\n xmlDoc = parser.parseFromString(xmlString, \"text/xml\");\n } catch (e) {\n // Internet Explorer browser raises exception if xmlString is not valid XML\n if (e.message === \"SyntaxError\") {\n throw new Error(errorMsg);\n } else {\n throw new Error(\"Erreur lors du parsing de la réponse du service : \" + e.message);\n }\n }\n // look for parsing error in case no exception was raised\n if (xmlDoc.getElementsByTagName(\"parsererror\").length > 0) {\n var parsererror = xmlDoc.getElementsByTagName(\"parsererror\");\n for (var i = 0; i < parsererror.length; i++) {\n var content = parsererror[i].innerHTML;\n // except in case parsererror is just because of huge xml, but parsing is done.\n if (content.indexOf(\"Huge input lookup\") === -1) {\n errorMsg += \"(\" + content + \")\";\n throw new Error(errorMsg);\n }\n }\n } else if (!xmlDoc.documentElement) {\n // may happen in chrome browser\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else {\n // FIXME\n throw new Error(\"Incompatible DOM Parser pour ce navigateur !\");\n }\n }\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer le noeud racine du document,\n * à partir d'un document node (nodeType=9), puis lecture de ce noeud (readNode)\n *\n * @private\n * @memberof XML\n * @method __getRootNode\n * @param {DOMElement} [xmlDoc] - a Document Node\n * @return {DOMElement} root - the document root node\n */\nfunction __getRootNode(xmlDoc) {\n var root;\n if (xmlDoc.nodeType === 9) {\n // INFO : nodeType 9 represents the entire document (the root-node of the DOM tree)\n root = xmlDoc.documentElement;\n } else if (xmlDoc.nodeType === 1) {\n root = xmlDoc;\n }\n return root;\n}\n\n/**\n * Méthode de la classe (privée) permettant de lire automatiquement un noeud XML,\n * lorsqu'aucun reader spécifique n'a été spécifié (parser brut)\n *\n * @private\n * @memberof XML\n * @method readDefault\n * @param {DOMElement} node - a DOM element node\n * @example final data object looks like :\n * data = {\n * attributeName: attributeValue,\n * childName: {\n * attributeName: attributeValue,\n * attributeName: attributeValue,\n * childName: {\n * \"textContent\": textContent\n * },\n * childName: {\n * childName: {\n * attributeName:attributeValue\n * }\n * }\n * }\n * }\n */\nfunction __readDefault(node) {\n var data = {};\n\n // if element node has attributes, set their values to data\n if (node.attributes.length > 0) {\n var dataAttributes = __getAttributes(node);\n data[\"attributes\"] = dataAttributes;\n }\n\n // if element node has childNodes, read them and set them to data\n if (node.hasChildNodes()) {\n var childData = {};\n var child;\n var children = node.childNodes;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeType === 3) {\n // TEXT_NODE\n data[\"textContent\"] = child.nodeValue;\n } else if (child.nodeType === 1) {\n childData = __readDefault(child);\n if (!data[child.nodeName]) {\n // store childData in an object\n data[child.nodeName] = childData;\n } else {\n // in case several childNodes has the same name : store them in an array.\n // if data[nodeName] already exists but is not an array\n if (!Array.isArray(data[child.nodeName])) {\n var old = data[child.nodeName];\n data[child.nodeName] = [];\n data[child.nodeName].push(old);\n }\n data[child.nodeName].push(childData);\n }\n }\n // TODO : manage other node types (4=CDATA, etc)\n }\n }\n return data;\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer les attributs d'un noeud élément\n *\n * @private\n * @memberof XML\n * @method __getAttributes\n * @param {DOMElement} node - noeud contenant l'attribut recherché\n * @return {Object} nodeAttributes - objet contenant les noms et valeurs des différents attributs\n */\nfunction __getAttributes(node) {\n if (node.attributes.length > 0) {\n var nodeAttributes = {};\n var attributes = node.attributes;\n for (var i = 0; i < attributes.length; i++) {\n var attribute = attributes[i];\n nodeAttributes[attribute.nodeName] = attribute.nodeValue;\n }\n return nodeAttributes;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (XML);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9Gb3JtYXRzL1hNTC5qcz9mNTc3Il0sIm5hbWVzIjpbIlhNTCIsIm9wdGlvbnMiLCJUeXBlRXJyb3IiLCJsb2dnZXIiLCJMb2dnZXIiLCJnZXRMb2dnZXIiLCJ0cmFjZSIsInhtbFN0cmluZyIsInhtbERvYyIsInJlYWRlciIsIl9fZ2V0WE1MRE9DIiwic2V0UmVhZGVyIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJnZXRYTUxTdHJpbmciLCJzZXRYTUxTdHJpbmciLCJnZXRSZWFkZXIiLCJyZWFkIiwiZ2V0WE1MRG9jIiwic2V0WE1MRG9jIiwiZG9jIiwicGFyc2UiLCJyb290IiwiX19nZXRSb290Tm9kZSIsInBhcnNlck91dHB1dCIsIm5vZGVOYW1lIiwiX19yZWFkRGVmYXVsdCIsIndpbmRvdyIsIkRPTVBhcnNlciIsInJlcXVpcmUiLCJwYXJzZUZyb21TdHJpbmciLCJwYXJzZXIiLCJlcnJvck1zZyIsIkFjdGl2ZVhPYmplY3QiLCJhc3luYyIsImxvYWRYTUwiLCJwYXJzZUVycm9yIiwiZXJyb3JDb2RlIiwibGluZSIsImxpbmVwb3MiLCJyZWFzb24iLCJFcnJvciIsImUiLCJtZXNzYWdlIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJwYXJzZXJlcnJvciIsImkiLCJjb250ZW50IiwiaW5uZXJIVE1MIiwiaW5kZXhPZiIsImRvY3VtZW50RWxlbWVudCIsIm5vZGVUeXBlIiwibm9kZSIsImRhdGEiLCJhdHRyaWJ1dGVzIiwiZGF0YUF0dHJpYnV0ZXMiLCJfX2dldEF0dHJpYnV0ZXMiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGREYXRhIiwiY2hpbGQiLCJjaGlsZHJlbiIsImNoaWxkTm9kZXMiLCJub2RlVmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJvbGQiLCJwdXNoIiwibm9kZUF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7QUFFOEM7QUFDOUM7O0FB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LGNBQWM7RUFDekI7QUFDSjtBQUVlcEUsa0VBQUciLCJmaWxlIjoiLi9zcmMvRm9ybWF0cy9YTUwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgcmVxdWlyZSAqL1xuXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbi8vIGltcG9ydCBfX3htbGRvbSBmcm9tIFwieG1sZG9tXCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIENsYXNzZSBwZXJtZXR0YW50IGQnw6ljcmlyZSBvdSBkZSBsaXJlIGR1IFhNTCwgc291cyBmb3JtZSBkZSBkb2N1bWVudCBET00sXG4gKiDDqXZlbnR1ZWxsZW1lbnQgc2Vsb24gZGVzIGNsw6lzIGRlIGxlY3R1cmUgKHJlYWRlcnMpIG91IGQnw6ljcml0dXJlICh3cml0ZXJzKSBzcMOpY2lmaXF1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgR3AuRm9ybWF0cy5YTUxcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyBkdSBmb3JtYXQgWE1MXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJlYWRlcl0gLSBJbnN0YW5jZSBkJ3VuIFJlYWRlciBkZSBzZXJ2aWNlIChBbHRpUmVzcG9uc2VSZWFkZXIsIEdlb2NvZGVSZXF1ZXN0UmVhZGVyLCBldGMuKVxuICogICAgICB1dGlsZSBwb3VyIGludGVycHLDqXRlciBsZSBYTUwgbG9yc3F1ZSBzYSBzdHJ1Y3R1cmUgZXN0IGNvbm51ZS5cbiAqICAgICAgQ2UgcmVhZGVyIGRvaXQgY29tcG9ydGVyIGF1IG1vaW5zIHVuZSBmb25jdGlvbiBzdGF0aXF1ZSByZWFkIChyb290KSBwZXJtZXR0YW50IGQnaW5pdGlhbGlzZXIgbGEgbGVjdHVyZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMud3JpdGVyc10gLSB3cml0ZXJzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnhtbFN0cmluZ10gLSBjaGHDrm5lIGRlIGNhcmFjdMOocmUgY29udGVuYW50IGR1IFhNTCDDoCBpbnRlcnByw6l0ZXIuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gWE1MIChvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFhNTCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlhNTCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgIH1cblxuICAgIC8vIEZJWE1FIDogbm90aW9uIGRlIHNpbmdsZXRvblxuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCk7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIFhNTCAoKV1cIik7XG5cbiAgICAvKipcbiAgICAgKiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzIGNvbnRlbmFudCBsZSB0ZXh0ZSBYTUxcbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueG1sU3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERPTSBFbGVtZW50IGNvcnJlc3BvbmRhbnQgw6AgbGEgc3RydWN0dXJlIGR1IFhNTC5cbiAgICAgKiBAdHlwZSB7RE9NRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLnhtbERvYyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBPYmpldCBjb250ZW5hbnQgZGVzIGZvbmN0aW9ucyBkZSBsZWN0dXJlIGRlcyBkaWZmw6lyZW50ZXMgYmFsaXNlcyBYTUwuXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLnJlYWRlciA9IG51bGw7XG5cbiAgICAvLyB0cmFpdGVtZW50IGRlcyBwYXJhbcOodHJlcyBkJ29wdGlvbnMgcydpbCB5IGVuIGFcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy54bWxTdHJpbmcgJiYgdHlwZW9mIG9wdGlvbnMueG1sU3RyaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLnhtbFN0cmluZyA9IG9wdGlvbnMueG1sU3RyaW5nO1xuICAgICAgICAgICAgLy8gU2kgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlIGEgw6l0w6kgcGFzc8OpZSBlbiBlbnRyw6llIDogb24gbGEgdHJhbnNmb3JtZSBhdXNzaSBlbiBYTUwgZG9jdW1lbnRcbiAgICAgICAgICAgIHRoaXMueG1sRG9jID0gX19nZXRYTUxET0Mob3B0aW9ucy54bWxTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnJlYWRlcikge1xuICAgICAgICAgICAgdGhpcy5zZXRSZWFkZXIob3B0aW9ucy5yZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5YTUwucHJvdG90eXBlID0ge1xuXG4gICAgLyoqXG4gICAgICogQGxlbmRzIG1vZHVsZTpYTUxcbiAgICAgKi9cblxuICAgIC8qXG4gICAgICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciA6IFhNTCxcblxuICAgIC8qKlxuICAgICAqIE3DqXRob2RlIHBlcm1ldHRhbnQgZGUgcsOpY3Vww6lyZXIgbGEgY2hhw65uZSBkZSBjYXJhY3TDqHJlcyBhc3NvY2nDqWUgYXUgZm9ybWF0IFhNTFxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30geG1sU3RyaW5nIC0gbGEgY2hhw65uZSBkZSBjYXJhY3TDqHJlcyBjb3JyZXNwb25kYW50IGF1IGZvcm1hdCBYTUxcbiAgICAgKi9cbiAgICBnZXRYTUxTdHJpbmcgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhtbFN0cmluZztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTcOpdGhvZGUgcGVybWV0dGFudCBkJ2F0dHJpYnVlciB1bmUgY2hhw65uZSBkZSBjYXJhY3TDqHJlcyBhdSBmb3JtYXQgWE1MIChhdHRyaWJ1dCB4bWxTdHJpbmcpLlxuICAgICAqIExhIG3DqXRob2RlIHZhIGF1c3NpIHRyYW5zZm9ybWVyIGNldHRlIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMgZW4gZG9jdW1lbnQgWE1MLFxuICAgICAqIGFmaW4gZGUgcmVtcGxpciBsJ2F0dHJpYnV0IHhtbERvYy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB4bWxTdHJpbmcgLSBsYSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzIGNvcnJlc3BvbmRhbnQgYXUgZm9ybWF0IFhNTFxuICAgICAqL1xuICAgIHNldFhNTFN0cmluZyA6IGZ1bmN0aW9uICh4bWxTdHJpbmcpIHtcbiAgICAgICAgaWYgKHhtbFN0cmluZyAmJiB0eXBlb2YgeG1sU3RyaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLnhtbFN0cmluZyA9IHhtbFN0cmluZztcbiAgICAgICAgICAgIHRoaXMueG1sRG9jID0gX19nZXRYTUxET0MoeG1sU3RyaW5nKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNw6l0aG9kZSBwZXJtZXR0YW50IGRlIHLDqWN1cMOpcmVyIGxlcyByZWFkZXJzIGFzc29jacOpcyBhdSBmb3JtYXQgWE1MLCBzJ2lscyBvbnQgw6l0w6kgZMOpZmluaXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVhZGVycyAtIGxlcyByZWFkZXJzIGFzc29jacOpcyBhdSBmb3JtYXQgWE1MLCBzJ2lscyBleGlzdGVudCxcbiAgICAgKiAgICAgIHNvdXMgZm9ybWUgZCd1bmUgY29sbGVjdGlvbiBkZSBmb25jdGlvbnNcbiAgICAgKi9cbiAgICBnZXRSZWFkZXIgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRlcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTcOpdGhvZGUgcGVybWV0dGFudCBkJ2F0dHJpYnVlciBkZXMgcmVhZGVycywgc291cyBsYSBmb3JtZSBkJ3VuIG9iamV0IGRlIGZvbmN0aW9ucyAobm9kZSwgZGF0YSksXG4gICAgICogICAgICBsb3JzcXUnaWxzIG4nb250IHBhcyDDqXTDqSBkw6lmaW5pcyBsb3JzIGRlIGwnaW5zdGFuY2lhdGlvbiBwYXIgZXhlbXBsZSAobmV3IFhNTCAob3B0aW9ucykpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHJlYWRlciAtIEluc3RhbmNlIGQndW4gUmVhZGVyIGRlIHNlcnZpY2UgKEFsdGlSZXNwb25zZVJlYWRlciwgR2VvY29kZVJlcXVlc3RSZWFkZXIsIGV0Yy4pXG4gICAgICogICAgICB1dGlsZSBwb3VyIGludGVycHLDqXRlciBsZSBYTUwgbG9yc3F1ZSBzYSBzdHJ1Y3R1cmUgZXN0IGNvbm51ZS5cbiAgICAgKiAgICAgIENlIHJlYWRlciBkb2l0IGNvbXBvcnRlciBhdSBtb2lucyB1bmUgZm9uY3Rpb24gc3RhdGlxdWUgcmVhZCAocm9vdCkgcGVybWV0dGFudCBkJ2luaXRpYWxpc2VyIGxhIGxlY3R1cmUuXG4gICAgICovXG4gICAgc2V0UmVhZGVyIDogZnVuY3Rpb24gKHJlYWRlcikge1xuICAgICAgICBpZiAocmVhZGVyICYmIHJlYWRlci5yZWFkICYmIHR5cGVvZiByZWFkZXIucmVhZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRlciA9IHJlYWRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNw6l0aG9kZSBwZXJtZXR0YW50IGRlIHLDqWN1cMOpcmVyIGxlIGRvY3VtZW50IFhNTCBhc3NvY2nDqSBhdSBmb3JtYXQsIHMnaWwgZXhpc3RlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7RE9NRWxlbWVudH0geG1sRG9jIC0gbGUgZG9jdW1lbnQgWE1MIChET00gZG9jdW1lbnQgbm9kZSkgcydpbCBleGlzdGVcbiAgICAgKi9cbiAgICBnZXRYTUxEb2MgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhtbERvYztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0dGVyXG4gICAgICovXG4gICAgc2V0WE1MRG9jIDogZnVuY3Rpb24gKGRvYykge1xuICAgICAgICB0aGlzLnhtbERvYyA9IGRvYztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIE3DqXRob2RlIGluaXRpYWxpc2FudCBsYSBsZWN0dXJlIGR1IFhNTCwgw6AgcGFydGlyIGQndW4gWE1MIERvY3VtZW50IDpcbiAgICAgKiAgICAgIGNyw6lhdGlvbiBkJ3VuIG9iamV0IEphdmFTY3JpcHQgY29udGVuYW50IGxlcyBpbmZvcm1hdGlvbnMgZHUgWE1MLFxuICAgICAqICAgICAgc2F1ZiBkYW5zIGxlIGNhcyBvw7kgaWwgbidleGlzdGUgcGFzIGRlIFhNTCBEb2N1bWVudCDDoCBpbnRlcnByw6l0ZXIgKHJldG91cm5lIHVuIG9iamV0IHZpZGUpLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBbcGFyc2VyT3V0cHV0XSAtIHVuIG9iamV0IEphdmFTY3JpcHQgY29udGVuYW50IGxlcyBpbmZvcm1hdGlvbnMgZHUgWE1MIDpcbiAgICAgKiAtIHNvaXQgdG91dGVzIGxlcyBpbmZvcm1hdGlvbnMgc2kgYXVjdW4gcmVhZGVyIG4nYSDDqXTDqSBzcMOpY2lmacOpIMOgIGxhIGNyw6lhdGlvbiBkdSBmb3JtYXRcbiAgICAgKiAtIHNvaXQgbGVzIGluZm9ybWF0aW9ucyBzcMOpY2lmacOpZXMgZGFucyBsZSByZWFkZXIuXG4gICAgICovXG4gICAgcGFyc2UgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGJ1aWxkIHhtbCBkb2N1bWVudCBmcm9tIHhtbFN0cmluZ1xuICAgICAgICBpZiAoIXRoaXMueG1sRG9jICYmIHRoaXMueG1sU3RyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnhtbERvYyA9IF9fZ2V0WE1MRE9DKHRoaXMueG1sU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy54bWxEb2MpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gX19nZXRSb290Tm9kZSh0aGlzLnhtbERvYyk7XG4gICAgICAgICAgICBpZiAocm9vdCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZXJPdXRwdXQ7XG4gICAgICAgICAgICAgICAgLy8gY2FsbCByZWFkZXIgaWYgZXhpc3RzXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZGVyICYmIHRoaXMucmVhZGVyLnJlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyT3V0cHV0ID0gdGhpcy5yZWFkZXIucmVhZChyb290KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZXJPdXRwdXQgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyT3V0cHV0W3Jvb3Qubm9kZU5hbWVdID0gX19yZWFkRGVmYXVsdChyb290KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlck91dHB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59O1xuXG4vKipcbiAqIE3DqXRob2RlIGRlIGxhIGNsYXNzZSAocHJpdsOpZSkgcGVybWV0dGFudCBkZSBjcsOpZXIgdW4gWE1MIERvY3VtZW50IMOgIHBhcnRpciBkJ3VuZSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzIFhNTCxcbiAqICAgICAgZW4gdXRpbGlzYW50IERPTVBhcnNlciAoKSBsb3JzcXVlIGMnZXN0IHBvc3NpYmxlLlxuICogICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL2R2Y3MudzMub3JnL2hnL2lubmVyaHRtbC9yYXctZmlsZS90aXAvaW5kZXguaHRtbCN0aGUtZG9tcGFyc2VyLWludGVyZmFjZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgWE1MXG4gKiBAbWV0aG9kIF9fZ2V0WE1MRE9DXG4gKiBAcGFyYW0ge1N0cmluZ30geG1sU3RyaW5nIC0geG1sIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gZWxlbWVudFxuICogQHJldHVybiB7RE9NRWxlbWVudH0gLSB0aGUgY29ycmVzcG9uZGluZyBYTUwgRG9jdW1lbnRcbiAqL1xuZnVuY3Rpb24gX19nZXRYTUxET0MgKHhtbFN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIGVudi4gbm9kZWpzXG4gICAgICAgIHZhciBET01QYXJzZXIgPSByZXF1aXJlKFwiQHhtbGRvbS94bWxkb21cIikuRE9NUGFyc2VyOyAvLyBfX3htbGRvbS5ET01QYXJzZXI7XG4gICAgICAgIHJldHVybiBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbnYuIGJyb3dzZXJcblxuICAgICAgICB2YXIgcGFyc2VyO1xuICAgICAgICB2YXIgeG1sRG9jO1xuICAgICAgICB2YXIgZXJyb3JNc2cgPSBcIkVycmV1ciBsb3JzIGR1IHBhcnNpbmcgZGUgbGEgcsOpcG9uc2UgZHUgc2VydmljZSA6IFhNTCBub24gY29uZm9ybWVcIjtcblxuICAgICAgICBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIDwgOVxuICAgICAgICAgICAgeG1sRG9jID0gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTERPTVwiKTtcbiAgICAgICAgICAgIHhtbERvYy5hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgeG1sRG9jLmxvYWRYTUwoeG1sU3RyaW5nKTtcbiAgICAgICAgICAgIHZhciBwYXJzZUVycm9yID0geG1sRG9jLnBhcnNlRXJyb3I7XG4gICAgICAgICAgICBpZiAocGFyc2VFcnJvci5lcnJvckNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VFcnJvci5saW5lICYmIHBhcnNlRXJyb3IubGluZXBvcykge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1zZyArPSBcIiggbGlnbmUgXCIgKyBwYXJzZUVycm9yLmxpbmUgKyBcIiwgY29sb25uZSBcIiArIHBhcnNlRXJyb3IubGluZXBvcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRXJyb3IucmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTXNnICs9IFwiOiAgXCIgKyBwYXJzZUVycm9yLnJlYXNvbiArIFwiKVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHhtbERvYztcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAvLyBsZXMgYXV0cmVzIChDaHJvbWUsIE1vemlsbGEsIElFID49IDkpXG4gICAgICAgICAgICBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciBicm93c2VyIHJhaXNlcyBleGNlcHRpb24gaWYgeG1sU3RyaW5nIGlzIG5vdCB2YWxpZCBYTUxcbiAgICAgICAgICAgICAgICBpZiAoZS5tZXNzYWdlID09PSBcIlN5bnRheEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJldXIgbG9ycyBkdSBwYXJzaW5nIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbG9vayBmb3IgcGFyc2luZyBlcnJvciBpbiBjYXNlIG5vIGV4Y2VwdGlvbiB3YXMgcmFpc2VkXG4gICAgICAgICAgICBpZiAoeG1sRG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwicGFyc2VyZXJyb3JcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZXJlcnJvciA9IHhtbERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyc2VyZXJyb3IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJzZXJlcnJvcltpXS5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VwdCBpbiBjYXNlIHBhcnNlcmVycm9yIGlzIGp1c3QgYmVjYXVzZSBvZiBodWdlIHhtbCwgYnV0IHBhcnNpbmcgaXMgZG9uZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQuaW5kZXhPZihcIkh1Z2UgaW5wdXQgbG9va3VwXCIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2cgKz0gXCIoXCIgKyBjb250ZW50ICsgXCIpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgheG1sRG9jLmRvY3VtZW50RWxlbWVudCkgeyAvLyBtYXkgaGFwcGVuIGluIGNocm9tZSBicm93c2VyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB4bWxEb2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGSVhNRVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb21wYXRpYmxlIERPTSBQYXJzZXIgcG91ciBjZSBuYXZpZ2F0ZXVyICFcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogTcOpdGhvZGUgZGUgbGEgY2xhc3NlIChwcml2w6llKSBwZXJtZXR0YW50IGRlIHLDqWN1cMOpcmVyIGxlIG5vZXVkIHJhY2luZSBkdSBkb2N1bWVudCxcbiAqICAgICAgw6AgcGFydGlyIGQndW4gZG9jdW1lbnQgbm9kZSAobm9kZVR5cGU9OSksIHB1aXMgbGVjdHVyZSBkZSBjZSBub2V1ZCAocmVhZE5vZGUpXG4gKlxuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBYTUxcbiAqIEBtZXRob2QgX19nZXRSb290Tm9kZVxuICogQHBhcmFtIHtET01FbGVtZW50fSBbeG1sRG9jXSAtIGEgRG9jdW1lbnQgTm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudH0gcm9vdCAtIHRoZSBkb2N1bWVudCByb290IG5vZGVcbiAqL1xuZnVuY3Rpb24gX19nZXRSb290Tm9kZSAoeG1sRG9jKSB7XG4gICAgdmFyIHJvb3Q7XG4gICAgaWYgKHhtbERvYy5ub2RlVHlwZSA9PT0gOSkge1xuICAgICAgICAvLyBJTkZPIDogbm9kZVR5cGUgOSByZXByZXNlbnRzIHRoZSBlbnRpcmUgZG9jdW1lbnQgKHRoZSByb290LW5vZGUgb2YgdGhlIERPTSB0cmVlKVxuICAgICAgICByb290ID0geG1sRG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHhtbERvYy5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICByb290ID0geG1sRG9jO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdDtcbn1cblxuLyoqXG4gKiBNw6l0aG9kZSBkZSBsYSBjbGFzc2UgKHByaXbDqWUpIHBlcm1ldHRhbnQgZGUgbGlyZSBhdXRvbWF0aXF1ZW1lbnQgdW4gbm9ldWQgWE1MLFxuICogICAgICBsb3JzcXUnYXVjdW4gcmVhZGVyIHNww6ljaWZpcXVlIG4nYSDDqXTDqSBzcMOpY2lmacOpIChwYXJzZXIgYnJ1dClcbiAqXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFhNTFxuICogQG1ldGhvZCByZWFkRGVmYXVsdFxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIC0gYSBET00gZWxlbWVudCBub2RlXG4gKiBAZXhhbXBsZSBmaW5hbCBkYXRhIG9iamVjdCBsb29rcyBsaWtlIDpcbiAqICAgICAgICAgIGRhdGEgPSB7XG4gKiAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogYXR0cmlidXRlVmFsdWUsXG4gKiAgICAgICAgICAgICAgY2hpbGROYW1lOiB7XG4gKiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZVZhbHVlLFxuICogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBhdHRyaWJ1dGVWYWx1ZSxcbiAqICAgICAgICAgICAgICAgICAgY2hpbGROYW1lOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICBcInRleHRDb250ZW50XCI6IHRleHRDb250ZW50XG4gKiAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgIGNoaWxkTmFtZToge1xuICogICAgICAgICAgICAgICAgICAgICAgY2hpbGROYW1lOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTphdHRyaWJ1dGVWYWx1ZVxuICogICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgfVxuICogICAgICAgICAgfVxuICovXG5mdW5jdGlvbiBfX3JlYWREZWZhdWx0IChub2RlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcblxuICAgIC8vIGlmIGVsZW1lbnQgbm9kZSBoYXMgYXR0cmlidXRlcywgc2V0IHRoZWlyIHZhbHVlcyB0byBkYXRhXG4gICAgaWYgKG5vZGUuYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBkYXRhQXR0cmlidXRlcyA9IF9fZ2V0QXR0cmlidXRlcyhub2RlKTtcbiAgICAgICAgZGF0YVtcImF0dHJpYnV0ZXNcIl0gPSBkYXRhQXR0cmlidXRlcztcbiAgICB9XG5cbiAgICAvLyBpZiBlbGVtZW50IG5vZGUgaGFzIGNoaWxkTm9kZXMsIHJlYWQgdGhlbSBhbmQgc2V0IHRoZW0gdG8gZGF0YVxuICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICB2YXIgY2hpbGREYXRhID0ge307XG4gICAgICAgIHZhciBjaGlsZDtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMykgeyAvLyBURVhUX05PREVcbiAgICAgICAgICAgICAgICBkYXRhW1widGV4dENvbnRlbnRcIl0gPSBjaGlsZC5ub2RlVmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY2hpbGREYXRhID0gX19yZWFkRGVmYXVsdChjaGlsZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFbY2hpbGQubm9kZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGNoaWxkRGF0YSBpbiBhbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtjaGlsZC5ub2RlTmFtZV0gPSBjaGlsZERhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBzZXZlcmFsIGNoaWxkTm9kZXMgaGFzIHRoZSBzYW1lIG5hbWUgOiBzdG9yZSB0aGVtIGluIGFuIGFycmF5LlxuICAgICAgICAgICAgICAgICAgICAvLyBpZiBkYXRhW25vZGVOYW1lXSBhbHJlYWR5IGV4aXN0cyBidXQgaXMgbm90IGFuIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhW2NoaWxkLm5vZGVOYW1lXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSBkYXRhW2NoaWxkLm5vZGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbY2hpbGQubm9kZU5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2NoaWxkLm5vZGVOYW1lXS5wdXNoKG9sZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVtjaGlsZC5ub2RlTmFtZV0ucHVzaChjaGlsZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE8gOiBtYW5hZ2Ugb3RoZXIgbm9kZSB0eXBlcyAoND1DREFUQSwgZXRjKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogTcOpdGhvZGUgZGUgbGEgY2xhc3NlIChwcml2w6llKSBwZXJtZXR0YW50IGRlIHLDqWN1cMOpcmVyIGxlcyBhdHRyaWJ1dHMgZCd1biBub2V1ZCDDqWzDqW1lbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFhNTFxuICogQG1ldGhvZCBfX2dldEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSAtIG5vZXVkIGNvbnRlbmFudCBsJ2F0dHJpYnV0IHJlY2hlcmNow6lcbiAqIEByZXR1cm4ge09iamVjdH0gbm9kZUF0dHJpYnV0ZXMgLSBvYmpldCBjb250ZW5hbnQgbGVzIG5vbXMgZXQgdmFsZXVycyBkZXMgZGlmZsOpcmVudHMgYXR0cmlidXRzXG4gKi9cbmZ1bmN0aW9uIF9fZ2V0QXR0cmlidXRlcyAobm9kZSkge1xuICAgIGlmIChub2RlLmF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgbm9kZUF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgICBub2RlQXR0cmlidXRlc1thdHRyaWJ1dGUubm9kZU5hbWVdID0gYXR0cmlidXRlLm5vZGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZUF0dHJpYnV0ZXM7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBYTUw7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Formats/XML.js\n"); + +/***/ }), + +/***/ "./src/Gp.js": +/*!*******************!*\ + !*** ./src/Gp.js ***! + \*******************/ +/*! exports provided: servicesVersion, servicesDate, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"servicesVersion\", function() { return servicesVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"servicesDate\", function() { return servicesDate; });\n/* harmony import */ var _Services_Services__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Services/Services */ \"./src/Services/Services.js\");\n/* harmony import */ var _Services_DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Services/DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Services_Alti_Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Services/Alti/Response/model/AltiResponse */ \"./src/Services/Alti/Response/model/AltiResponse.js\");\n/* harmony import */ var _Services_Alti_Response_model_Elevation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Services/Alti/Response/model/Elevation */ \"./src/Services/Alti/Response/model/Elevation.js\");\n/* harmony import */ var _Services_AutoComplete_Response_model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Services/AutoComplete/Response/model/AutoCompleteResponse */ \"./src/Services/AutoComplete/Response/model/AutoCompleteResponse.js\");\n/* harmony import */ var _Services_AutoComplete_Response_model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Services/AutoComplete/Response/model/SuggestedLocation */ \"./src/Services/AutoComplete/Response/model/SuggestedLocation.js\");\n/* harmony import */ var _Services_ProcessIsoCurve_Response_model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse */ \"./src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js\");\n/* harmony import */ var _Services_Route_Response_model_RouteResponse__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Services/Route/Response/model/RouteResponse */ \"./src/Services/Route/Response/model/RouteResponse.js\");\n/* harmony import */ var _Services_Route_Response_model_RouteInstruction__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Services/Route/Response/model/RouteInstruction */ \"./src/Services/Route/Response/model/RouteInstruction.js\");\n/* harmony import */ var _Services_Config_Config__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Services/Config/Config */ \"./src/Services/Config/Config.js\");\n/* harmony import */ var _Protocols_XHR__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Protocols/XHR */ \"./src/Protocols/XHR.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Utils/Helper */ \"./src/Utils/Helper.js\");\n/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../package.json */ \"./package.json\");\nvar _package_json__WEBPACK_IMPORTED_MODULE_13___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../package.json */ \"./package.json\", 1);\n/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > {@link Gp.Error Error()}\n* - .TYPE_SRVERR : \"SERVICE_ERROR\"\n* - .TYPE_UNKERR : \"UNKNOWN_ERROR\"\n* - .TYPE_USEERR : \"USAGE_ERROR\"\n*\n* > {@link module:Helper Helper}\n* - .indent()\n* - .normalyzeParameters()\n* - .normalyzeUrl()\n*\n* > {@link module:XHR Protocols.XHR}\n* - .call()\n*\n* > {@link module:Services Services (objects)}\n* - .Alti\n* - {@link Gp.Services.Alti.Elevation .Elevation()}\n* - {@link Gp.Services.AltiResponse .AltiResponse()}\n* - .AutoComplete\n* - {@link Gp.Services.AutoComplete.SuggestedLocation .SuggestedLocation()}\n* - {@link Gp.Services.AutoCompleteResponse .AutoCompleteResponse()}\n* - {@link Gp.Services.Config .Config()}\n* - {@link Gp.Services.DefaultUrl .DefaultUrl()}\n* - {@link Gp.Services.GeocodeResponse .GeocodeResponse()}\n* - {@link Gp.Services.GetConfigResponse .GetConfigResponse()}\n* - {@link Gp.Services.IsoCurveResponse .IsoCurveResponse()}\n* - .Route\n* - {@link Gp.Services.Route.RouteInstruction .RouteInstruction()}\n* - {@link Gp.Services.RouteResponse .RouteResponse()}\n*\n* > Services (factory)\n* - {@link module:Services~autoComplete .autoComplete()}\n* - {@link module:Services~geocode .geocode()}\n* - {@link module:Services~getAltitude .getAltitude()}\n* - {@link module:Services~getConfig .getConfig()}\n* - {@link module:Services~isoCurve .isoCurve()}\n* - {@link module:Services~reverseGeocode .reverseGeocode()}\n* - {@link module:Services~route .route()}\n*\n* > servicesDate : \"YYYY-MM-DD\"\n*\n* > servicesVersion : \"X.X.X\"\n*\n*/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/** Version */\nvar servicesVersion = _package_json__WEBPACK_IMPORTED_MODULE_13__.version;\n/** Publication date */\nvar servicesDate = _package_json__WEBPACK_IMPORTED_MODULE_13__.date;\n\n// on declare les ns dans root global\nvar Gp = {};\nGp.servicesVersion = servicesVersion;\nGp.servicesDate = servicesDate;\n\n// Export Protocols\nGp.Protocols = {};\nGp.Protocols.XHR = _Protocols_XHR__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\n// Export services\nGp.Services = _Services_Services__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n// Export DefaultUrls\nGp.Services.DefaultUrl = _Services_DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n// Export Alti\nGp.Services.AltiResponse = _Services_Alti_Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nGp.Services.Alti = {};\nGp.Services.Alti.Elevation = _Services_Alti_Response_model_Elevation__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n// Export Autocomplete\nGp.Services.AutoCompleteResponse = _Services_AutoComplete_Response_model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\nGp.Services.AutoComplete = {};\nGp.Services.AutoComplete.SuggestedLocation = _Services_AutoComplete_Response_model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n// Export Config\nGp.Services.Config = _Services_Config_Config__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n// Export IsoCurve\nGp.Services.IsoCurveResponse = _Services_ProcessIsoCurve_Response_model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\n// Export Route\nGp.Services.RouteResponse = _Services_Route_Response_model_RouteResponse__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nGp.Services.Route = {};\nGp.Services.Route.RouteInstruction = _Services_Route_Response_model_RouteInstruction__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\n// Export Erreurs et Outils\nGp.Error = _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\nGp.Helper = _Utils_Helper__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (Gp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9HcC5qcz8xZjU2Il0sIm5hbWVzIjpbInNlcnZpY2VzVmVyc2lvbiIsIlBrZyIsInZlcnNpb24iLCJzZXJ2aWNlc0RhdGUiLCJkYXRlIiwiR3AiLCJQcm90b2NvbHMiLCJYSFIiLCJTZXJ2aWNlcyIsIkRlZmF1bHRVcmwiLCJBbHRpUmVzcG9uc2UiLCJBbHRpIiwiRWxldmF0aW9uIiwiQXV0b0NvbXBsZXRlUmVzcG9uc2UiLCJBdXRvQ29tcGxldGUiLCJTdWdnZXN0ZWRMb2NhdGlvbiIsIkNvbmZpZyIsIklzb0N1cnZlUmVzcG9uc2UiLCJSb3V0ZVJlc3BvbnNlIiwiUm91dGUiLCJSb3V0ZUluc3RydWN0aW9uIiwiRXJyb3IiLCJIZWxwZXIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTJDO0FBQ1c7QUFDaUI7QUFDTjtBQUM4QjtBQUNOO0FBQ1E7QUFDdkI7QUFDTTtBQUNsQztBQUNaO0FBQ1k7QUFDVjtBQUVGOztBQUVsQztBQUNPLElBQU1BLGVBQWUsR0FBR0MsMkNBQUcsQ0FBQ0MsT0FBTztBQUMxQztBQUNPLElBQU1DLFlBQVksR0FBR0YsMkNBQUcsQ0FBQ0csSUFBSTs7QUFFcEM7QUFDQSxJQUFJQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRVhBLEVBQUUsQ0FBQ0wsZUFBZSxHQUFHQSxlQUFlO0FBQ3BDSyxFQUFFLENBQUNGLFlBQVksR0FBR0EsWUFBWTs7QUFFOUI7QUFDQUUsRUFBRSxDQUFDQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCRCxFQUFFLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxHQUFHQSx1REFBRztBQUN0QjtBQUNBRixFQUFFLENBQUNHLFFBQVEsR0FBR0EsMERBQVE7QUFDdEI7QUFDQUgsRUFBRSxDQUFDRyxRQUFRLENBQUNDLFVBQVUsR0FBR0EsbUVBQVU7QUFDbkM7QUFDQUosRUFBRSxDQUFDRyxRQUFRLENBQUNFLFlBQVksR0FBR0Esa0ZBQVk7QUFDdkNMLEVBQUUsQ0FBQ0csUUFBUSxDQUFDRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCTixFQUFFLENBQUNHLFFBQVEsQ0FBQ0csSUFBSSxDQUFDQyxTQUFTLEdBQUdBLCtFQUFTO0FBQ3RDO0FBQ0FQLEVBQUUsQ0FBQ0csUUFBUSxDQUFDSyxvQkFBb0IsR0FBR0Esa0dBQW9CO0FBQ3ZEUixFQUFFLENBQUNHLFFBQVEsQ0FBQ00sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUM3QlQsRUFBRSxDQUFDRyxRQUFRLENBQUNNLFlBQVksQ0FBQ0MsaUJBQWlCLEdBQUdBLCtGQUFpQjtBQUM5RDtBQUNBVixFQUFFLENBQUNHLFFBQVEsQ0FBQ1EsTUFBTSxHQUFHQSwrREFBTTtBQUMzQjtBQUNBWCxFQUFFLENBQUNHLFFBQVEsQ0FBQ1MsZ0JBQWdCLEdBQUdBLHdHQUFnQjtBQUMvQztBQUNBWixFQUFFLENBQUNHLFFBQVEsQ0FBQ1UsYUFBYSxHQUFHQSxvRkFBYTtBQUN6Q2IsRUFBRSxDQUFDRyxRQUFRLENBQUNXLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEJkLEVBQUUsQ0FBQ0csUUFBUSxDQUFDVyxLQUFLLENBQUNDLGdCQUFnQixHQUFHQSx1RkFBZ0I7QUFDckQ7QUFDQWYsRUFBRSxDQUFDZ0IsS0FBSyxHQUFHQSxpRUFBSztBQUNoQmhCLEVBQUUsQ0FBQ2lCLE1BQU0sR0FBR0Esc0RBQU07QUFFSGpCLGlFQUFFIiwiZmlsZSI6Ii4vc3JjL0dwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4qIEdsb2JhbCB2YXJpYWJsZSBHcC5cbipcbiogQG1vZHVsZSBHcFxuKiBAYWxpYXMgR3BcbiogQGRlc2NyaXB0aW9uXG4qXG4qIFRoaXMgaXMgdGhlIGdsb2JhbCB2YXJpYWJsZSB0aGF0IGlzIGV4cG9zZWQgaW4gdGhlIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4qIENvbnRlbnQgaXMgY29tcG9zZWQgb2YgY29uc3RydWN0b3IsIGZ1bmN0aW9ucyBhbmQgcHJvcGVydGllcy4uLlxuKlxuKiA+IHtAbGluayBHcC5FcnJvciBFcnJvcigpfVxuKiAgICAgLSAuVFlQRV9TUlZFUlIgOiBcIlNFUlZJQ0VfRVJST1JcIlxuKiAgICAgLSAuVFlQRV9VTktFUlIgOiBcIlVOS05PV05fRVJST1JcIlxuKiAgICAgLSAuVFlQRV9VU0VFUlIgOiBcIlVTQUdFX0VSUk9SXCJcbipcbiogPiB7QGxpbmsgbW9kdWxlOkhlbHBlciBIZWxwZXJ9XG4qICAgICAtIC5pbmRlbnQoKVxuKiAgICAgLSAubm9ybWFseXplUGFyYW1ldGVycygpXG4qICAgICAtIC5ub3JtYWx5emVVcmwoKVxuKlxuKiA+IHtAbGluayBtb2R1bGU6WEhSIFByb3RvY29scy5YSFJ9XG4qICAgICAtIC5jYWxsKClcbipcbiogPiB7QGxpbmsgbW9kdWxlOlNlcnZpY2VzIFNlcnZpY2VzIChvYmplY3RzKX1cbiogICAgIC0gLkFsdGlcbiogICAgICAgICAtIHtAbGluayBHcC5TZXJ2aWNlcy5BbHRpLkVsZXZhdGlvbiAuRWxldmF0aW9uKCl9XG4qICAgICAtIHtAbGluayBHcC5TZXJ2aWNlcy5BbHRpUmVzcG9uc2UgLkFsdGlSZXNwb25zZSgpfVxuKiAgICAgLSAuQXV0b0NvbXBsZXRlXG4qICAgICAgICAgLSB7QGxpbmsgR3AuU2VydmljZXMuQXV0b0NvbXBsZXRlLlN1Z2dlc3RlZExvY2F0aW9uIC5TdWdnZXN0ZWRMb2NhdGlvbigpfVxuKiAgICAgLSB7QGxpbmsgR3AuU2VydmljZXMuQXV0b0NvbXBsZXRlUmVzcG9uc2UgLkF1dG9Db21wbGV0ZVJlc3BvbnNlKCl9XG4qICAgICAtIHtAbGluayBHcC5TZXJ2aWNlcy5Db25maWcgLkNvbmZpZygpfVxuKiAgICAgLSB7QGxpbmsgR3AuU2VydmljZXMuRGVmYXVsdFVybCAuRGVmYXVsdFVybCgpfVxuKiAgICAgLSB7QGxpbmsgR3AuU2VydmljZXMuR2VvY29kZVJlc3BvbnNlIC5HZW9jb2RlUmVzcG9uc2UoKX1cbiogICAgIC0ge0BsaW5rIEdwLlNlcnZpY2VzLkdldENvbmZpZ1Jlc3BvbnNlIC5HZXRDb25maWdSZXNwb25zZSgpfVxuKiAgICAgLSB7QGxpbmsgR3AuU2VydmljZXMuSXNvQ3VydmVSZXNwb25zZSAuSXNvQ3VydmVSZXNwb25zZSgpfVxuKiAgICAgLSAuUm91dGVcbiogICAgICAgICAtIHtAbGluayBHcC5TZXJ2aWNlcy5Sb3V0ZS5Sb3V0ZUluc3RydWN0aW9uIC5Sb3V0ZUluc3RydWN0aW9uKCl9XG4qICAgICAtIHtAbGluayBHcC5TZXJ2aWNlcy5Sb3V0ZVJlc3BvbnNlIC5Sb3V0ZVJlc3BvbnNlKCl9XG4qXG4qID4gU2VydmljZXMgKGZhY3RvcnkpXG4qICAgICAtIHtAbGluayBtb2R1bGU6U2VydmljZXN+YXV0b0NvbXBsZXRlIC5hdXRvQ29tcGxldGUoKX1cbiogICAgIC0ge0BsaW5rIG1vZHVsZTpTZXJ2aWNlc35nZW9jb2RlIC5nZW9jb2RlKCl9XG4qICAgICAtIHtAbGluayBtb2R1bGU6U2VydmljZXN+Z2V0QWx0aXR1ZGUgLmdldEFsdGl0dWRlKCl9XG4qICAgICAtIHtAbGluayBtb2R1bGU6U2VydmljZXN+Z2V0Q29uZmlnIC5nZXRDb25maWcoKX1cbiogICAgIC0ge0BsaW5rIG1vZHVsZTpTZXJ2aWNlc35pc29DdXJ2ZSAuaXNvQ3VydmUoKX1cbiogICAgIC0ge0BsaW5rIG1vZHVsZTpTZXJ2aWNlc35yZXZlcnNlR2VvY29kZSAucmV2ZXJzZUdlb2NvZGUoKX1cbiogICAgIC0ge0BsaW5rIG1vZHVsZTpTZXJ2aWNlc35yb3V0ZSAucm91dGUoKX1cbipcbiogPiBzZXJ2aWNlc0RhdGUgOiBcIllZWVktTU0tRERcIlxuKlxuKiA+IHNlcnZpY2VzVmVyc2lvbiA6IFwiWC5YLlhcIlxuKlxuKi9cblxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL1NlcnZpY2VzL1NlcnZpY2VzXCI7XG5pbXBvcnQgRGVmYXVsdFVybCBmcm9tIFwiLi9TZXJ2aWNlcy9EZWZhdWx0VXJsU2VydmljZVwiO1xuaW1wb3J0IEFsdGlSZXNwb25zZSBmcm9tIFwiLi9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL21vZGVsL0FsdGlSZXNwb25zZVwiO1xuaW1wb3J0IEVsZXZhdGlvbiBmcm9tIFwiLi9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL21vZGVsL0VsZXZhdGlvblwiO1xuaW1wb3J0IEF1dG9Db21wbGV0ZVJlc3BvbnNlIGZyb20gXCIuL1NlcnZpY2VzL0F1dG9Db21wbGV0ZS9SZXNwb25zZS9tb2RlbC9BdXRvQ29tcGxldGVSZXNwb25zZVwiO1xuaW1wb3J0IFN1Z2dlc3RlZExvY2F0aW9uIGZyb20gXCIuL1NlcnZpY2VzL0F1dG9Db21wbGV0ZS9SZXNwb25zZS9tb2RlbC9TdWdnZXN0ZWRMb2NhdGlvblwiO1xuaW1wb3J0IElzb0N1cnZlUmVzcG9uc2UgZnJvbSBcIi4vU2VydmljZXMvUHJvY2Vzc0lzb0N1cnZlL1Jlc3BvbnNlL21vZGVsL1Byb2Nlc3NJc29DdXJ2ZVJlc3BvbnNlXCI7XG5pbXBvcnQgUm91dGVSZXNwb25zZSBmcm9tIFwiLi9TZXJ2aWNlcy9Sb3V0ZS9SZXNwb25zZS9tb2RlbC9Sb3V0ZVJlc3BvbnNlXCI7XG5pbXBvcnQgUm91dGVJbnN0cnVjdGlvbiBmcm9tIFwiLi9TZXJ2aWNlcy9Sb3V0ZS9SZXNwb25zZS9tb2RlbC9Sb3V0ZUluc3RydWN0aW9uXCI7XG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuL1NlcnZpY2VzL0NvbmZpZy9Db25maWdcIjtcbmltcG9ydCBYSFIgZnJvbSBcIi4vUHJvdG9jb2xzL1hIUlwiO1xuaW1wb3J0IEVycm9yIGZyb20gXCIuL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgSGVscGVyIGZyb20gXCIuL1V0aWxzL0hlbHBlclwiO1xuXG5pbXBvcnQgUGtnIGZyb20gXCIuLi9wYWNrYWdlLmpzb25cIjtcblxuLyoqIFZlcnNpb24gKi9cbmV4cG9ydCBjb25zdCBzZXJ2aWNlc1ZlcnNpb24gPSBQa2cudmVyc2lvbjtcbi8qKiBQdWJsaWNhdGlvbiBkYXRlICovXG5leHBvcnQgY29uc3Qgc2VydmljZXNEYXRlID0gUGtnLmRhdGU7XG5cbi8vIG9uIGRlY2xhcmUgbGVzIG5zIGRhbnMgcm9vdCBnbG9iYWxcbnZhciBHcCA9IHt9O1xuXG5HcC5zZXJ2aWNlc1ZlcnNpb24gPSBzZXJ2aWNlc1ZlcnNpb247XG5HcC5zZXJ2aWNlc0RhdGUgPSBzZXJ2aWNlc0RhdGU7XG5cbi8vIEV4cG9ydCBQcm90b2NvbHNcbkdwLlByb3RvY29scyA9IHt9O1xuR3AuUHJvdG9jb2xzLlhIUiA9IFhIUjtcbi8vIEV4cG9ydCBzZXJ2aWNlc1xuR3AuU2VydmljZXMgPSBTZXJ2aWNlcztcbi8vIEV4cG9ydCBEZWZhdWx0VXJsc1xuR3AuU2VydmljZXMuRGVmYXVsdFVybCA9IERlZmF1bHRVcmw7XG4vLyBFeHBvcnQgQWx0aVxuR3AuU2VydmljZXMuQWx0aVJlc3BvbnNlID0gQWx0aVJlc3BvbnNlO1xuR3AuU2VydmljZXMuQWx0aSA9IHt9O1xuR3AuU2VydmljZXMuQWx0aS5FbGV2YXRpb24gPSBFbGV2YXRpb247XG4vLyBFeHBvcnQgQXV0b2NvbXBsZXRlXG5HcC5TZXJ2aWNlcy5BdXRvQ29tcGxldGVSZXNwb25zZSA9IEF1dG9Db21wbGV0ZVJlc3BvbnNlO1xuR3AuU2VydmljZXMuQXV0b0NvbXBsZXRlID0ge307XG5HcC5TZXJ2aWNlcy5BdXRvQ29tcGxldGUuU3VnZ2VzdGVkTG9jYXRpb24gPSBTdWdnZXN0ZWRMb2NhdGlvbjtcbi8vIEV4cG9ydCBDb25maWdcbkdwLlNlcnZpY2VzLkNvbmZpZyA9IENvbmZpZztcbi8vIEV4cG9ydCBJc29DdXJ2ZVxuR3AuU2VydmljZXMuSXNvQ3VydmVSZXNwb25zZSA9IElzb0N1cnZlUmVzcG9uc2U7XG4vLyBFeHBvcnQgUm91dGVcbkdwLlNlcnZpY2VzLlJvdXRlUmVzcG9uc2UgPSBSb3V0ZVJlc3BvbnNlO1xuR3AuU2VydmljZXMuUm91dGUgPSB7fTtcbkdwLlNlcnZpY2VzLlJvdXRlLlJvdXRlSW5zdHJ1Y3Rpb24gPSBSb3V0ZUluc3RydWN0aW9uO1xuLy8gRXhwb3J0IEVycmV1cnMgZXQgT3V0aWxzXG5HcC5FcnJvciA9IEVycm9yO1xuR3AuSGVscGVyID0gSGVscGVyO1xuXG5leHBvcnQgZGVmYXVsdCBHcDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Gp.js\n"); + +/***/ }), + +/***/ "./src/Protocols/JSONP.js": +/*!********************************!*\ + !*** ./src/Protocols/JSONP.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/**\n * JSONP : Implémentation du protocole JSONP de la plateforme Géoportail\n *\n * @module JSONP\n * @private\n * @alias Gp.Protocols.JSONP\n */\n\n\n// cf. https://github.com/sobstel/jsonp.js\nvar JSONP = {\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n */\n uuid: function () {\n var id = Math.floor(Date.now());\n return function () {\n return id++;\n };\n }(),\n /**\n * Cette fonction réalise l'appel du service fourni via le paramètre \"options.url\"\n * en mettant en œuvre le protocole JSONP.\n *\n * @method call\n * @static\n * @param {Object} options - parametres d'invocation du service en JSONP\n * @param {String} options.url - URL du service à invoquer (indépendamment du protocole JSONP).\n * Cette URL contient déjà les paramètres du service.\n * Si le paramètre dédié à la mise en oeuvre du protocole JSONP (callback=xxx) n'est pas présent, il est rajouté par la fonction ;\n * sa valeur est déterminée en fonction du paramètre callbackName.\n * @param {Number} [options.timeOut = 0] - Nombre de ms au bout duquel on considère que le service n'a pas répondu.\n * Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut.\n * @param {String} [options.callbackSuffix = null] - Suffixe de la fonction de callback à rajouter sur l'URL.\n * Si aucun suffixe n'est spécifié (cas par défaut), on utilisera l'identifiant this.uuid () comme suffixe. Ex: \"callback1458574396582 ()\"\n * @param {String} [options.callbackName = gp.protocol.jsonp] - Valeur du paramètre callback à rajouter sur l'URL.\n * Si l'URL fournie contient déjà le paramètre callback, le paramètre callbackName ne sera pas pris en compte.\n * La fonction de callback est créée dynamiquement par la fonction JSONP ;\n * elle a deux fonctions :\n * elle annule la condition de timeOut\n * puis appelle la fonction fournie par l'utilisateur via le paramètre onResponse.\n * @param {Function} options.onResponse - Nom de la fonction qui sera appelée lors de la réception des résultats du service.\n * Ce paramètre sera ignoré si l'URL contient déjà le paramètre callback.\n * La fonction de rappel appelée sera alors celle ayant pour nom la valeur de ce paramètre.\n * @param {Function} [options.onTimeOut] - Nom de la fonction qui sera appelée en cas de non réponse du service.\n * Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut.\n * @example\n * var options = {\n * url : 'http://localhost/some/test.json&callback=myResults',\n * timeOut : 100,\n * callbackName : 'myResults',\n * callbackSuffix : \"\",\n * onResponse : function (response) {\n * console.log('results : ', response);\n * },\n *\n * };\n * JSONP.call(options);\n */\n call: function call(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"JSONP\");\n logger.trace(\"[JSONP::call ()]\");\n\n // analyse parametres\n\n if (!options) {\n logger.error(\"missing parameter : options !\");\n throw new Error(\"missing parameter : options !\");\n }\n if (!options.url) {\n logger.error(\"missing parameter : options.url !\");\n throw new Error(\"missing parameter : options.url !\");\n }\n if (!options.timeOut) {\n logger.info(\"setting 'options.timeOut' default value\");\n options.timeOut = 0;\n }\n\n // FIXME si un callback coté client a été mis en place,\n // cette condition sur cette methode n'a pas de sens !?\n if (!options.onResponse) {\n logger.error(\"missing parameter : options.onResponse !\");\n throw new Error(\"missing parameter : options.onResponse !\");\n // FIXME doit on definir un callback interne par defaut !?\n // options.onResponse = function (data) {\n // console.log(\"response callback (inner) : \", data);\n // };\n }\n\n // ID du callback à utiliser : null ou string.\n // si l'utilisateur a spécifié un suffixe pour le callback, on le récupère comme un ID (ex: options.callbackSuffix = \"\")\n // sinon, on utilise un timestamp : this.uuid ()\n var callbackId = typeof options.callbackSuffix === \"string\" ? options.callbackSuffix : this.uuid();\n\n // on recherche le parametre callback et son nom de fonction dans l'url\n var urlHasCallbackKey = false;\n var urlHasCallbackName = false;\n var idx = options.url.indexOf(\"callback=\");\n if (idx !== -1) {\n urlHasCallbackKey = true;\n // extraction callbackName de l'url : entre \"callback=\" et \"&\" ou fin de ligne\n var j = options.url.indexOf(\"&\", idx);\n if (j === -1) {\n j = options.url.length;\n }\n\n // on ecrase le parametre options.callbackName s'il avait été défini\n var callbackName = options.url.substring(idx + 9, j);\n if (callbackName) {\n urlHasCallbackName = true;\n options.callbackName = callbackName;\n logger.info(\"setting 'options.callbackName' value (\" + options.callbackName + \") from 'options.url' parameter\");\n }\n }\n\n // on ajoute le parametre callback dans l'URL s'il n'existe pas\n if (!urlHasCallbackKey) {\n // gestion des autres param. et \"?\"\n var k = options.url.indexOf(\"?\");\n if (k === -1) {\n // aucun param., ni de '?'\n options.url = options.url + \"?\" + \"callback=\";\n } else if (k === options.url.length) {\n // uniquement le '?'\n options.url = options.url + \"callback=\";\n } else {\n // le '?' et les param. existent\n options.url = options.url + \"&\" + \"callback=\";\n }\n logger.info(\"setting callback default key in 'options.url' : \" + options.url);\n }\n\n // utilisation de la fonction callback coté client ?\n var HasCallbackName = options.callbackName ? true : urlHasCallbackName;\n\n // on ajoute le nom de la fonction callback dans l'URL si elle n'existe pas\n if (!urlHasCallbackName) {\n // fonction callback par defaut\n if (!options.callbackName) {\n logger.info(\"setting 'options.callbackName' default value\");\n options.callbackName = \"callback\"; // ou \"gp.protocol.jsonp\" ?\n // info : si on ne veut pas gerer d'ID dans le callback,\n // options.callbackSuffix = \"\"\n if (callbackId || callbackId === \"\") {\n options.callbackName += callbackId;\n }\n }\n options.url = options.url.replace(\"callback=\", \"callback=\" + options.callbackName);\n logger.info(\"setting callback function name in 'options.url' : \" + options.url);\n }\n\n // timeOut par defaut\n if (!options.onTimeOut) {\n logger.info(\"setting 'options.onTimeOut' default value\");\n /** callback timeout par defaut */\n options.onTimeOut = function /* error */\n () {\n console.log(\"TimeOut while invoking url : \" + options.url);\n };\n }\n if (!HasCallbackName) {\n var self = this;\n\n // event du timeout\n var onTimeOutTrigger = null;\n\n // declenche le timeout si > à 0 !\n if (options.timeOut > 0) {\n onTimeOutTrigger = window.setTimeout(function () {\n /** fonction de reponse du service */\n window[options.callbackName] = function () {};\n options.onTimeOut();\n self._deleteScript(callbackId);\n }, options.timeOut);\n }\n\n // FIXME le nom de la fonction n'accepte pas de namespace !\n // ex. Gp.Function.callback\n /**\n * fonction de reponse du service\n * @param {Object} data - data\n * @private\n */\n window[options.callbackName] = function (data) {\n window.clearTimeout(onTimeOutTrigger);\n options.onResponse(data);\n self._deleteScript(callbackId);\n };\n }\n this._createScript(callbackId, options.url);\n },\n /**\n * create Script\n * @param {String} callbackId - callback Id\n * @param {String} url - url\n * @private\n */\n _createScript: function _createScript(callbackId, url) {\n var scriptu;\n var scripto = document.getElementById(\"results\" + callbackId);\n scriptu = document.createElement(\"script\");\n scriptu.setAttribute(\"type\", \"text/javascript\");\n scriptu.setAttribute(\"src\", url);\n scriptu.setAttribute(\"charset\", \"UTF-8\");\n scriptu.setAttribute(\"id\", \"results\" + callbackId);\n scriptu.setAttribute(\"async\", \"true\"); // FIXME async ?\n // head ou body ou autres ?\n var node = document.documentElement || document.getElementsByTagName(\"head\")[0];\n if (scripto === null) {\n node.appendChild(scriptu);\n } else {\n // s'il existe déjà, on le remplace !\n node.replaceChild(scriptu, scripto);\n }\n },\n /**\n * delete Script\n * @param {String} callbackId - callback Id\n * @private\n */\n _deleteScript: function _deleteScript(callbackId) {\n var script = document.getElementById(\"results\" + callbackId);\n if (script) {\n var node = script.parentNode || document.documentElement;\n if (!node) {\n return;\n }\n node.removeChild(script);\n }\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (JSONP);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9Qcm90b2NvbHMvSlNPTlAuanM/ZjVlYyJdLCJuYW1lcyI6WyJKU09OUCIsInV1aWQiLCJpZCIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJub3ciLCJjYWxsIiwib3B0aW9ucyIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwiZXJyb3IiLCJFcnJvciIsInVybCIsInRpbWVPdXQiLCJpbmZvIiwib25SZXNwb25zZSIsImNhbGxiYWNrSWQiLCJjYWxsYmFja1N1ZmZpeCIsInVybEhhc0NhbGxiYWNrS2V5IiwidXJsSGFzQ2FsbGJhY2tOYW1lIiwiaWR4IiwiaW5kZXhPZiIsImoiLCJsZW5ndGgiLCJjYWxsYmFja05hbWUiLCJzdWJzdHJpbmciLCJrIiwiSGFzQ2FsbGJhY2tOYW1lIiwicmVwbGFjZSIsIm9uVGltZU91dCIsImNvbnNvbGUiLCJsb2ciLCJzZWxmIiwib25UaW1lT3V0VHJpZ2dlciIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfZGVsZXRlU2NyaXB0IiwiZGF0YSIsImNsZWFyVGltZW91dCIsIl9jcmVhdGVTY3JpcHQiLCJzY3JpcHR1Iiwic2NyaXB0byIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwibm9kZSIsImRvY3VtZW50RWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXBwZW5kQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJzY3JpcHQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUM4Qzs7QUFFOUM7QUFDQSxJQUFJQSxLQUFLLEdBQUc7RUFFUjtBQUNKO0FBQ0E7QUFDQTtFQUNJQyxJQUFJLEVBQUksWUFBWTtJQUNoQixJQUFJQyxFQUFFLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxJQUFJLENB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LE1BQU0sQ0FBQ0MsVUFBVSxJQUFJVixRQUFRLENBQUNLLGVBQWU7TUFDeEQsSUFBSSxDQUFDRCxJQUFJLEVBQUU7UUFDUDtNQUNKO01BQ0FBLElBQUksQ0FBQ08sV0FBVyxDQUFDRixNQUFNLENBQUM7SUFDNUI7RUFDSjtBQUNKLENBQUM7QUFFY3RELG9FQUFLIiwiZmlsZSI6Ii4vc3JjL1Byb3RvY29scy9KU09OUC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSlNPTlAgOiBJbXBsw6ltZW50YXRpb24gZHUgcHJvdG9jb2xlIEpTT05QIGRlIGxhIHBsYXRlZm9ybWUgR8Opb3BvcnRhaWxcbiAqXG4gKiBAbW9kdWxlIEpTT05QXG4gKiBAcHJpdmF0ZVxuICogQGFsaWFzIEdwLlByb3RvY29scy5KU09OUFxuICovXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcblxuLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9zb2JzdGVsL2pzb25wLmpzXG52YXIgSlNPTlAgPSB7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3Rpb24gZCd1biBpZGVudGlmaWFudCBzdGF0aXF1ZSBiYXPDqSBzdXIgbGUgdGltZXN0YW1wLFxuICAgICAqIGV0IHF1aSBzJ2luY3JlbWVudGUgZGUgKzEgw6AgY2hhcXVlIGFwcGVsXG4gICAgICovXG4gICAgdXVpZCA6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpZCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQrKztcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQ2V0dGUgZm9uY3Rpb24gcsOpYWxpc2UgbCdhcHBlbCBkdSBzZXJ2aWNlIGZvdXJuaSB2aWEgbGUgcGFyYW3DqHRyZSBcIm9wdGlvbnMudXJsXCJcbiAgICAgKiBlbiBtZXR0YW50IGVuIMWTdXZyZSBsZSBwcm90b2NvbGUgSlNPTlAuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGNhbGxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBwYXJhbWV0cmVzIGQnaW52b2NhdGlvbiBkdSBzZXJ2aWNlIGVuIEpTT05QXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMudXJsIC0gVVJMIGR1IHNlcnZpY2Ugw6AgaW52b3F1ZXIgKGluZMOpcGVuZGFtbWVudCBkdSBwcm90b2NvbGUgSlNPTlApLlxuICAgICAqICBDZXR0ZSBVUkwgY29udGllbnQgZMOpasOgIGxlcyBwYXJhbcOodHJlcyBkdSBzZXJ2aWNlLlxuICAgICAqICBTaSBsZSBwYXJhbcOodHJlIGTDqWRpw6kgw6AgbGEgbWlzZSBlbiBvZXV2cmUgZHUgcHJvdG9jb2xlIEpTT05QIChjYWxsYmFjaz14eHgpIG4nZXN0IHBhcyBwcsOpc2VudCwgaWwgZXN0IHJham91dMOpIHBhciBsYSBmb25jdGlvbiA7XG4gICAgICogIHNhIHZhbGV1ciBlc3QgZMOpdGVybWluw6llIGVuIGZvbmN0aW9uIGR1IHBhcmFtw6h0cmUgY2FsbGJhY2tOYW1lLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy50aW1lT3V0ID0gMF0gLSBOb21icmUgZGUgbXMgYXUgYm91dCBkdXF1ZWwgb24gY29uc2lkw6hyZSBxdWUgbGUgc2VydmljZSBuJ2EgcGFzIHLDqXBvbmR1LlxuICAgICAqICBVbmUgdmFsZXVyIGRlIDAgcG91ciBjZSBwYXJhbcOodHJlIHBlcm1ldCBkZSBkw6lzYWN0aXZlciBsYSBnZXN0aW9uIGR1IHRpbWVPdXQuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNhbGxiYWNrU3VmZml4ID0gbnVsbF0gLSBTdWZmaXhlIGRlIGxhIGZvbmN0aW9uIGRlIGNhbGxiYWNrIMOgIHJham91dGVyIHN1ciBsJ1VSTC5cbiAgICAgKiAgU2kgYXVjdW4gc3VmZml4ZSBuJ2VzdCBzcMOpY2lmacOpIChjYXMgcGFyIGTDqWZhdXQpLCBvbiB1dGlsaXNlcmEgbCdpZGVudGlmaWFudCB0aGlzLnV1aWQgKCkgY29tbWUgc3VmZml4ZS4gRXg6IFwiY2FsbGJhY2sxNDU4NTc0Mzk2NTgyICgpXCJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY2FsbGJhY2tOYW1lID0gZ3AucHJvdG9jb2wuanNvbnBdIC0gVmFsZXVyIGR1IHBhcmFtw6h0cmUgY2FsbGJhY2sgw6AgcmFqb3V0ZXIgc3VyIGwnVVJMLlxuICAgICAqICBTaSBsJ1VSTCBmb3VybmllIGNvbnRpZW50IGTDqWrDoCBsZSBwYXJhbcOodHJlIGNhbGxiYWNrLCBsZSBwYXJhbcOodHJlIGNhbGxiYWNrTmFtZSBuZSBzZXJhIHBhcyBwcmlzIGVuIGNvbXB0ZS5cbiAgICAgKiAgTGEgZm9uY3Rpb24gZGUgY2FsbGJhY2sgZXN0IGNyw6nDqWUgZHluYW1pcXVlbWVudCBwYXIgbGEgZm9uY3Rpb24gSlNPTlAgO1xuICAgICAqICBlbGxlIGEgZGV1eCBmb25jdGlvbnMgOlxuICAgICAqICAgIGVsbGUgYW5udWxlIGxhIGNvbmRpdGlvbiBkZSB0aW1lT3V0XG4gICAgICogICAgcHVpcyBhcHBlbGxlIGxhIGZvbmN0aW9uIGZvdXJuaWUgcGFyIGwndXRpbGlzYXRldXIgdmlhIGxlIHBhcmFtw6h0cmUgb25SZXNwb25zZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLm9uUmVzcG9uc2UgLSBOb20gZGUgbGEgZm9uY3Rpb24gcXVpIHNlcmEgYXBwZWzDqWUgbG9ycyBkZSBsYSByw6ljZXB0aW9uIGRlcyByw6lzdWx0YXRzIGR1IHNlcnZpY2UuXG4gICAgICogIENlIHBhcmFtw6h0cmUgc2VyYSBpZ25vcsOpIHNpIGwnVVJMIGNvbnRpZW50IGTDqWrDoCBsZSBwYXJhbcOodHJlIGNhbGxiYWNrLlxuICAgICAqICBMYSBmb25jdGlvbiBkZSByYXBwZWwgYXBwZWzDqWUgc2VyYSBhbG9ycyBjZWxsZSBheWFudCBwb3VyIG5vbSBsYSB2YWxldXIgZGUgY2UgcGFyYW3DqHRyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblRpbWVPdXRdIC0gTm9tIGRlIGxhIGZvbmN0aW9uIHF1aSBzZXJhIGFwcGVsw6llIGVuIGNhcyBkZSBub24gcsOpcG9uc2UgZHUgc2VydmljZS5cbiAgICAgKiAgTGUgdGVtcHMgYXUgYm91dCBkdXF1ZWwgb24gY29uc2lkw6hyZSBxdWUgbGUgc2VydmljZSBuJ2EgcGFzIHLDqXBvbmR1IGVzdCBkw6l0ZXJtaW7DqSBwYXIgbGUgcGFyYW3DqHRyZSB0aW1lT3V0LlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgKiAgICAgIHVybCA6ICdodHRwOi8vbG9jYWxob3N0L3NvbWUvdGVzdC5qc29uJmNhbGxiYWNrPW15UmVzdWx0cycsXG4gICAgICogICAgICB0aW1lT3V0IDogMTAwLFxuICAgICAqICAgICAgY2FsbGJhY2tOYW1lIDogJ215UmVzdWx0cycsXG4gICAgICogICAgICBjYWxsYmFja1N1ZmZpeCA6IFwiXCIsXG4gICAgICogICAgICBvblJlc3BvbnNlIDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICogICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdHMgOiAnLCByZXNwb25zZSk7XG4gICAgICogICAgICB9LFxuICAgICAqXG4gICAgICogICB9O1xuICAgICAqICAgSlNPTlAuY2FsbChvcHRpb25zKTtcbiAgICAgKi9cbiAgICBjYWxsIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbG9nZ2VyXG4gICAgICAgIHZhciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiSlNPTlBcIik7XG4gICAgICAgIGxvZ2dlci50cmFjZShcIltKU09OUDo6Y2FsbCAoKV1cIik7XG5cbiAgICAgICAgLy8gYW5hbHlzZSBwYXJhbWV0cmVzXG5cbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJtaXNzaW5nIHBhcmFtZXRlciA6IG9wdGlvbnMgIVwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgcGFyYW1ldGVyIDogb3B0aW9ucyAhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnVybCkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwibWlzc2luZyBwYXJhbWV0ZXIgOiBvcHRpb25zLnVybCAhXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBwYXJhbWV0ZXIgOiBvcHRpb25zLnVybCAhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnRpbWVPdXQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwic2V0dGluZyAnb3B0aW9ucy50aW1lT3V0JyBkZWZhdWx0IHZhbHVlXCIpO1xuICAgICAgICAgICAgb3B0aW9ucy50aW1lT3V0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZJWE1FIHNpIHVuIGNhbGxiYWNrIGNvdMOpIGNsaWVudCBhIMOpdMOpIG1pcyBlbiBwbGFjZSxcbiAgICAgICAgLy8gY2V0dGUgY29uZGl0aW9uIHN1ciBjZXR0ZSBtZXRob2RlIG4nYSBwYXMgZGUgc2VucyAhP1xuICAgICAgICBpZiAoIW9wdGlvbnMub25SZXNwb25zZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwibWlzc2luZyBwYXJhbWV0ZXIgOiBvcHRpb25zLm9uUmVzcG9uc2UgIVwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgcGFyYW1ldGVyIDogb3B0aW9ucy5vblJlc3BvbnNlICFcIik7XG4gICAgICAgICAgICAvLyBGSVhNRSBkb2l0IG9uIGRlZmluaXIgdW4gY2FsbGJhY2sgaW50ZXJuZSBwYXIgZGVmYXV0ICE/XG4gICAgICAgICAgICAvLyBvcHRpb25zLm9uUmVzcG9uc2UgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgLy8gICAgY29uc29sZS5sb2coXCJyZXNwb25zZSBjYWxsYmFjayAoaW5uZXIpIDogXCIsIGRhdGEpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElEIGR1IGNhbGxiYWNrIMOgIHV0aWxpc2VyIDogbnVsbCBvdSBzdHJpbmcuXG4gICAgICAgIC8vIHNpIGwndXRpbGlzYXRldXIgYSBzcMOpY2lmacOpIHVuIHN1ZmZpeGUgcG91ciBsZSBjYWxsYmFjaywgb24gbGUgcsOpY3Vww6hyZSBjb21tZSB1biBJRCAoZXg6IG9wdGlvbnMuY2FsbGJhY2tTdWZmaXggPSBcIlwiKVxuICAgICAgICAvLyBzaW5vbiwgb24gdXRpbGlzZSB1biB0aW1lc3RhbXAgOiB0aGlzLnV1aWQgKClcbiAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSAodHlwZW9mIG9wdGlvbnMuY2FsbGJhY2tTdWZmaXggPT09IFwic3RyaW5nXCIpID8gb3B0aW9ucy5jYWxsYmFja1N1ZmZpeCA6IHRoaXMudXVpZCgpO1xuXG4gICAgICAgIC8vIG9uIHJlY2hlcmNoZSBsZSBwYXJhbWV0cmUgY2FsbGJhY2sgZXQgc29uIG5vbSBkZSBmb25jdGlvbiBkYW5zIGwndXJsXG4gICAgICAgIHZhciB1cmxIYXNDYWxsYmFja0tleSA9IGZhbHNlO1xuICAgICAgICB2YXIgdXJsSGFzQ2FsbGJhY2tOYW1lID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIGlkeCA9IG9wdGlvbnMudXJsLmluZGV4T2YoXCJjYWxsYmFjaz1cIik7XG5cbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybEhhc0NhbGxiYWNrS2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGV4dHJhY3Rpb24gY2FsbGJhY2tOYW1lIGRlIGwndXJsIDogZW50cmUgXCJjYWxsYmFjaz1cIiBldCBcIiZcIiBvdSBmaW4gZGUgbGlnbmVcbiAgICAgICAgICAgIHZhciBqID0gb3B0aW9ucy51cmwuaW5kZXhPZihcIiZcIiwgaWR4KTtcbiAgICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGogPSBvcHRpb25zLnVybC5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG9uIGVjcmFzZSBsZSBwYXJhbWV0cmUgb3B0aW9ucy5jYWxsYmFja05hbWUgcydpbCBhdmFpdCDDqXTDqSBkw6lmaW5pXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2tOYW1lID0gb3B0aW9ucy51cmwuc3Vic3RyaW5nKGlkeCArIDksIGopO1xuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tOYW1lKSB7XG4gICAgICAgICAgICAgICAgdXJsSGFzQ2FsbGJhY2tOYW1lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrTmFtZSA9IGNhbGxiYWNrTmFtZTtcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhcInNldHRpbmcgJ29wdGlvbnMuY2FsbGJhY2tOYW1lJyB2YWx1ZSAoXCIgKyBvcHRpb25zLmNhbGxiYWNrTmFtZSArIFwiKSBmcm9tICdvcHRpb25zLnVybCcgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gb24gYWpvdXRlIGxlIHBhcmFtZXRyZSBjYWxsYmFjayBkYW5zIGwnVVJMIHMnaWwgbidleGlzdGUgcGFzXG4gICAgICAgIGlmICghdXJsSGFzQ2FsbGJhY2tLZXkpIHtcbiAgICAgICAgICAgIC8vIGdlc3Rpb24gZGVzIGF1dHJlcyBwYXJhbS4gZXQgXCI/XCJcbiAgICAgICAgICAgIHZhciBrID0gb3B0aW9ucy51cmwuaW5kZXhPZihcIj9cIik7XG4gICAgICAgICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBhdWN1biBwYXJhbS4sIG5pIGRlICc/J1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgKyBcIj9cIiArIFwiY2FsbGJhY2s9XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGsgPT09IG9wdGlvbnMudXJsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHVuaXF1ZW1lbnQgbGUgJz8nXG4gICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIFwiY2FsbGJhY2s9XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGxlICc/JyBldCBsZXMgcGFyYW0uIGV4aXN0ZW50XG4gICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIFwiJlwiICsgXCJjYWxsYmFjaz1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwic2V0dGluZyBjYWxsYmFjayBkZWZhdWx0IGtleSBpbiAnb3B0aW9ucy51cmwnIDogXCIgKyBvcHRpb25zLnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1dGlsaXNhdGlvbiBkZSBsYSBmb25jdGlvbiBjYWxsYmFjayBjb3TDqSBjbGllbnQgP1xuICAgICAgICB2YXIgSGFzQ2FsbGJhY2tOYW1lID0gb3B0aW9ucy5jYWxsYmFja05hbWUgPyB0cnVlIDogdXJsSGFzQ2FsbGJhY2tOYW1lO1xuXG4gICAgICAgIC8vIG9uIGFqb3V0ZSBsZSBub20gZGUgbGEgZm9uY3Rpb24gY2FsbGJhY2sgZGFucyBsJ1VSTCBzaSBlbGxlIG4nZXhpc3RlIHBhc1xuICAgICAgICBpZiAoIXVybEhhc0NhbGxiYWNrTmFtZSkge1xuICAgICAgICAgICAgLy8gZm9uY3Rpb24gY2FsbGJhY2sgcGFyIGRlZmF1dFxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNhbGxiYWNrTmFtZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwic2V0dGluZyAnb3B0aW9ucy5jYWxsYmFja05hbWUnIGRlZmF1bHQgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja05hbWUgPSBcImNhbGxiYWNrXCI7IC8vIG91IFwiZ3AucHJvdG9jb2wuanNvbnBcIiA/XG4gICAgICAgICAgICAgICAgLy8gaW5mbyA6IHNpIG9uIG5lIHZldXQgcGFzIGdlcmVyIGQnSUQgZGFucyBsZSBjYWxsYmFjayxcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25zLmNhbGxiYWNrU3VmZml4ID0gXCJcIlxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja0lkIHx8IGNhbGxiYWNrSWQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja05hbWUgKz0gY2FsbGJhY2tJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsLnJlcGxhY2UoXCJjYWxsYmFjaz1cIiwgXCJjYWxsYmFjaz1cIiArIG9wdGlvbnMuY2FsbGJhY2tOYW1lKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwic2V0dGluZyBjYWxsYmFjayBmdW5jdGlvbiBuYW1lIGluICdvcHRpb25zLnVybCcgOiBcIiArIG9wdGlvbnMudXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRpbWVPdXQgcGFyIGRlZmF1dFxuICAgICAgICBpZiAoIW9wdGlvbnMub25UaW1lT3V0KSB7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcInNldHRpbmcgJ29wdGlvbnMub25UaW1lT3V0JyBkZWZhdWx0IHZhbHVlXCIpO1xuICAgICAgICAgICAgLyoqIGNhbGxiYWNrIHRpbWVvdXQgcGFyIGRlZmF1dCAqL1xuICAgICAgICAgICAgb3B0aW9ucy5vblRpbWVPdXQgPSBmdW5jdGlvbiAoLyogZXJyb3IgKi8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRpbWVPdXQgd2hpbGUgaW52b2tpbmcgdXJsIDogXCIgKyBvcHRpb25zLnVybCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFIYXNDYWxsYmFja05hbWUpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgLy8gZXZlbnQgZHUgdGltZW91dFxuICAgICAgICAgICAgdmFyIG9uVGltZU91dFRyaWdnZXIgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBkZWNsZW5jaGUgbGUgdGltZW91dCBzaSA+IMOgIDAgIVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGltZU91dCA+IDApIHtcbiAgICAgICAgICAgICAgICBvblRpbWVPdXRUcmlnZ2VyID0gd2luZG93LnNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBmb25jdGlvbiBkZSByZXBvbnNlIGR1IHNlcnZpY2UgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tvcHRpb25zLmNhbGxiYWNrTmFtZV0gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25UaW1lT3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWxldGVTY3JpcHQoY2FsbGJhY2tJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZU91dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZJWE1FIGxlIG5vbSBkZSBsYSBmb25jdGlvbiBuJ2FjY2VwdGUgcGFzIGRlIG5hbWVzcGFjZSAhXG4gICAgICAgICAgICAvLyBleC4gR3AuRnVuY3Rpb24uY2FsbGJhY2tcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBmb25jdGlvbiBkZSByZXBvbnNlIGR1IHNlcnZpY2VcbiAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBkYXRhXG4gICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgd2luZG93W29wdGlvbnMuY2FsbGJhY2tOYW1lXSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChvblRpbWVPdXRUcmlnZ2VyKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uUmVzcG9uc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRlU2NyaXB0KGNhbGxiYWNrSWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNjcmlwdChjYWxsYmFja0lkLCBvcHRpb25zLnVybCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogY3JlYXRlIFNjcmlwdFxuICAgICogQHBhcmFtIHtTdHJpbmd9IGNhbGxiYWNrSWQgLSBjYWxsYmFjayBJZFxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIHVybFxuICAgICogQHByaXZhdGVcbiAgICAqL1xuICAgIF9jcmVhdGVTY3JpcHQgOiBmdW5jdGlvbiAoY2FsbGJhY2tJZCwgdXJsKSB7XG4gICAgICAgIHZhciBzY3JpcHR1O1xuICAgICAgICB2YXIgc2NyaXB0byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzdWx0c1wiICsgY2FsbGJhY2tJZCk7XG5cbiAgICAgICAgc2NyaXB0dSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgIHNjcmlwdHUuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvamF2YXNjcmlwdFwiKTtcbiAgICAgICAgc2NyaXB0dS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdXJsKTtcbiAgICAgICAgc2NyaXB0dS5zZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIsIFwiVVRGLThcIik7XG4gICAgICAgIHNjcmlwdHUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJyZXN1bHRzXCIgKyBjYWxsYmFja0lkKTtcbiAgICAgICAgc2NyaXB0dS5zZXRBdHRyaWJ1dGUoXCJhc3luY1wiLCBcInRydWVcIik7IC8vIEZJWE1FIGFzeW5jID9cbiAgICAgICAgLy8gaGVhZCBvdSBib2R5IG91IGF1dHJlcyA/XG4gICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXTtcbiAgICAgICAgaWYgKHNjcmlwdG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc2NyaXB0dSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzJ2lsIGV4aXN0ZSBkw6lqw6AsIG9uIGxlIHJlbXBsYWNlICFcbiAgICAgICAgICAgIG5vZGUucmVwbGFjZUNoaWxkKHNjcmlwdHUsIHNjcmlwdG8pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogZGVsZXRlIFNjcmlwdFxuICAgICogQHBhcmFtIHtTdHJpbmd9IGNhbGxiYWNrSWQgLSBjYWxsYmFjayBJZFxuICAgICogQHByaXZhdGVcbiAgICAqL1xuICAgIF9kZWxldGVTY3JpcHQgOiBmdW5jdGlvbiAoY2FsbGJhY2tJZCkge1xuICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXN1bHRzXCIgKyBjYWxsYmFja0lkKTtcbiAgICAgICAgaWYgKHNjcmlwdCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBzY3JpcHQucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBKU09OUDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Protocols/JSONP.js\n"); + +/***/ }), + +/***/ "./src/Protocols/Protocol.js": +/*!***********************************!*\ + !*** ./src/Protocols/Protocol.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/Helper */ \"./src/Utils/Helper.js\");\n/* harmony import */ var _XHR__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./XHR */ \"./src/Protocols/XHR.js\");\n/* harmony import */ var _JSONP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./JSONP */ \"./src/Protocols/JSONP.js\");\n/**\n * Interface de dialogue avec les webservices\n *\n * @module Protocols\n * @private\n * @alias Gp.Protocols\n */\n\n\n\nvar Protocol = {\n /**\n * Interface unique d\"envoi d\"une requête.\n *\n * @method send\n * @static\n * @param {Object} options - options generales\n * @param {String} options.url - url du service\n * @param {String} options.method - GET, POST, PUT, DELETE\n * @param {String} options.protocol - XHR | JSONP\n * @param {String} options.format - format de la reponse du service : json, xml ou null (brute)...\n * @param {String} options.wrap - encapsuler la reponse du service dans du JSON : true|false (true par defaut sur le protocole JSONP)\n * @param {String} options.callbackSuffix - suffixe de la fonction de callback (JSONP uniquement) (ex: si callbackSuffix=\"\", la fonction s'appellera \"callback\")\n * @param {String} options.timeOut - 0 ms\n * @param {Boolean} options.nocache - true|false\n * @param {Object|String} options.data - content (post) ou param (get)\n * @param {Object|String} options.headers - (post) ex. referer\n * @param {Object|String} options.content - (post) ex. \"application/json\"\n * @param {String} options.scope - this (TODO)\n * @param {Function} options.onResponse - callback\n * @param {Function} options.onFailure - callback\n * @param {Function} options.onTimeOut - callback\n * @param {String} options.proxyUrl - (TODO)\n */\n send: function send(options) {\n // INFO\n // \"output\" - param est interne à la classe \"Protocol\" (parametrable via \"wrap\"), et à ajouter à l\"url\n // ce param est independant du service car il est géré par le filtre LUA :\n // ex. json|xml (json par defaut).\n // Ce param. permet d\"encapsuler du XML dans du JSON :\n // {http : {status:200, error:null},xml :\"réponse du service\"}\n // Utile pour les services qui ne repondent que du XML (ex. Geocodage)\n //\n // |-------------------------------------------------|\n // | \\service | | | |\n // | output\\ format| json | xml | remarques |\n // |--------\\------|------|-----|--------------------|\n // | json | json | json| json/xml encapsulé |\n // | xml | json | xml | param inactif |\n // |-------------------------------------------------|\n // ex. le service demande une reponse native au \"format\" json et avec un \"output\" json.\n // on a donc une reponse json encapsulé dans un json : ce qu'on ne souhaite pas !\n // dans ce cas on ne renseigne pas output=json\n\n // INFO\n // \"wrap\" - choix d\"encapsuler ou non les reponses dans du JSON.\n // Par defaut, on encapsule uniquement les reponses sur le protocole JSONP (et qui sont en xml) !\n\n // INFO\n // \"callback\" - param est interne à la classe \"Protocol\" (non parametrable), et à ajouter à l\"url\n // ce param est independant du service car il est géré aussi par le filtre LUA :\n // ex. callback|null\n // Ce param. permet de renvoyer une reponse javascript :\n // callback ({http : {status:200, error:null},xml :\"réponse du service\"})\n // Ce param. est non renseigné par defaut car pour du JSONP, on utilise le\n // le protocol JSONP, et ce dernier implemente déjà le callback !\n\n // settings par defaut\n var settings = options || {\n method: \"GET\",\n // protocol : \"JSONP\",\n protocol: \"XHR\",\n timeOut: 0,\n format: null,\n wrap: true,\n nocache: true,\n output: \"json\",\n callback: null,\n callbackSuffix: null\n };\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on stoppe pour nodeJS... sur un protocole JSONP !\n if (typeof window === \"undefined\" && options.protocol === \"JSONP\") {\n console.log(\"Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS\");\n return;\n }\n if (options.protocol === \"XHR\" || options.format === \"json\") {\n settings.wrap = false;\n } else if (options.protocol === \"JSONP\" && options.format === \"xml\") {\n settings.wrap = true;\n }\n settings.callback = null; // FIXME non géré !?\n settings.output = settings.wrap ? \"json\" : null;\n\n // on encapsule les reponses dans un objet JSON\n if (settings.wrap) {\n var params = {};\n params.output = settings.output;\n params.callback = settings.callback;\n delete params.callback; // FIXME non géré !?\n settings.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].normalyzeUrl(options.url, params);\n }\n\n // choix de l\"implementation :\n // XHR ou JSONP\n switch (settings.protocol) {\n case \"XHR\":\n // on normalise l'url (gestion du cache)\n if (options.method === \"GET\" && options.nocache) {\n settings.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].normalyzeUrl(settings.url, {\n t: new Date().getTime()\n });\n }\n // appel du service en XHR\n _XHR__WEBPACK_IMPORTED_MODULE_1__[\"default\"].call(settings);\n break;\n case \"JSONP\":\n // on normalise l'url si les params. sont renseignés dans la string|object \"data\"\n if (settings.data) {\n settings.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__[\"default\"].normalyzeUrl(settings.url, settings.data);\n }\n\n // appel du service en JSONP\n _JSONP__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(settings);\n break;\n default:\n throw new Error(\"protocol not supported (XHR|JSONP) !\");\n }\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Protocol);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9Qcm90b2NvbHMvUHJvdG9jb2wuanM/YTE4MyJdLCJuYW1lcyI6WyJQcm90b2NvbCIsInNlbmQiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJtZXRob2QiLCJwcm90b2NvbCIsInRpbWVPdXQiLCJmb3JtYXQiLCJ3cmFwIiwibm9jYWNoZSIsIm91dHB1dCIsImNhbGxiYWNrIiwiY2FsbGJhY2tTdWZmaXgiLCJ3aW5kb3ciLCJjb25zb2xlIiwibG9nIiwicGFyYW1zIiwidXJsIiwiSGVscGVyIiwibm9ybWFseXplVXJsIiwidCIsIkRhdGUiLCJnZXRUaW1lIiwiWEhSIiwiY2FsbCIsImRhdGEiLCJKU09OUCIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3FDO0FBQ2I7QUFDSTtBQUU1QixJQUFJQSxRQUFRLEdBQUc7RUFFWDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lDLElBQUksRUFBRyxTQUFQQSxJQUFJQSxDQUFhQyxPQUFPLEVBQUU7SUFDdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBO0lBQ0E7SUFDQTs7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBO0lBQ0EsSUFBSUMsUUFBUSxHQUFHRCxPQUFPLElBQUk7TUFDdEJFLE1BQU0sRUFBRyxLQUFLO01BQ2Q7TUFDQUMsUUFBUSxFQUFHLEtBQUs7TUFDaEJDLE9BQU8sRUFBRyxDQUFDO01BQ1hDLE1BQU0sRUFBRyxJQUFJO01BQ2JDLElBQUksRUFBRyxJQUFJO01BQ1hDLE9BQU8sRUFBRyxJQUFJO01BQ2RDLE1BQU0sRUFBRyxNQUFNO01BQ2ZDLFFBQVEsRUFBRyxJQUFJO01BQ2ZDLGNBQWMsRUFBRztJQUNyQixDQUFDOztJQUVEO0lBQ0E7SUFDQSxJQUFJLE9BQU9DLE1BQU0sS0FBSyxXQUFXLElBQUlYLE9BQU8sQ0FBQ0csUUFBUSxLQUFLLE9BQU8sRUFBRTtNQUMvRFMsT0FBTyxDQUFDQyxHQUFHLENBQUMsd0ZBQXdGLENBQUM7TUFDckc7SUFDSjtJQUVBLElBQUliLE9BQU8sQ0FBQ0csUUFBUSxLQUFLLEtBQUssSUFBSUgsT0FBTyxDQUFDSyxNQUFNLEtBQUssTUFBTSxFQUFFO01BQ3pESixRQUFRLENBQUNLLElBQUksR0FBRyxLQUFLO0lBQ3pCLENBQUMsTUFBTSxJQUFJTixPQUFPLENBQUNHLFFBQVEsS0FBSyxPQUFPLElBQUlILE9BQU8sQ0FBQ0ssTUFBTSxLQUFLLEtBQUssRUFBRTtNQUNqRUosUUFBUSxDQUFDSyxJQUFJLEdBQUcsSUFBSTtJQUN4QjtJQUVBTCxRQUFRLENBQUNRLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxQlIsUUFBUSxDQUFDTyxNQUFNLEdBQUdQLFFBQVEsQ0FBQ0ssSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJOztJQUUvQztJQUNBLElBQUlMLFFBQVEsQ0FBQ0ssSUFBSSxFQUFFO01BQ2YsSUFBSVEsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNmQSxNQUFNLENBQUNOLE1BQU0sR0FBR1AsUUFBUSxDQUFDTyxNQUFNO01BQy9CTSxNQUFNLENBQUNMLFFBQVEsR0FBR1IsUUFBUSxDQUFDUSxRQUFRO01BQ25DLE9BQU9LLE1BQU0sQ0FBQ0wsUUFBUSxDQUFDLENBQUM7TUFDeEJSLFFBQVEsQ0FBQ2MsR0FBRyxHQUFHQyxxREFBTSxDQUFDQyxZQUFZLENBQUNqQixPQUFPLENBQUNlLEdBQUcsRUFBRUQsTUFBTSxDQUFDO0lBQzNEOztJQUVBO0lBQ0E7SUFDQSxRQUFRYixRQUFRLENBQUNFLFFBQVE7TUFDckIsS0FBSyxLQUFLO1FBQ047UUFDQSxJQUFJSCxPQUFPLENBQUNFLE1BQU0sS0FBSyxLQUFLLElBQUlGLE9BQU8sQ0FBQ08sT0FBTyxFQUFFO1VBQzdDTixRQUFRLENBQUNjLEdBQUcsR0FBR0MscURBQU0sQ0FBQ0MsWUFBWSxDQUFDaEIsUUFBUSxDQUFDYyxHQUFHLEVBQUU7WUFDN0NHLENBQUMsRUFBRyxJQUFJQyxJQUFJLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUM7VUFDM0IsQ0FBQyxDQUFDO1FBQ047UUFDQTtRQUNBQyw0Q0FBRyxDQUFDQyxJQUFJLENBQUNyQixRQUFRLENBQUM7UUFDbEI7TUFDSixLQUFLLE9BQU87UUFFUjtRQUNBLElBQUlBLFFBQVEsQ0FBQ3NCLElBQUksRUFBRTtVQUNmdEIsUUFBUSxDQUFDYyxHQUFHLEdBQUdDLHFEQUFNLENBQUNDLFlBQVksQ0FBQ2hCLFFBQVEsQ0FBQ2MsR0FBRyxFQUFFZCxRQUFRLENBQUNzQixJQUFJLENBQUM7UUFDbkU7O1FBRUE7UUFDQUMsOENBQUssQ0FBQ0YsSUFBSSxDQUFDckIsUUFBUSxDQUFDO1FBQ3BCO01BQ0o7UUFDSSxNQUFNLElBQUl3QixLQUFLLENBQUMsc0NBQXNDLENBQUM7SUFDL0Q7RUFDSjtBQUVKLENBQUM7QUFFYzNCLHVFQUFRIiwiZmlsZSI6Ii4vc3JjL1Byb3RvY29scy9Qcm90b2NvbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZXJmYWNlIGRlIGRpYWxvZ3VlIGF2ZWMgbGVzIHdlYnNlcnZpY2VzXG4gKlxuICogQG1vZHVsZSBQcm90b2NvbHNcbiAqIEBwcml2YXRlXG4gKiBAYWxpYXMgR3AuUHJvdG9jb2xzXG4gKi9cbmltcG9ydCBIZWxwZXIgZnJvbSBcIi4uL1V0aWxzL0hlbHBlclwiO1xuaW1wb3J0IFhIUiBmcm9tIFwiLi9YSFJcIjtcbmltcG9ydCBKU09OUCBmcm9tIFwiLi9KU09OUFwiO1xuXG52YXIgUHJvdG9jb2wgPSB7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2UgdW5pcXVlIGRcImVudm9pIGRcInVuZSByZXF1w6p0ZS5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2VuZFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgZ2VuZXJhbGVzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMudXJsICAgICAgLSB1cmwgZHUgc2VydmljZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLm1ldGhvZCAgIC0gR0VULCBQT1NULCBQVVQsIERFTEVURVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnByb3RvY29sIC0gWEhSIHwgSlNPTlBcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5mb3JtYXQgICAtIGZvcm1hdCBkZSBsYSByZXBvbnNlIGR1IHNlcnZpY2UgOiBqc29uLCB4bWwgb3UgbnVsbCAoYnJ1dGUpLi4uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMud3JhcCAgICAgLSBlbmNhcHN1bGVyIGxhIHJlcG9uc2UgZHUgc2VydmljZSBkYW5zIGR1IEpTT04gOiB0cnVlfGZhbHNlICh0cnVlIHBhciBkZWZhdXQgc3VyIGxlIHByb3RvY29sZSBKU09OUClcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5jYWxsYmFja1N1ZmZpeCAtIHN1ZmZpeGUgZGUgbGEgZm9uY3Rpb24gZGUgY2FsbGJhY2sgKEpTT05QIHVuaXF1ZW1lbnQpIChleDogc2kgY2FsbGJhY2tTdWZmaXg9XCJcIiwgbGEgZm9uY3Rpb24gcydhcHBlbGxlcmEgXCJjYWxsYmFja1wiKVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnRpbWVPdXQgIC0gMCBtc1xuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9ucy5ub2NhY2hlICAtIHRydWV8ZmFsc2VcbiAgICAgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IG9wdGlvbnMuZGF0YSAgICAgICAgLSBjb250ZW50IChwb3N0KSBvdSBwYXJhbSAoZ2V0KVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gb3B0aW9ucy5oZWFkZXJzICAgICAtIChwb3N0KSBleC4gcmVmZXJlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gb3B0aW9ucy5jb250ZW50IC0gKHBvc3QpIGV4LiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnNjb3BlICAgICAgIC0gdGhpcyAoVE9ETylcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLm9uUmVzcG9uc2UgLSBjYWxsYmFja1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMub25GYWlsdXJlIC0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLm9uVGltZU91dCAtIGNhbGxiYWNrXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucHJveHlVcmwgLSAgKFRPRE8pXG4gICAgICovXG4gICAgc2VuZCA6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIElORk9cbiAgICAgICAgLy8gXCJvdXRwdXRcIiAtIHBhcmFtIGVzdCBpbnRlcm5lIMOgIGxhIGNsYXNzZSBcIlByb3RvY29sXCIgKHBhcmFtZXRyYWJsZSB2aWEgXCJ3cmFwXCIpLCBldCDDoCBham91dGVyIMOgIGxcInVybFxuICAgICAgICAvLyAgICAgIGNlIHBhcmFtIGVzdCBpbmRlcGVuZGFudCBkdSBzZXJ2aWNlIGNhciBpbCBlc3QgZ8OpcsOpIHBhciBsZSBmaWx0cmUgTFVBIDpcbiAgICAgICAgLy8gICAgICAgICAgZXguIGpzb258eG1sIChqc29uIHBhciBkZWZhdXQpLlxuICAgICAgICAvLyAgICAgICAgICBDZSBwYXJhbS4gcGVybWV0IGRcImVuY2Fwc3VsZXIgZHUgWE1MIGRhbnMgZHUgSlNPTiA6XG4gICAgICAgIC8vICAgICAgICAgICAgICB7aHR0cCA6IHtzdGF0dXM6MjAwLCBlcnJvcjpudWxsfSx4bWwgOlwicsOpcG9uc2UgZHUgc2VydmljZVwifVxuICAgICAgICAvLyAgICAgICAgICBVdGlsZSBwb3VyIGxlcyBzZXJ2aWNlcyBxdWkgbmUgcmVwb25kZW50IHF1ZSBkdSBYTUwgKGV4LiBHZW9jb2RhZ2UpXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICAgICAgICAvLyB8ICAgICAgXFxzZXJ2aWNlIHwgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vIHwgb3V0cHV0XFwgZm9ybWF0fCBqc29uIHwgeG1sIHwgICAgIHJlbWFycXVlcyAgICAgIHxcbiAgICAgICAgLy8gfC0tLS0tLS0tXFwtLS0tLS18LS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICAgICAgICAvLyB8ICAgIGpzb24gICAgICAgfCBqc29uIHwganNvbnwganNvbi94bWwgZW5jYXBzdWzDqSB8XG4gICAgICAgIC8vIHwgICAgeG1sICAgICAgICB8IGpzb24gfCB4bWwgfCBwYXJhbSBpbmFjdGlmICAgICAgfFxuICAgICAgICAvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgLy8gZXguIGxlIHNlcnZpY2UgZGVtYW5kZSB1bmUgcmVwb25zZSBuYXRpdmUgYXUgXCJmb3JtYXRcIiBqc29uIGV0IGF2ZWMgdW4gXCJvdXRwdXRcIiBqc29uLlxuICAgICAgICAvLyBvbiBhIGRvbmMgdW5lIHJlcG9uc2UganNvbiBlbmNhcHN1bMOpIGRhbnMgdW4ganNvbiA6IGNlIHF1J29uIG5lIHNvdWhhaXRlIHBhcyAhXG4gICAgICAgIC8vIGRhbnMgY2UgY2FzIG9uIG5lIHJlbnNlaWduZSBwYXMgb3V0cHV0PWpzb25cblxuICAgICAgICAvLyBJTkZPXG4gICAgICAgIC8vIFwid3JhcFwiIC0gY2hvaXggZFwiZW5jYXBzdWxlciBvdSBub24gbGVzIHJlcG9uc2VzIGRhbnMgZHUgSlNPTi5cbiAgICAgICAgLy8gICAgICBQYXIgZGVmYXV0LCBvbiBlbmNhcHN1bGUgdW5pcXVlbWVudCBsZXMgcmVwb25zZXMgc3VyIGxlIHByb3RvY29sZSBKU09OUCAoZXQgcXVpIHNvbnQgZW4geG1sKSAhXG5cbiAgICAgICAgLy8gSU5GT1xuICAgICAgICAvLyBcImNhbGxiYWNrXCIgLSBwYXJhbSBlc3QgaW50ZXJuZSDDoCBsYSBjbGFzc2UgXCJQcm90b2NvbFwiIChub24gcGFyYW1ldHJhYmxlKSwgZXQgw6AgYWpvdXRlciDDoCBsXCJ1cmxcbiAgICAgICAgLy8gICAgICBjZSBwYXJhbSBlc3QgaW5kZXBlbmRhbnQgZHUgc2VydmljZSBjYXIgaWwgZXN0IGfDqXLDqSBhdXNzaSBwYXIgbGUgZmlsdHJlIExVQSA6XG4gICAgICAgIC8vICAgICAgICAgIGV4LiBjYWxsYmFja3xudWxsXG4gICAgICAgIC8vICAgICAgICAgIENlIHBhcmFtLiBwZXJtZXQgZGUgcmVudm95ZXIgdW5lIHJlcG9uc2UgamF2YXNjcmlwdCA6XG4gICAgICAgIC8vICAgICAgICAgICAgICBjYWxsYmFjayAoe2h0dHAgOiB7c3RhdHVzOjIwMCwgZXJyb3I6bnVsbH0seG1sIDpcInLDqXBvbnNlIGR1IHNlcnZpY2VcIn0pXG4gICAgICAgIC8vICAgICAgICAgIENlIHBhcmFtLiBlc3Qgbm9uIHJlbnNlaWduw6kgcGFyIGRlZmF1dCBjYXIgcG91ciBkdSBKU09OUCwgb24gdXRpbGlzZSBsZVxuICAgICAgICAvLyAgICAgICAgICBsZSBwcm90b2NvbCBKU09OUCwgZXQgY2UgZGVybmllciBpbXBsZW1lbnRlIGTDqWrDoCBsZSBjYWxsYmFjayAhXG5cbiAgICAgICAgLy8gc2V0dGluZ3MgcGFyIGRlZmF1dFxuICAgICAgICB2YXIgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHtcbiAgICAgICAgICAgIG1ldGhvZCA6IFwiR0VUXCIsXG4gICAgICAgICAgICAvLyBwcm90b2NvbCA6IFwiSlNPTlBcIixcbiAgICAgICAgICAgIHByb3RvY29sIDogXCJYSFJcIixcbiAgICAgICAgICAgIHRpbWVPdXQgOiAwLFxuICAgICAgICAgICAgZm9ybWF0IDogbnVsbCxcbiAgICAgICAgICAgIHdyYXAgOiB0cnVlLFxuICAgICAgICAgICAgbm9jYWNoZSA6IHRydWUsXG4gICAgICAgICAgICBvdXRwdXQgOiBcImpzb25cIixcbiAgICAgICAgICAgIGNhbGxiYWNrIDogbnVsbCxcbiAgICAgICAgICAgIGNhbGxiYWNrU3VmZml4IDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIG9uIGRldGVybWluZSBsJ2Vudmlyb25uZW1lbnQgZCdleGVjdXRpb24gOiBicm93c2VyIG91IG5vbiA/XG4gICAgICAgIC8vIGV0IG9uIHN0b3BwZSBwb3VyIG5vZGVKUy4uLiBzdXIgdW4gcHJvdG9jb2xlIEpTT05QICFcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgJiYgb3B0aW9ucy5wcm90b2NvbCA9PT0gXCJKU09OUFwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZhbHVlIChzKSBmb3IgcGFyYW1ldGVyIChzKSAncHJvdG9jb2w9SlNPTlAgKGluc3RlYWQgdXNlIFhIUiknIG5vdCBzdXBwb3J0ZWQgdG8gTm9kZUpTXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucHJvdG9jb2wgPT09IFwiWEhSXCIgfHwgb3B0aW9ucy5mb3JtYXQgPT09IFwianNvblwiKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy53cmFwID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcm90b2NvbCA9PT0gXCJKU09OUFwiICYmIG9wdGlvbnMuZm9ybWF0ID09PSBcInhtbFwiKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy53cmFwID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldHRpbmdzLmNhbGxiYWNrID0gbnVsbDsgLy8gRklYTUUgbm9uIGfDqXLDqSAhP1xuICAgICAgICBzZXR0aW5ncy5vdXRwdXQgPSBzZXR0aW5ncy53cmFwID8gXCJqc29uXCIgOiBudWxsO1xuXG4gICAgICAgIC8vIG9uIGVuY2Fwc3VsZSBsZXMgcmVwb25zZXMgZGFucyB1biBvYmpldCBKU09OXG4gICAgICAgIGlmIChzZXR0aW5ncy53cmFwKSB7XG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0ID0gc2V0dGluZ3Mub3V0cHV0O1xuICAgICAgICAgICAgcGFyYW1zLmNhbGxiYWNrID0gc2V0dGluZ3MuY2FsbGJhY2s7XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zLmNhbGxiYWNrOyAvLyBGSVhNRSBub24gZ8OpcsOpICE/XG4gICAgICAgICAgICBzZXR0aW5ncy51cmwgPSBIZWxwZXIubm9ybWFseXplVXJsKG9wdGlvbnMudXJsLCBwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hvaXggZGUgbFwiaW1wbGVtZW50YXRpb24gOlxuICAgICAgICAvLyBYSFIgb3UgSlNPTlBcbiAgICAgICAgc3dpdGNoIChzZXR0aW5ncy5wcm90b2NvbCkge1xuICAgICAgICAgICAgY2FzZSBcIlhIUlwiOlxuICAgICAgICAgICAgICAgIC8vIG9uIG5vcm1hbGlzZSBsJ3VybCAoZ2VzdGlvbiBkdSBjYWNoZSlcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tZXRob2QgPT09IFwiR0VUXCIgJiYgb3B0aW9ucy5ub2NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnVybCA9IEhlbHBlci5ub3JtYWx5emVVcmwoc2V0dGluZ3MudXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0IDogbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFwcGVsIGR1IHNlcnZpY2UgZW4gWEhSXG4gICAgICAgICAgICAgICAgWEhSLmNhbGwoc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkpTT05QXCI6XG5cbiAgICAgICAgICAgICAgICAvLyBvbiBub3JtYWxpc2UgbCd1cmwgc2kgbGVzIHBhcmFtcy4gc29udCByZW5zZWlnbsOpcyBkYW5zIGxhIHN0cmluZ3xvYmplY3QgXCJkYXRhXCJcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy51cmwgPSBIZWxwZXIubm9ybWFseXplVXJsKHNldHRpbmdzLnVybCwgc2V0dGluZ3MuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYXBwZWwgZHUgc2VydmljZSBlbiBKU09OUFxuICAgICAgICAgICAgICAgIEpTT05QLmNhbGwoc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm90b2NvbCBub3Qgc3VwcG9ydGVkIChYSFJ8SlNPTlApICFcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb3RvY29sO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Protocols/Protocol.js\n"); + +/***/ }), + +/***/ "./src/Protocols/XHR.js": +/*!******************************!*\ + !*** ./src/Protocols/XHR.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/Helper */ \"./src/Utils/Helper.js\");\n/* harmony import */ var es6_promise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! es6-promise */ \"./node_modules/es6-promise/dist/es6-promise.js\");\n/* harmony import */ var es6_promise__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(es6_promise__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/* global Promise, require, XDomainRequest */\n\n\n\n\n// import __request from \"request\";\n// import __xmldom from \"xmldom\";\n\n/**\n * Ajax Request (use of Promises)\n *\n * @module XHR\n * @alias Gp.Protocols.XHR\n * @see dependance 'es6-promise'\n */\n\n// cf. https://xhr.spec.whatwg.org/\n// cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n\nvar XHR = {\n /**\n * Interface unique d'envoi d'une requête.\n *\n * @method call\n * @static\n * @param {Object} settings - options generales\n * @param {String} settings.url - url du service\n * @param {String} settings.method - GET, POST, PUT, DELETE\n * @param {String} settings.format - format de la reponse du service : json, xml ou null (brute)\n * @param {String} settings.data - content (post) ou param (get)\n * @param {String} settings.proxy - proxy url\n * @param {Object|String} settings.headers - (post) ex. referer\n * @param {Object|String} settings.content - (post) ex. 'application/json'\n * @param {String} settings.timeOut - timeout = 0 par defaut\n * @param {String} settings.scope - this\n * @param {Function} settings.onResponse - callback\n * @param {Function} settings.onFailure - callback\n */\n call: function call(settings) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"XHR\");\n logger.trace(\"[XHR::call()]\");\n\n // FIXME\n // To polyfill the global environment\n es6_promise__WEBPACK_IMPORTED_MODULE_2___default.a.polyfill();\n\n // test sur les settings obligatoires\n if (!settings.url) {\n throw new Error(\"missing parameter : url is not defined !\");\n }\n if (!settings.method) {\n throw new Error(\"missing parameter : method is not defined !\");\n }\n if (!settings.format) {\n settings.format = \"text\"; // reponse brute !\n }\n var options = {};\n options.url = settings.url;\n options.data = settings.data ? settings.data : null;\n options.method = settings.method;\n options.timeOut = settings.timeOut || 0;\n options.scope = settings.scope || this;\n options.proxy = settings.proxy || null;\n options.content = settings.content || null;\n options.headers = settings.headers || {\n referer: \"http://localhost\"\n };\n\n // test sur les valeurs de 'settings.method'\n switch (settings.method) {\n case \"DELETE\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"POST\":\n // on force sur ces params spécifiques au mode POST\n options.content = settings.content ? settings.content : \"application/x-www-form-urlencoded\"; // FIXME en attente des services : bascule en \"application/xml\" ou \"application/json\"\n options.headers = settings.headers ? settings.headers : {\n referer: \"http://localhost\"\n }; // FIXME parametrable...\n break;\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(\"HTTP method not yet supported !\");\n default:\n throw new Error(\"HTTP method unknown !\");\n }\n\n // test sur les valeurs de 'settings.format'\n switch (settings.format) {\n case \"text\":\n this.__call(options).then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })[\"catch\"](function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"json\":\n this.__callJSON(options).then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })[\"catch\"](function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"xml\":\n this.__callXML(options).then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })[\"catch\"](function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n default:\n throw new Error(\"This output Format is not yet supported !\");\n }\n },\n /**\n * Requete\n *\n * @method __call\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __call: function __call(options) {\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"XHR\");\n logger.trace(\"[XHR::__call()]\");\n var promise = new Promise(function (resolve, reject) {\n // traitement du corps de la requête\n var corps = options.method === \"POST\" || options.method === \"PUT\" ? 1 : 0;\n\n // seulement si options.data n'est pas vide (peut être un objet ou une chaine de caractères)\n if (options.data && (_typeof(options.data) === \"object\" && Object.keys(options.data).length || typeof options.data === \"string\" && options.data.length) && !corps) {\n options.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].normalyzeUrl(options.url, options.data);\n }\n logger.trace(\"URL = \", options.url);\n var hXHR = null;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var nodefetch = __webpack_require__(/*! node-fetch */ \"node-fetch\");\n var opts = {\n headers: {\n Referer: \"https://localhost\"\n }\n };\n if (options.data && typeof options.data === \"string\" && corps) {\n opts = {\n method: options.method,\n body: options.data,\n headers: {\n \"Content-Type\": options.content,\n Referer: \"https://localhost\"\n }\n };\n }\n return nodefetch(options.url, opts).then(function (response) {\n if (response.ok) {\n // res.status >= 200 && res.status < 300\n resolve(response.text());\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + response.statusText + \"' | url : '\" + response.url + \"')\";\n var status = response.status;\n reject({\n message: message,\n status: status\n });\n }\n })[\"catch\"](function (e) {\n reject({\n message: e,\n status: -1\n });\n });\n } else {\n if (window.XMLHttpRequest) {\n logger.trace(\"XMLHttpRequest\");\n hXHR = new XMLHttpRequest();\n hXHR.open(options.method, options.url, true); // async\n hXHR.overrideMimeType = options.content;\n\n // gestion du timeout\n var onTimeOutTrigger = null;\n if (options.timeOut > 0) {\n // FIXME le timeout interne ne me permet pas de declencher le bon message...\n // hXHR.timeout = options.timeOut;\n logger.trace(\"XHR - TimeOut actif !\");\n /**\n * Description\n *\n * @method onTimeOutTrigger\n * @private\n */\n onTimeOutTrigger = window.setTimeout(function () {\n var message = \"TimeOut Occured on Http Request with XMLHttpRequest !\";\n reject({\n message: message,\n status: -1\n });\n }, options.timeOut);\n }\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n logger.trace(\"data = \", options.data);\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * On Error\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method onerror\n * @private\n */\n hXHR.onerror = function (e) {\n console.log(e);\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Timeout\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function (e) {\n console.log(e);\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method onreadystatechange\n * @private\n */\n hXHR.onreadystatechange = function (e) {\n if (hXHR.readyState === 4) {\n // DONE\n if (hXHR.status === 200) {\n window.clearTimeout(onTimeOutTrigger);\n resolve(hXHR.response);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"' | response : '\" + e.target.response + \"')\";\n var status = e.target.status;\n reject({\n message: message,\n status: status\n });\n }\n }\n };\n\n // gestion du content data\n var data4xhr = options.data && corps ? options.data : null;\n hXHR.send(data4xhr);\n } else if (window.XDomainRequest) {\n // worked in Internet Explorer 8–10 only !\n logger.trace(\"XDomainRequest\");\n hXHR = new XDomainRequest();\n hXHR.open(options.method, options.url);\n hXHR.overrideMimeType = options.content;\n if (options.timeOut > 0) {\n hXHR.timeout = options.timeout;\n logger.trace(\"XHR - TimeOut actif !\");\n }\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * Description\n *\n * @method onerror\n * @private\n */\n hXHR.onerror = function () {\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function () {\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Load\n *\n * @method onload\n * @private\n */\n hXHR.onload = function (e) {\n if (hXHR.status === 200) {\n resolve(hXHR.responseText);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"')\";\n var status = e.target.status;\n reject({\n message: message,\n status: status\n });\n }\n };\n var data4xdr = options.data && corps ? options.data : null;\n hXHR.send(data4xdr);\n } else {\n throw new Error(\"CORS not supported\");\n }\n }\n });\n return promise;\n },\n /**\n * Requete avec parser JSON\n *\n * @method __callJSON\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callJSON: function __callJSON(options) {\n return this.__call(options).then(JSON.parse)[\"catch\"](function (error) {\n console.log(\"_callJSON failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n },\n /**\n * Requete avec parser XML\n *\n * @method __callXML\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callXML: function __callXML(options) {\n return this.__call(options).then(function (response) {\n var xmlDoc;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var DOMParser = __webpack_require__(/*! @xmldom/xmldom */ \"./node_modules/@xmldom/xmldom/lib/index.js\").DOMParser; // __xmldom.DOMParser\n xmlDoc = new DOMParser().parseFromString(response, \"text/xml\");\n } else {\n if (window.DOMParser) {\n var parser = new window.DOMParser();\n xmlDoc = parser.parseFromString(response, \"text/xml\");\n } else {\n // IE\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(response);\n }\n }\n return xmlDoc;\n })[\"catch\"](function (error) {\n console.log(\"__callXML failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (XHR);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9Qcm90b2NvbHMvWEhSLmpzPzgzNGIiXSwibmFtZXMiOlsiWEhSIiwiY2FsbCIsInNldHRpbmdzIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJFUzZQcm9taXNlIiwicG9seWZpbGwiLCJ1cmwiLCJFcnJvciIsIm1ldGhvZCIsImZvcm1hdCIsIm9wdGlvbnMiLCJkYXRhIiwidGltZU91dCIsInNjb3BlIiwicHJveHkiLCJjb250ZW50IiwiaGVhZGVycyIsInJlZmVyZXIiLCJfX2NhbGwiLCJ0aGVuIiwicmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiZXJyb3IiLCJvbkZhaWx1cmUiLCJfX2NhbGxKU09OIiwiX19jYWxsWE1MIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY29ycHMiLCJfdHlwZW9mIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIkhlbHBlciIsIm5vcm1hbHl6ZVVybCIsImhYSFIiLCJ3aW5kb3ciLCJub2RlZmV0Y2giLCJyZXF1aXJlIiwib3B0cyIsIlJlZmVyZXIiLCJib2R5Iiwib2siLCJ0ZXh0IiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJzdGF0dXMiLCJlIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib3ZlcnJpZGVNaW1lVHlwZSIsIm9uVGltZU91dFRyaWdnZXIiLCJzZXRUaW1lb3V0Iiwic2V0UmVxdWVzdEhlYWRlciIsIm9uZXJyb3IiLCJjb25zb2xlIiwibG9nIiwib250aW1lb3V0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsImNsZWFyVGltZW91dCIsInRhcmdldCIsInJlc3BvbnNlVVJMIiwiZGF0YTR4aHIiLCJzZW5kIiwiWERvbWFpblJlcXVlc3QiLCJ0aW1lb3V0Iiwib25sb2FkIiwicmVzcG9uc2VUZXh0IiwiZGF0YTR4ZHIiLCJKU09OIiwicGFyc2UiLCJ4bWxEb2MiLCJET01QYXJzZXIiLCJwYXJzZUZyb21T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c291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIFByb21pc2UsIHJlcXVpcmUsIFhEb21haW5SZXF1ZXN0ICovXG5cbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IEhlbHBlciBmcm9tIFwiLi4vVXRpbHMvSGVscGVyXCI7XG5pbXBvcnQgRVM2UHJvbWlzZSBmcm9tIFwiZXM2LXByb21pc2VcIjtcbi8vIGltcG9ydCBfX3JlcXVlc3QgZnJvbSBcInJlcXVlc3RcIjtcbi8vIGltcG9ydCBfX3htbGRvbSBmcm9tIFwieG1sZG9tXCI7XG5cbi8qKlxuICogQWpheCBSZXF1ZXN0ICh1c2Ugb2YgUHJvbWlzZXMpXG4gKlxuICogQG1vZHVsZSBYSFJcbiAqIEBhbGlhcyBHcC5Qcm90b2NvbHMuWEhSXG4gKiBAc2VlIGRlcGVuZGFuY2UgJ2VzNi1wcm9taXNlJ1xuICovXG5cbi8vIGNmLiBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvXG4vLyBjZi4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0XG5cbnZhciBYSFIgPSB7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2UgdW5pcXVlIGQnZW52b2kgZCd1bmUgcmVxdcOqdGUuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGNhbGxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIC0gb3B0aW9ucyBnZW5lcmFsZXNcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2V0dGluZ3MudXJsICAgIC0gdXJsIGR1IHNlcnZpY2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2V0dGluZ3MubWV0aG9kIC0gR0VULCBQT1NULCBQVVQsIERFTEVURVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5ncy5mb3JtYXQgLSBmb3JtYXQgZGUgbGEgcmVwb25zZSBkdSBzZXJ2aWNlIDoganNvbiwgeG1sIG91IG51bGwgKGJydXRlKVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5ncy5kYXRhICAgLSBjb250ZW50IChwb3N0KSBvdSBwYXJhbSAoZ2V0KVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5ncy5wcm94eSAgLSBwcm94eSB1cmxcbiAgICAgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHNldHRpbmdzLmhlYWRlcnMgLSAocG9zdCkgZXguIHJlZmVyZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHNldHRpbmdzLmNvbnRlbnQgLSAocG9zdCkgZXguICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5ncy50aW1lT3V0IC0gdGltZW91dCA9IDAgcGFyIGRlZmF1dFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5ncy5zY29wZSAtIHRoaXNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0aW5ncy5vblJlc3BvbnNlIC0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0aW5ncy5vbkZhaWx1cmUgIC0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBjYWxsIDogZnVuY3Rpb24gKHNldHRpbmdzKSB7XG4gICAgICAgIC8vIGxvZ2dlclxuICAgICAgICB2YXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIlhIUlwiKTtcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFwiW1hIUjo6Y2FsbCgpXVwiKTtcblxuICAgICAgICAvLyBGSVhNRVxuICAgICAgICAvLyBUbyBwb2x5ZmlsbCB0aGUgZ2xvYmFsIGVudmlyb25tZW50XG4gICAgICAgIEVTNlByb21pc2UucG9seWZpbGwoKTtcblxuICAgICAgICAvLyB0ZXN0IHN1ciBsZXMgc2V0dGluZ3Mgb2JsaWdhdG9pcmVzXG4gICAgICAgIGlmICghc2V0dGluZ3MudXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHBhcmFtZXRlciA6IHVybCBpcyBub3QgZGVmaW5lZCAhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZXR0aW5ncy5tZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgcGFyYW1ldGVyIDogbWV0aG9kIGlzIG5vdCBkZWZpbmVkICFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNldHRpbmdzLmZvcm1hdCkge1xuICAgICAgICAgICAgc2V0dGluZ3MuZm9ybWF0ID0gXCJ0ZXh0XCI7IC8vIHJlcG9uc2UgYnJ1dGUgIVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBzZXR0aW5ncy51cmw7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IHNldHRpbmdzLmRhdGEgPyBzZXR0aW5ncy5kYXRhIDogbnVsbDtcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBzZXR0aW5ncy5tZXRob2Q7XG4gICAgICAgIG9wdGlvbnMudGltZU91dCA9IHNldHRpbmdzLnRpbWVPdXQgfHwgMDtcbiAgICAgICAgb3B0aW9ucy5zY29wZSA9IHNldHRpbmdzLnNjb3BlIHx8IHRoaXM7XG4gICAgICAgIG9wdGlvbnMucHJveHkgPSBzZXR0aW5ncy5wcm94eSB8fCBudWxsO1xuICAgICAgICBvcHRpb25zLmNvbnRlbnQgPSBzZXR0aW5ncy5jb250ZW50IHx8IG51bGw7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHNldHRpbmdzLmhlYWRlcnMgfHwge1xuICAgICAgICAgICAgcmVmZXJlciA6IFwiaHR0cDovL2xvY2FsaG9zdFwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGVzdCBzdXIgbGVzIHZhbGV1cnMgZGUgJ3NldHRpbmdzLm1ldGhvZCdcbiAgICAgICAgc3dpdGNoIChzZXR0aW5ncy5tZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERUxFVEVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJHRVRcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJQVVRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJQT1NUXCI6XG4gICAgICAgICAgICAgICAgLy8gb24gZm9yY2Ugc3VyIGNlcyBwYXJhbXMgc3DDqWNpZmlxdWVzIGF1IG1vZGUgUE9TVFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGVudCA9IHNldHRpbmdzLmNvbnRlbnQgPyBzZXR0aW5ncy5jb250ZW50IDogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjsgLy8gRklYTUUgZW4gYXR0ZW50ZSBkZXMgc2VydmljZXMgOiBiYXNjdWxlIGVuIFwiYXBwbGljYXRpb24veG1sXCIgb3UgXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBzZXR0aW5ncy5oZWFkZXJzID8gc2V0dGluZ3MuaGVhZGVycyA6IHsgcmVmZXJlciA6IFwiaHR0cDovL2xvY2FsaG9zdFwiIH07IC8vIEZJWE1FIHBhcmFtZXRyYWJsZS4uLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgICAgIGNhc2UgXCJPUFRJT05TXCI6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCBtZXRob2Qgbm90IHlldCBzdXBwb3J0ZWQgIVwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCBtZXRob2QgdW5rbm93biAhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGVzdCBzdXIgbGVzIHZhbGV1cnMgZGUgJ3NldHRpbmdzLmZvcm1hdCdcbiAgICAgICAgc3dpdGNoIChzZXR0aW5ncy5mb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fX2NhbGwob3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Mub25SZXNwb25zZS5jYWxsKHRoaXMsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Mub25GYWlsdXJlLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fX2NhbGxKU09OKG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm9uUmVzcG9uc2UuY2FsbCh0aGlzLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm9uRmFpbHVyZS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwieG1sXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fX2NhbGxYTUwob3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Mub25SZXNwb25zZS5jYWxsKHRoaXMsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Mub25GYWlsdXJlLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBvdXRwdXQgRm9ybWF0IGlzIG5vdCB5ZXQgc3VwcG9ydGVkICFcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVxdWV0ZVxuICAgICAqXG4gICAgICogQG1ldGhvZCBfX2NhbGxcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHByb21pc2VcbiAgICAgKi9cbiAgICBfX2NhbGwgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIlhIUlwiKTtcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFwiW1hIUjo6X19jYWxsKCldXCIpO1xuXG4gICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoXG4gICAgICAgICAgICBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgLy8gdHJhaXRlbWVudCBkdSBjb3JwcyBkZSBsYSByZXF1w6p0ZVxuICAgICAgICAgICAgICAgIHZhciBjb3JwcyA9IChvcHRpb25zLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHwgb3B0aW9ucy5tZXRob2QgPT09IFwiUFVUXCIpID8gMSA6IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXVsZW1lbnQgc2kgb3B0aW9ucy5kYXRhIG4nZXN0IHBhcyB2aWRlIChwZXV0IMOqdHJlIHVuIG9iamV0IG91IHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMpXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiAoKHR5cGVvZiBvcHRpb25zLmRhdGEgPT09IFwib2JqZWN0XCIgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5kYXRhKS5sZW5ndGgpIHx8ICh0eXBlb2Ygb3B0aW9ucy5kYXRhID09PSBcInN0cmluZ1wiICYmIG9wdGlvbnMuZGF0YS5sZW5ndGgpKSAmJiAhY29ycHMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBIZWxwZXIubm9ybWFseXplVXJsKG9wdGlvbnMudXJsLCBvcHRpb25zLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcIlVSTCA9IFwiLCBvcHRpb25zLnVybCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaFhIUiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvLyB0ZXN0IG9uIGVudi4gbm9kZWpzIG9yIGJyb3dzZXJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZWZldGNoID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZXIgOiBcImh0dHBzOi8vbG9jYWxob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kYXRhICYmIHR5cGVvZiBvcHRpb25zLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgY29ycHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIDogb3B0aW9ucy5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA6IG9wdGlvbnMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiIDogb3B0aW9ucy5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVyIDogXCJodHRwczovL2xvY2FsaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlZmV0Y2gob3B0aW9ucy51cmwsIG9wdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHsgLy8gcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnRleHQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIkVycm9ycyBPY2N1cmVkIG9uIEh0dHAgUmVxdWVzdCAoc3RhdHVzIDogJ1wiICsgcmVzcG9uc2Uuc3RhdHVzVGV4dCArIFwiJyB8IHVybCA6ICdcIiArIHJlc3BvbnNlLnVybCArIFwiJylcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIDogc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIDogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcIlhNTEh0dHBSZXF1ZXN0XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBoWEhSID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoWEhSLm9wZW4ob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMudXJsLCB0cnVlKTsgLy8gYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIub3ZlcnJpZGVNaW1lVHlwZSA9IG9wdGlvbnMuY29udGVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2VzdGlvbiBkdSB0aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25UaW1lT3V0VHJpZ2dlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50aW1lT3V0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGxlIHRpbWVvdXQgaW50ZXJuZSBuZSBtZSBwZXJtZXQgcGFzIGRlIGRlY2xlbmNoZXIgbGUgYm9uIG1lc3NhZ2UuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoWEhSLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVPdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKFwiWEhSIC0gVGltZU91dCBhY3RpZiAhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIERlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWV0aG9kIG9uVGltZU91dFRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVGltZU91dFRyaWdnZXIgPSB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlRpbWVPdXQgT2NjdXJlZCBvbiBIdHRwIFJlcXVlc3Qgd2l0aCBYTUxIdHRwUmVxdWVzdCAhXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgb3B0aW9ucy50aW1lT3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcnBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVycywgZGF0YSwgY29udGVudCBvZiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2YuIGh0dHBzOi8vZHZjcy53My5vcmcvaGcveGhyL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sI2RvbS14bWxodHRwcmVxdWVzdC1zZXRyZXF1ZXN0aGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKFwiZGF0YSA9IFwiLCBvcHRpb25zLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtdHlwZVwiLCBvcHRpb25zLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIHJlZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgY29udGVudC1sZW5ndGggamF2YXNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhYSFIuc2V0UmVxdWVzdEhlYWRlciAoXCJDb250ZW50LWxlbmd0aFwiLCBvcHRpb25zLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoWEhSLnNldFJlcXVlc3RIZWFkZXIgKFwiUmVmZXJlclwiLCBvcHRpb25zLmhlYWRlcnMucmVmZXJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogT24gRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEZJWE1FIG5lIHNlIGRlY2xlbmNoZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZSAtIEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWV0aG9kIG9uZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkVycm9ycyBPY2N1cmVkIG9uIEh0dHAgUmVxdWVzdCB3aXRoIFhNTEh0dHBSZXF1ZXN0ICFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBPbiBUaW1lb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBGSVhNRSBuZSBzZSBkZWNsZW5jaGUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGUgLSBFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1ldGhvZCBvbnRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIub250aW1lb3V0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiVGltZU91dCBPY2N1cmVkIG9uIEh0dHAgUmVxdWVzdCB3aXRoIFhNTEh0dHBSZXF1ZXN0ICFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZXRob2Qgb25yZWFkeXN0YXRlY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBoWEhSLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhYSFIucmVhZHlTdGF0ZSA9PT0gNCkgeyAvLyBET05FXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoWEhSLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KG9uVGltZU91dFRyaWdnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShoWEhSLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gXCJFcnJvcnMgT2NjdXJlZCBvbiBIdHRwIFJlcXVlc3QgKHN0YXR1cyA6ICdcIiArIGUudGFyZ2V0LnN0YXR1c1RleHQgKyBcIicgfCB1cmwgOiAnXCIgKyBlLnRhcmdldC5yZXNwb25zZVVSTCArIFwiJyB8IHJlc3BvbnNlIDogJ1wiICsgZS50YXJnZXQucmVzcG9uc2UgKyBcIicpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gZS50YXJnZXQuc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgOiBzdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2VzdGlvbiBkdSBjb250ZW50IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhNHhociA9IChvcHRpb25zLmRhdGEgJiYgY29ycHMpID8gb3B0aW9ucy5kYXRhIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaFhIUi5zZW5kKGRhdGE0eGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuWERvbWFpblJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdvcmtlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciA44oCTMTAgb25seSAhXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJYRG9tYWluUmVxdWVzdFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaFhIUiA9IG5ldyBYRG9tYWluUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaFhIUi5vcGVuKG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnVybCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIub3ZlcnJpZGVNaW1lVHlwZSA9IG9wdGlvbnMuY29udGVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGltZU91dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoWEhSLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKFwiWEhSIC0gVGltZU91dCBhY3RpZiAhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ycHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXJzLCBkYXRhLCBjb250ZW50IG9mIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjZi4gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy94aHIvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjZG9tLXhtbGh0dHByZXF1ZXN0LXNldHJlcXVlc3RoZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoWEhSLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LXR5cGVcIiwgb3B0aW9ucy5jb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSByZWZ1c2VkIHRvIHNldCB1bnNhZmUgaGVhZGVyIGNvbnRlbnQtbGVuZ3RoIGphdmFzY3JpcHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoWEhSLnNldFJlcXVlc3RIZWFkZXIgKFwiQ29udGVudC1sZW5ndGhcIiwgb3B0aW9ucy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaFhIUi5zZXRSZXF1ZXN0SGVhZGVyIChcIlJlZmVyZXJcIiwgb3B0aW9ucy5oZWFkZXJzLnJlZmVyZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1ldGhvZCBvbmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBoWEhSLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkVycm9ycyBPY2N1cmVkIG9uIEh0dHAgUmVxdWVzdCB3aXRoIFhNTEh0dHBSZXF1ZXN0ICFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZXRob2Qgb250aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBoWEhSLm9udGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiVGltZU91dCBPY2N1cmVkIG9uIEh0dHAgUmVxdWVzdCB3aXRoIFhNTEh0dHBSZXF1ZXN0ICFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBPbiBMb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1ldGhvZCBvbmxvYWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaFhIUi5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGhYSFIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFwiRXJyb3JzIE9jY3VyZWQgb24gSHR0cCBSZXF1ZXN0IChzdGF0dXMgOiAnXCIgKyBlLnRhcmdldC5zdGF0dXNUZXh0ICsgXCInIHwgdXJsIDogJ1wiICsgZS50YXJnZXQucmVzcG9uc2VVUkwgKyBcIicpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBlLnRhcmdldC5zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IHN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YTR4ZHIgPSAob3B0aW9ucy5kYXRhICYmIGNvcnBzKSA/IG9wdGlvbnMuZGF0YSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhYSFIuc2VuZChkYXRhNHhkcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDT1JTIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcXVldGUgYXZlYyBwYXJzZXIgSlNPTlxuICAgICAqXG4gICAgICogQG1ldGhvZCBfX2NhbGxKU09OXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBwcm9taXNlXG4gICAgICovXG4gICAgX19jYWxsSlNPTiA6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY2FsbChvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oSlNPTi5wYXJzZSlcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIl9jYWxsSlNPTiBmYWlsZWQgb24gOiBcIiwgb3B0aW9ucy51cmwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBwYXMgZCdleGNlcHRpb24sIGxhaXNzb25zIGxlIGZpbCBzZSBkZXJvdWxlci4uLlxuICAgICAgICAgICAgICAgIC8vIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcXVldGUgYXZlYyBwYXJzZXIgWE1MXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIF9fY2FsbFhNTFxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge09iamVjdH0gcHJvbWlzZVxuICAgICAqL1xuICAgIF9fY2FsbFhNTCA6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY2FsbChvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHhtbERvYztcblxuICAgICAgICAgICAgICAgIC8vIHRlc3Qgb24gZW52LiBub2RlanMgb3IgYnJvd3NlclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBET01QYXJzZXIgPSByZXF1aXJlKFwiQHhtbGRvbS94bWxkb21cIikuRE9NUGFyc2VyOyAvLyBfX3htbGRvbS5ET01QYXJzZXJcbiAgICAgICAgICAgICAgICAgICAgeG1sRG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXNwb25zZSwgXCJ0ZXh0L3htbFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHJlc3BvbnNlLCBcInRleHQveG1sXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBJRVxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sRG9jID0gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTERPTVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbERvYy5hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeG1sRG9jLmxvYWRYTUwocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhtbERvYztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJfX2NhbGxYTUwgZmFpbGVkIG9uIDogXCIsIG9wdGlvbnMudXJsLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgLy8gRklYTUUgcGFzIGQnZXhjZXB0aW9uLCBsYWlzc29ucyBsZSBmaWwgc2UgZGVyb3VsZXIuLi5cbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxufTtcblxuZXhwb3J0IGRlZmF1bHQgWEhSO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Protocols/XHR.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Alti.js": +/*!***********************************!*\ + !*** ./src/Services/Alti/Alti.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Request_AltiRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Request/AltiRequestFactory */ \"./src/Services/Alti/Request/AltiRequestFactory.js\");\n/* harmony import */ var _Response_AltiResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Response/AltiResponseFactory */ \"./src/Services/Alti/Response/AltiResponseFactory.js\");\n\n\n\n\n\n\n\n\n/**\n * @classdesc\n *\n * Appel du service d'altimétrie du Géoportail\n *\n * @todo gestion du parma. output et callback\n * @todo outputFormat (REST) et format (WPS)\n * @todo La reponse JSON peut encapsuler un XML !\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Alti\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Array.} options.positions - Tableau ({lon:float,lat:float}) contenant les coordonnées des points (CRS:84)\n * dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil).\n * Chaque élément du tableau est un objet JavaScript avec deux attributs : lon et lat, qui sont des flottants.\n * Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine).\n * Maximum 50 éléments.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service alti : 'xml' ou 'json'.\n * Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST,\n * ou la valeur du paramètre 'format' dans le cas de la norme WPS.\n * Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST,\n * pour connaître le format dans lequel sera fournie la réponse (pour son traitement).\n * Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'.\n *\n * @param {Number} [options.sampling] - Nombre de points à utiliser pour déterminer le tracé d'un profil altimétrique, compris entre 2 et 5000.\n * A spécifier lorsqu'on souhaite accéder à cette fonctionnalité.\n * Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique\n * le long duquel le profil doit être calculé.\n * Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis,\n * c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis).\n * Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points).\n *\n * @param {String} [options.api] - Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS).\n * Par défaut, on utilise l'API REST.\n *\n * @param {Boolean} [options.zonly] - Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'.\n * Vaut 'false' par défaut.\n *\n * @param {String} [options.resource] - Resource utilisée pour réaliser le calcul.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true,\n * resource : \"resource-par-defaut\"\n * };\n *\n */\nfunction Alti(options) {\n if (!(this instanceof Alti)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"Alti\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Alti\";\n\n // appel du constructeur par heritage\n _CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].apply(this, arguments);\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"Gp.Services.Alti\");\n this.logger.trace(\"[Constructeur Alti (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n if (!options.positions) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"positions\"));\n }\n if (options.positions.length === 0) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"positions\"));\n }\n\n // ajout des options spécifiques au service\n this.options.positions = options.positions;\n\n // format de réponse du service : \"json\" ou \"xml\" (valeur par défaut), en minuscule !\n this.options.outputFormat = typeof options.outputFormat === \"string\" ? options.outputFormat.toLowerCase() : \"xml\";\n\n // ressource utilisée pour le calcul altimétrique\n this.options.resource = options.resource || \"ign_rge_alti_wld\";\n\n // sampling\n this.options.sampling = options.sampling || null;\n\n // type d'api utilisé pour requeter le service, en majuscule !\n this.options.api = typeof options.api === \"string\" ? options.api.toUpperCase() : \"REST\";\n\n // l'api ne peut être interrogée qu'en GET.\n if (this.options.api === \"REST\") {\n this.options.httpMethod = \"GET\";\n }\n\n // param. zonly\n this.options.zonly = options.zonly || false;\n\n // param. measures\n this.options.measures = options.measures || false;\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n // en fonction du type d'api, REST ou WPS, du format de reponse demandé (outputFormat)\n // ainsi que sur le type de service (profil ou elevation)\n if (!this.options.serverUrl) {\n var lstUrlByDefault = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Alti.newUrl();\n var urlFound = null;\n switch (this.options.api) {\n case \"WPS\":\n urlFound = lstUrlByDefault.wps;\n break;\n case \"REST\":\n var key = (options.sampling ? \"profil\" : \"elevation\") + \"-\" + this.options.outputFormat;\n urlFound = lstUrlByDefault[key];\n break;\n default:\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_UNKNOWN\", \"api\"));\n }\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Server URL by default : \" + this.options.serverUrl);\n }\n\n // gestion du type de service\n // si l'extension de l'url est .json ou .xml, on surcharge le format de sortie (outputFormat)\n var idx = this.options.serverUrl.lastIndexOf(\".\");\n if (idx !== -1) {\n var extension = this.options.serverUrl.substring(idx + 1);\n if (extension && extension.length < 5) {\n // FIXME extension de moins de 4 car. ...\n this.logger.trace(\"Server Extension URL : \" + extension);\n switch (extension.toLowerCase()) {\n case \"json\":\n case \"xml\":\n this.options.outputFormat = extension.toLowerCase();\n break;\n default:\n throw new Error(\"type of service : unknown or unsupported (json or xml) !\");\n }\n }\n }\n}\n\n/**\n * @lends module:Alti#\n */\nAlti.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nAlti.prototype.constructor = Alti;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.buildRequest = function (error, success) {\n // utilisation en mode callback\n var options = {\n httpMethod: this.options.httpMethod,\n // callback\n onSuccess: function onSuccess(result) {\n // sauvegarde de la requete !\n this.request = result;\n success.call(this, this.request);\n },\n onError: error,\n scope: this,\n // spécifique au service :\n resource: this.options.resource,\n positions: this.options.positions,\n outputFormat: this.options.outputFormat,\n sampling: this.options.sampling,\n api: this.options.api,\n zonly: this.options.zonly,\n measures: this.options.measures\n };\n _Request_AltiRequestFactory__WEBPACK_IMPORTED_MODULE_5__[\"default\"].build(options);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service qui renvoie soit\n // - une 'string' qui contient du XML ou JSON natif en mode XHR\n // - un objet JSON qui est natif ou encapsulé\n\n if (this.response) {\n var options = {\n response: this.response,\n outputFormat: this.options.outputFormat,\n // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse: this.options.rawResponse,\n onError: error,\n onSuccess: success,\n scope: this\n };\n _Response_AltiResponseFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"].build(options);\n } else {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Alti);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL0FsdGkuanM/Y2ZiNiJdLCJuYW1lcyI6WyJBbHRpIiwib3B0aW9ucyIsIlR5cGVFcnJvciIsIl8iLCJnZXRNZXNzYWdlIiwiQ0xBU1NOQU1FIiwiQ29tbW9uU2VydmljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJwb3NpdGlvbnMiLCJFcnJvciIsImxlbmd0aCIsIm91dHB1dEZvcm1hdCIsInRvTG93ZXJDYXNlIiwicmVzb3VyY2UiLCJzYW1wbGluZyIsImFwaSIsInRvVXBwZXJDYXNlIiwiaHR0cE1ldGhvZCIsInpvbmx5IiwibWVhc3VyZXMiLCJzZXJ2ZXJVcmwiLCJsc3RVcmxCeURlZmF1bHQiLCJEZWZhdWx0VXJsU2VydmljZSIsIm5ld1VybCIsInVybEZvdW5kIiwid3BzIiwia2V5IiwiaWR4IiwibGFzdEluZGV4T2YiLCJleHRlbnNpb24iLCJzdWJzdHJpbmciLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImJ1aWxkUmVxdWVzdCIsImVycm9yIiwic3VjY2VzcyIsIm9uU3VjY2VzcyIsInJlc3VsdCIsInJlcXVlc3QiLCJjYWxsIiwib25FcnJvciIsInNjb3BlIiwiQWx0aVJlcXVlc3RGYWN0b3J5IiwiYnVpbGQiLCJhbmFseXplUmVzcG9uc2UiLCJyZXNwb25zZSIsInJhd1Jlc3BvbnNlIiwiQWx0aVJlc3BvbnNlRmFjdG9yeSIsIkVycm9yU2VydmljZSJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFpRDtBQUNIO0FBQ1c7QUFDWjtBQUNRO0FBQ1M7QUFDRzs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNrQixRQUFRO0lBQ2hDQyxHQUFHLEVBQUcsSUFBSSxDQUFDbkIsT0FBTyxDQUFDbUIsR0FBRztJQUN0QkcsS0FBSyxFQUFHLElBQUksQ0FBQ3RCLE9BQU8sQ0FBQ3NCLEtBQUs7SUFDMUJDLFFBQVEsRUFBRyxJQUFJLENBQUN2QixPQUFPLENBQUN1QjtFQUM1QixDQUFDO0VBRUR5QixtRUFBa0IsQ0FBQ0MsS0FBSyxDQUFDakQsT0FBTyxDQUFDO0FBQ3JDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FELElBQUksQ0FBQ29DLFNBQVMsQ0FBQ2UsZUFBZSxHQUFHLFVBQVVWLEtBQUssRUFBRUMsT0FBTyxFQUFFO0VBQ3ZEO0VBQ0E7RUFDQTtFQUNBOztFQUVBLElBQUksSUFBSSxDQUFDVSxRQUFRLEVBQUU7SUFDZixJQUFJbkQsT0FBTyxHQUFHO01BQ1ZtRCxRQUFRLEVBQUcsSUFBSSxDQUFDQSxRQUFRO01BQ3hCcEMsWUFBWSxFQUFHLElBQUksQ0FBQ2YsT0FBTyxDQUFDZSxZQUFZO01BQUU7TUFDMUNxQyxXQUFXLEVBQUcsSUFBSSxDQUFDcEQsT0FBTyxDQUFDb0QsV0FBVztNQUN0Q04sT0FBTyxFQUFHTixLQUFLO01BQ2ZFLFNBQVMsRUFBR0QsT0FBTztNQUNuQk0sS0FBSyxFQUFHO0lBQ1osQ0FBQztJQUVETSxxRUFBbUIsQ0FBQ0osS0FBSyxDQUFDakQsT0FBTyxDQUFDO0VBQ3RDLENBQUMsTUFBTTtJQUNId0MsS0FBSyxDQUFDSyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUlTLGdFQUFZLENBQUNwRCxnRUFBQyxDQUFDQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0VBQzlFO0FBQ0osQ0FBQztBQUVjSixtRUFBSSIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9BbHRpL0FsdGkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uLy4uL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzXCI7XG5pbXBvcnQgRXJyb3JTZXJ2aWNlIGZyb20gXCIuLi8uLi9FeGNlcHRpb25zL0Vycm9yU2VydmljZVwiO1xuaW1wb3J0IENvbW1vblNlcnZpY2UgZnJvbSBcIi4uL0NvbW1vblNlcnZpY2VcIjtcbmltcG9ydCBEZWZhdWx0VXJsU2VydmljZSBmcm9tIFwiLi4vRGVmYXVsdFVybFNlcnZpY2VcIjtcbmltcG9ydCBBbHRpUmVxdWVzdEZhY3RvcnkgZnJvbSBcIi4vUmVxdWVzdC9BbHRpUmVxdWVzdEZhY3RvcnlcIjtcbmltcG9ydCBBbHRpUmVzcG9uc2VGYWN0b3J5IGZyb20gXCIuL1Jlc3BvbnNlL0FsdGlSZXNwb25zZUZhY3RvcnlcIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogQXBwZWwgZHUgc2VydmljZSBkJ2FsdGltw6l0cmllIGR1IEfDqW9wb3J0YWlsXG4gKlxuICogQHRvZG8gZ2VzdGlvbiBkdSBwYXJtYS4gb3V0cHV0IGV0IGNhbGxiYWNrXG4gKiBAdG9kbyBvdXRwdXRGb3JtYXQgKFJFU1QpIGV0IGZvcm1hdCAoV1BTKVxuICogQHRvZG8gTGEgcmVwb25zZSBKU09OIHBldXQgZW5jYXBzdWxlciB1biBYTUwgIVxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge0dwLlNlcnZpY2VzLkNvbW1vblNlcnZpY2V9XG4gKiBAYWxpYXMgR3AuU2VydmljZXMuQWx0aVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHNww6ljaWZpcXVlcyBhdSBzZXJ2aWNlICgrIGxlcyBvcHRpb25zIGhlcml0w6llcylcbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBvcHRpb25zLnBvc2l0aW9ucyAtIFRhYmxlYXUgKHtsb246ZmxvYXQsbGF0OmZsb2F0fSkgY29udGVuYW50IGxlcyBjb29yZG9ubsOpZXMgZGVzIHBvaW50cyAoQ1JTOjg0KVxuICogICAgICBkb250IG9uIHZldXQgY29ubmHDrnRyZSBsZXMgYWx0aXR1ZGVzIChvdSDDoCBwYXJ0aXIgZGVzcXVlbGxlcyBvbiB2YSBjYWxjdWxlciBsZSBwcm9maWwpLlxuICogICAgICBDaGFxdWUgw6lsw6ltZW50IGR1IHRhYmxlYXUgZXN0IHVuIG9iamV0IEphdmFTY3JpcHQgYXZlYyBkZXV4IGF0dHJpYnV0cyA6IGxvbiBldCBsYXQsIHF1aSBzb250IGRlcyBmbG90dGFudHMuXG4gKiAgICAgIE1pbmltdW0gMiDDqWzDqW1lbnRzIHNpIG9uIHNvdWhhaXRlIGNhbGN1bGVyIHVuIHByb2ZpbCBhbHRpbcOpdHJpcXVlIChFbGV2YXRpb25MaW5lKS5cbiAqICAgICAgTWF4aW11bSA1MCDDqWzDqW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLm91dHB1dEZvcm1hdCAtIExlIGZvcm1hdCBkZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlIGFsdGkgOiAneG1sJyBvdSAnanNvbicuXG4gKiAgICAgIENlIHBhcmFtw6h0cmUgZMOpdGVybWluZXJhIGwnZXh0ZW5zaW9uICcueG1sJyBvdSAnLmpzb24nIGR1IHNlcnZpY2UgZGFucyBsZSBjYXMgZGUgbCdBUEkgUkVTVCxcbiAqICAgICAgb3UgbGEgdmFsZXVyIGR1IHBhcmFtw6h0cmUgJ2Zvcm1hdCcgZGFucyBsZSBjYXMgZGUgbGEgbm9ybWUgV1BTLlxuICogICAgICBOw6ljZXNzYWlyZSBzaSBzZXJ2ZXJVcmwgZXN0IHJlbnNlaWduw6ksIGV0IHF1J29uIHNvdWhhaXRlIHBhc3NlciBwYXIgbCdBUEkgUkVTVCxcbiAqICAgICAgcG91ciBjb25uYcOudHJlIGxlIGZvcm1hdCBkYW5zIGxlcXVlbCBzZXJhIGZvdXJuaWUgbGEgcsOpcG9uc2UgKHBvdXIgc29uIHRyYWl0ZW1lbnQpLlxuICogICAgICBOb24gbsOpY2Vzc2FpcmUgcG91ciBsYSBub3JtZSBXUFMuIFBhciBkw6lmYXV0LCBjZSBwYXJhbcOodHJlIHZhdXQgJ2pzb24nLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5zYW1wbGluZ10gLSBOb21icmUgZGUgcG9pbnRzIMOgIHV0aWxpc2VyIHBvdXIgZMOpdGVybWluZXIgbGUgdHJhY8OpIGQndW4gcHJvZmlsIGFsdGltw6l0cmlxdWUsIGNvbXByaXMgZW50cmUgMiBldCA1MDAwLlxuICogICAgICBBIHNww6ljaWZpZXIgbG9yc3F1J29uIHNvdWhhaXRlIGFjY8OpZGVyIMOgIGNldHRlIGZvbmN0aW9ubmFsaXTDqS5cbiAqICAgICAgRGFucyBjZSBjYXMsIGxlcyBwb2ludHMgZm91cm5pcyBlbiBlbnRyw6llIChhdSBtaW5pbXVtIGRlIGRldXgpIHNlcnZlbnQgw6AgZMOpdGVybWluZXIgbCdheGUgcGxhbmltw6l0cmlxdWVcbiAqICAgICAgbGUgbG9uZyBkdXF1ZWwgbGUgcHJvZmlsIGRvaXQgw6p0cmUgY2FsY3Vsw6kuXG4gKiAgICAgIFNpIGxlIHBhcmFtw6h0cmUgc2FtcGxpbmcgbidlc3QgcGFzIHNww6ljaWZpw6kgb3UgbW9pbnMgZGUgZGV1eCBwb2ludHMgc29udCBmb3VybmlzLFxuICogICAgICBjJ2VzdCBsZSBzZXJ2aWNlIEVsZXZhdGlvbiBxdWkgc2VyYSBpbnRlcnJvZ8OpIChhbHRpdHVkZXMgc2ltcGxlcyBjYWxjdWzDqWVzIHBvdXIgbGVzIHBvaW50cyBmb3VybmlzKS5cbiAqICAgICAgVW5lIHZhbGV1ciBkZSBzYW1wbGluZyBzdHJpY3RlbWVudCBpbmbDqXJpZXVyZSDDoCAyIGTDqWNsZW5jaGVyYSB1biDDqWNoYW50aWxsb25uYWdlIGF2ZWMgbGEgdmFsZXVyIHBhciBkw6lmYXV0IGR1IHNlcnZpY2UgKDMgcG9pbnRzKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuYXBpXSAtIE1hbmnDqHJlIGQnYWNjw6lkZXIgYXUgc2VydmljZSA6ICdSRVNUJyAodmlhIGwnQVBJIFJFU1QpIG91ICdXUFMnICh2aWEgbGEgbm9ybWUgV1BTKS5cbiAqICAgICAgUGFyIGTDqWZhdXQsIG9uIHV0aWxpc2UgbCdBUEkgUkVTVC5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnpvbmx5XSAtIFBlcm1ldCBkZSBuZSByw6ljdXDDqXJlciBxdWUgbGVzIGFsdGl0dWRlcyBlbiBzb3J0aWUgcydpbCB2YXV0ICd0cnVlJy5cbiAqICAgICAgVmF1dCAnZmFsc2UnIHBhciBkw6lmYXV0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yZXNvdXJjZV0gLSBSZXNvdXJjZSB1dGlsaXPDqWUgcG91ciByw6lhbGlzZXIgbGUgY2FsY3VsLlxuICpcbiAqIEBleGFtcGxlXG4gKiAgIHZhciBvcHRpb25zID0ge1xuICogICAgICBhcGlLZXkgOiBudWxsLFxuICogICAgICBzZXJ2ZXJVcmwgOiAnaHR0cDovL2xvY2FsaG9zdC9zZXJ2aWNlLycsXG4gKiAgICAgIHByb3RvY29sIDogJ0pTT05QJywgLy8gSlNPTlB8WEhSXG4gKiAgICAgIHByb3h5VVJMIDogbnVsbCxcbiAqICAgICAgaHR0cE1ldGhvZCA6ICdHRVQnLCAvLyBHRVR8UE9TVFxuICogICAgICB0aW1lT3V0IDogMTAwMDAsIC8vIG1zXG4gKiAgICAgIHJhd1Jlc3BvbnNlIDogZmFsc2UsIC8vIHRydWV8ZmFsc2VcbiAqICAgICAgc2NvcGUgOiBudWxsLCAvLyB0aGlzXG4gKiAgICAgIG9uU3VjY2VzcyA6IGZ1bmN0aW9uIChyZXNwb25zZSkge30sXG4gKiAgICAgIG9uRmFpbHVyZSA6IGZ1bmN0aW9uIChlcnJvcikge30sXG4gKiAgICAgIC8vIHNww6ljaWZpcXVlIGF1IHNlcnZpY2VcbiAqICAgICAgcG9zaXRpb25zIDogW3tsb246LCBsYXQ6fSwge2xvbjosIGxhdDp9XSxcbiAqICAgICAgb3V0cHV0Rm9ybWF0IDogJ2pzb24nIC8vIGpzb258eG1sXG4gKiAgICAgIHNhbXBsaW5nIDogMyxcbiAqICAgICAgYXBpIDogJ1JFU1QnLCAvLyBSRVNUfFdQU1xuICogICAgICB6b25seSA6IGZhbHNlIC8vIGZhbHNlfHRydWUsXG4gKiAgICAgIHJlc291cmNlIDogXCJyZXNvdXJjZS1wYXItZGVmYXV0XCJcbiAqICAgfTtcbiAqXG4gKi9cbmZ1bmN0aW9uIEFsdGkgKG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWx0aSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfLmdldE1lc3NhZ2UoXCJDTEFTU19DT05TVFJVQ1RPUlwiLCBcIkFsdGlcIikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vbSBkZSBsYSBjbGFzc2UgKGhlcml0YWdlKVxuICAgICAqIEZJWE1FIGluc3RhbmNlIG91IGNsYXNzZSA/XG4gICAgICovXG4gICAgdGhpcy5DTEFTU05BTUUgPSBcIkFsdGlcIjtcblxuICAgIC8vIGFwcGVsIGR1IGNvbnN0cnVjdGV1ciBwYXIgaGVyaXRhZ2VcbiAgICBDb21tb25TZXJ2aWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJHcC5TZXJ2aWNlcy5BbHRpXCIpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiW0NvbnN0cnVjdGV1ciBBbHRpIChvcHRpb25zKV1cIik7XG5cbiAgICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgICAvLyBhbmFseXNlIGRlcyBvcHRpb25zXG4gICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgICBpZiAoIW9wdGlvbnMucG9zaXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwicG9zaXRpb25zXCIpKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wb3NpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9FTVBUWVwiLCBcInBvc2l0aW9uc1wiKSk7XG4gICAgfVxuXG4gICAgLy8gYWpvdXQgZGVzIG9wdGlvbnMgc3DDqWNpZmlxdWVzIGF1IHNlcnZpY2VcbiAgICB0aGlzLm9wdGlvbnMucG9zaXRpb25zID0gb3B0aW9ucy5wb3NpdGlvbnM7XG5cbiAgICAvLyBmb3JtYXQgZGUgcsOpcG9uc2UgZHUgc2VydmljZSA6IFwianNvblwiIG91IFwieG1sXCIgKHZhbGV1ciBwYXIgZMOpZmF1dCksIGVuIG1pbnVzY3VsZSAhXG4gICAgdGhpcy5vcHRpb25zLm91dHB1dEZvcm1hdCA9ICh0eXBlb2Ygb3B0aW9ucy5vdXRwdXRGb3JtYXQgPT09IFwic3RyaW5nXCIpID8gb3B0aW9ucy5vdXRwdXRGb3JtYXQudG9Mb3dlckNhc2UoKSA6IFwieG1sXCI7XG5cbiAgICAvLyByZXNzb3VyY2UgdXRpbGlzw6llIHBvdXIgbGUgY2FsY3VsIGFsdGltw6l0cmlxdWVcbiAgICB0aGlzLm9wdGlvbnMucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlIHx8IFwiaWduX3JnZV9hbHRpX3dsZFwiO1xuXG4gICAgLy8gc2FtcGxpbmdcbiAgICB0aGlzLm9wdGlvbnMuc2FtcGxpbmcgPSBvcHRpb25zLnNhbXBsaW5nIHx8IG51bGw7XG5cbiAgICAvLyB0eXBlIGQnYXBpIHV0aWxpc8OpIHBvdXIgcmVxdWV0ZXIgbGUgc2VydmljZSwgZW4gbWFqdXNjdWxlICFcbiAgICB0aGlzLm9wdGlvbnMuYXBpID0gKHR5cGVvZiBvcHRpb25zLmFwaSA9PT0gXCJzdHJpbmdcIikgPyBvcHRpb25zLmFwaS50b1VwcGVyQ2FzZSgpIDogXCJSRVNUXCI7XG5cbiAgICAvLyBsJ2FwaSBuZSBwZXV0IMOqdHJlIGludGVycm9nw6llIHF1J2VuIEdFVC5cbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSA9PT0gXCJSRVNUXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmh0dHBNZXRob2QgPSBcIkdFVFwiO1xuICAgIH1cblxuICAgIC8vIHBhcmFtLiB6b25seVxuICAgIHRoaXMub3B0aW9ucy56b25seSA9IG9wdGlvbnMuem9ubHkgfHwgZmFsc2U7XG5cbiAgICAvLyBwYXJhbS4gbWVhc3VyZXNcbiAgICB0aGlzLm9wdGlvbnMubWVhc3VyZXMgPSBvcHRpb25zLm1lYXN1cmVzIHx8IGZhbHNlO1xuXG4gICAgLy8gZ2VzdGlvbiBkZSBsJ3VybCBkdSBzZXJ2aWNlIHBhciBkZWZhdXRcbiAgICAvLyBzaSBsJ3VybCBuJ2VzdCBwYXMgcmVuc2VpZ27DqWUsIGlsIGZhdXQgdXRpbGlzZXIgbGVzIHVybHMgcGFyIGRlZmF1dFxuICAgIC8vIGVuIGZvbmN0aW9uIGR1IHR5cGUgZCdhcGksIFJFU1Qgb3UgV1BTLCBkdSBmb3JtYXQgZGUgcmVwb25zZSBkZW1hbmTDqSAob3V0cHV0Rm9ybWF0KVxuICAgIC8vIGFpbnNpIHF1ZSBzdXIgbGUgdHlwZSBkZSBzZXJ2aWNlIChwcm9maWwgb3UgZWxldmF0aW9uKVxuICAgIGlmICghdGhpcy5vcHRpb25zLnNlcnZlclVybCkge1xuICAgICAgICB2YXIgbHN0VXJsQnlEZWZhdWx0ID0gRGVmYXVsdFVybFNlcnZpY2UuQWx0aS5uZXdVcmwoKTtcbiAgICAgICAgdmFyIHVybEZvdW5kID0gbnVsbDtcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgICAgICAgICBjYXNlIFwiV1BTXCI6XG4gICAgICAgICAgICAgICAgdXJsRm91bmQgPSBsc3RVcmxCeURlZmF1bHQud3BzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlJFU1RcIjpcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gKG9wdGlvbnMuc2FtcGxpbmcgPyBcInByb2ZpbFwiIDogXCJlbGV2YXRpb25cIikgKyBcIi1cIiArIHRoaXMub3B0aW9ucy5vdXRwdXRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdXJsRm91bmQgPSBsc3RVcmxCeURlZmF1bHRba2V5XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX1VOS05PV05cIiwgXCJhcGlcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF1cmxGb3VuZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXJsIGJ5IGRlZmF1bHQgbm90IGZvdW5kICFcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zLnNlcnZlclVybCA9IHVybEZvdW5kO1xuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIlNlcnZlciBVUkwgYnkgZGVmYXVsdCA6IFwiICsgdGhpcy5vcHRpb25zLnNlcnZlclVybCk7XG4gICAgfVxuXG4gICAgLy8gZ2VzdGlvbiBkdSB0eXBlIGRlIHNlcnZpY2VcbiAgICAvLyBzaSBsJ2V4dGVuc2lvbiBkZSBsJ3VybCBlc3QgLmpzb24gb3UgLnhtbCwgb24gc3VyY2hhcmdlIGxlIGZvcm1hdCBkZSBzb3J0aWUgKG91dHB1dEZvcm1hdClcbiAgICB2YXIgaWR4ID0gdGhpcy5vcHRpb25zLnNlcnZlclVybC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwuc3Vic3RyaW5nKGlkeCArIDEpO1xuICAgICAgICBpZiAoZXh0ZW5zaW9uICYmIGV4dGVuc2lvbi5sZW5ndGggPCA1KSB7IC8vIEZJWE1FIGV4dGVuc2lvbiBkZSBtb2lucyBkZSA0IGNhci4gLi4uXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIlNlcnZlciBFeHRlbnNpb24gVVJMIDogXCIgKyBleHRlbnNpb24pO1xuICAgICAgICAgICAgc3dpdGNoIChleHRlbnNpb24udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInhtbFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMub3V0cHV0Rm9ybWF0ID0gZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInR5cGUgb2Ygc2VydmljZSA6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgKGpzb24gb3IgeG1sKSAhXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBsZW5kcyBtb2R1bGU6QWx0aSNcbiAqL1xuQWx0aS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbW1vblNlcnZpY2UucHJvdG90eXBlLCB7XG4gICAgLy8gdG9kb1xuICAgIC8vIGdldHRlci9zZXR0ZXJcbn0pO1xuXG4vKipcbiAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gKi9cbkFsdGkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWx0aTtcblxuLyoqXG4gKiBDcsOpYXRpb24gZGUgbGEgcmVxdcOqdGUgKG92ZXJ3cml0ZSlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvciAgIC0gY2FsbGJhY2sgZGVzIGVycmV1cnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgLSBjYWxsYmFja1xuICovXG5BbHRpLnByb3RvdHlwZS5idWlsZFJlcXVlc3QgPSBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICAvLyB1dGlsaXNhdGlvbiBlbiBtb2RlIGNhbGxiYWNrXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGh0dHBNZXRob2QgOiB0aGlzLm9wdGlvbnMuaHR0cE1ldGhvZCxcbiAgICAgICAgLy8gY2FsbGJhY2tcbiAgICAgICAgb25TdWNjZXNzIDogZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgLy8gc2F1dmVnYXJkZSBkZSBsYSByZXF1ZXRlICFcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnJlcXVlc3QpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yIDogZXJyb3IsXG4gICAgICAgIHNjb3BlIDogdGhpcyxcbiAgICAgICAgLy8gc3DDqWNpZmlxdWUgYXUgc2VydmljZSA6XG4gICAgICAgIHJlc291cmNlIDogdGhpcy5vcHRpb25zLnJlc291cmNlLFxuICAgICAgICBwb3NpdGlvbnMgOiB0aGlzLm9wdGlvbnMucG9zaXRpb25zLFxuICAgICAgICBvdXRwdXRGb3JtYXQgOiB0aGlzLm9wdGlvbnMub3V0cHV0Rm9ybWF0LFxuICAgICAgICBzYW1wbGluZyA6IHRoaXMub3B0aW9ucy5zYW1wbGluZyxcbiAgICAgICAgYXBpIDogdGhpcy5vcHRpb25zLmFwaSxcbiAgICAgICAgem9ubHkgOiB0aGlzLm9wdGlvbnMuem9ubHksXG4gICAgICAgIG1lYXN1cmVzIDogdGhpcy5vcHRpb25zLm1lYXN1cmVzXG4gICAgfTtcblxuICAgIEFsdGlSZXF1ZXN0RmFjdG9yeS5idWlsZChvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQW5hbHlzZSBkZSBsYSByZXBvbnNlIChvdmVyd3JpdGUpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuQWx0aS5wcm90b3R5cGUuYW5hbHl6ZVJlc3BvbnNlID0gZnVuY3Rpb24gKGVycm9yLCBzdWNjZXNzKSB7XG4gICAgLy8gSU5GT1xuICAgIC8vIEZhY3RvcnkgcG91ciBtYXNxdWVyIGxhIGNvbXBsZXhpdMOpIGR1IHJldG91ciBkdSBzZXJ2aWNlIHF1aSByZW52b2llIHNvaXRcbiAgICAvLyAgLSB1bmUgJ3N0cmluZycgcXVpIGNvbnRpZW50IGR1IFhNTCBvdSBKU09OIG5hdGlmIGVuIG1vZGUgWEhSXG4gICAgLy8gIC0gdW4gb2JqZXQgSlNPTiBxdWkgZXN0IG5hdGlmIG91IGVuY2Fwc3Vsw6lcblxuICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2UgOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgICAgICAgb3V0cHV0Rm9ybWF0IDogdGhpcy5vcHRpb25zLm91dHB1dEZvcm1hdCwgLy8gdXRpbGUgcG91ciBwYXJzZXIgbGEgc3RyaW5nIGVuIG1vZGUgWEhSIDogSlNPTiBvdSBYTUwgIVxuICAgICAgICAgICAgcmF3UmVzcG9uc2UgOiB0aGlzLm9wdGlvbnMucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICBvbkVycm9yIDogZXJyb3IsXG4gICAgICAgICAgICBvblN1Y2Nlc3MgOiBzdWNjZXNzLFxuICAgICAgICAgICAgc2NvcGUgOiB0aGlzXG4gICAgICAgIH07XG5cbiAgICAgICAgQWx0aVJlc3BvbnNlRmFjdG9yeS5idWlsZChvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvclNlcnZpY2UoXy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FTVBUWVwiKSkpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFsdGk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Alti/Alti.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Formats/AltiResponseReader.js": +/*!*********************************************************!*\ + !*** ./src/Services/Alti/Formats/AltiResponseReader.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Response/model/AltiResponse */ \"./src/Services/Alti/Response/model/AltiResponse.js\");\n/* harmony import */ var _Response_model_Elevation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Response/model/Elevation */ \"./src/Services/Alti/Response/model/Elevation.js\");\n/* harmony import */ var _Response_model_Measure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Response/model/Measure */ \"./src/Services/Alti/Response/model/Measure.js\");\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service Altimétrique du Géoportail\n * (calcul altimétrique simple ou profil altimétrique d'une courbe),\n * lorsque le paramètre output = xml,\n * afin de récupérer les élévations retournées.\n *\n * @module AltiResponseReader\n * @alias Gp.Services.Alti.Formats.AltiResponseReader\n * @private\n */\n\n// import Logger from \"../../../Utils/LoggerByDefault\";\n\n\n\n\n/**\n *\n * Objet AltiResponseReader\n *\n * @member {Object} AltiResponseReader\n *\n * @property {Object} AltiResponseReader.READERS - Objet contenant des fonctions de lecture, appelées \"readers\"\n * dont chaque clé correspond au nom d'un tag du XML que l'on souhaite lire\n * et la valeur associée est une fonction (node, data)\n * où node est un noeud du document DOM\n * et data est un objet où l'on stocke les informations lues dans le XML.\n *\n * @property {Method} AltiResponseReader.READERS.elevations - Lecture d'un noeud \"elevations\" de la réponse XML\n * du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @property {Method} AltiResponseReader.READERS.elevation - Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 4 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, et acc)\n *\n * @property {Method} AltiResponseReader.READERS.lat - Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.lon - Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.z - Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.acc - Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.measures - Lecture d'un noeud \"measures\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.source_name - Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.source_mesure - Lecture d'un noeud \"source_mesure\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.exceptionreport - Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.READERS.exception - Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.read - Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n */\nvar AltiResponseReader = {};\nAltiResponseReader.READERS = {\n /**\n * Lecture d'un noeud \"elevations\" de la réponse XML du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @param {DOMElement} root - racine de la réponse XML\n * @static\n * @memberof AltiResponseReader\n * @returns {Object} Retourne un objet de type AltiResponse\n */\n elevations: function elevations(root) {\n // INFO : on passe en paramètre l'objet en entrée elevations, vide, à remplir.\n var altiResponse = new _Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n if (root.hasChildNodes()) {\n var children = root.childNodes;\n var child;\n var elevation;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (AltiResponseReader.READERS[child.nodeName]) {\n elevation = AltiResponseReader.READERS[child.nodeName](child);\n altiResponse.elevations.push(elevation);\n }\n }\n }\n return altiResponse;\n },\n /**\n * Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 5 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, acc et measures)\n *\n * @param {DOMElement} node - noeud elevation à lire pour récupérer les informations de l'élévation retournée (z [, lon, lat, acc, measures])\n * @return {Array} elevationResponse - format de la réponse en sortie, instance de AltiResponse\n * @static\n * @memberof AltiResponseReader\n */\n elevation: function elevation(node) {\n var elevation = new _Response_model_Elevation__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (AltiResponseReader.READERS[child.nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[child.nodeName](child, elevation);\n }\n }\n }\n return elevation;\n },\n /**\n * Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la latitude\n * @param {Object} elevation - objet dans lequel stocker la latitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lat: function lat(node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n elevation.lat = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : latitude attendue mais absente\");\n }\n },\n /**\n * Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la longitude\n * @param {Object} elevation - objet dans lequel stocker la longitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lon: function lon(node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n elevation.lon = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : longitude attendue mais absente\");\n }\n },\n /**\n * Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'altitude\n * @param {Object} elevationObject - objet dans lequel stocker l'altitude retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n z: function z(node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n if (elevationObject) {\n elevationObject.z = parseFloat(textNode.nodeValue);\n } else {\n elevationObject = new _Response_model_Elevation__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n elevationObject.z = parseFloat(textNode.nodeValue);\n return elevationObject;\n }\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : altitude attendue mais absente\");\n }\n },\n /**\n * Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevationObject - objet dans lequel stocker la précision retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n acc: function acc(node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n elevationObject.acc = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : précision (acc) attendue mais absente\");\n }\n },\n /**\n * Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (contient le nom de la source, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_name: function source_name(node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n measure.source_name = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_name attendue mais absente\");\n }\n },\n /**\n * Lecture d'un noeud \"source_measure\" de la réponse xml du service alti.\n * (contient le nom de la mesure, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_measure: function source_measure(node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n measure.source_measure = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_measure attendue mais absente\");\n }\n },\n /**\n * Lecture d'un noeud \"measures\" et de ses enfants \"measure\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevation - objet dans lequel stocker la précision retournée\n * @static\n * @memberof AltiResponseReader\n */\n measures: function measures(node, elevation) {\n elevation.measures = [];\n var measure;\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var measureNode;\n var measureChildren;\n for (var i = 0; i < children.length; i++) {\n measure = new _Response_model_Measure__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n measureNode = children[i];\n measureChildren = measureNode.childNodes;\n for (var j = 0; j < measureChildren.length; j++) {\n if (AltiResponseReader.READERS[measureChildren[j].nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[measureChildren[j].nodeName](measureChildren[j], measure);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : measures attendues mais absentes\");\n }\n }\n elevation.measures.push(measure);\n }\n }\n },\n /**\n * Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exceptionreport: function exceptionreport(node) {\n var response = {};\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeName === \"Exception\") {\n response.exceptionReport = AltiResponseReader.READERS.exception(child);\n }\n }\n }\n return response;\n },\n /**\n * Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception, avec deux attributs :\n * {String} exceptionReport.exceptionCode - qui contient l'identifiant du code de l'exception\n * {String} exceptionReport.exception - qui contient le message de l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exception: function exception(node) {\n var exceptionReport = {};\n\n // get exception code\n var exceptionCode = node.getAttribute(\"exceptionCode\");\n if (exceptionCode) {\n exceptionReport.exceptionCode = exceptionCode;\n }\n\n // get exception message\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n exceptionReport.exception = textNode.nodeValue;\n }\n return exceptionReport;\n },\n /**\n * Lecture d'un noeud \"Error\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} error - objet contenant l'exception\n * @static\n */\n error: function error(node) {\n var response = {\n error: {}\n };\n // get error code and description\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n var textNode;\n // get error code\n if (child.nodeType === 1 && child.nodeName === \"code\") {\n // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n response.error.code = textNode.nodeValue;\n }\n }\n // get error description\n if (child.nodeType === 1 && child.nodeName === \"description\") {\n // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) {\n // 3 === node.TEXT_NODE\n response.error.description = textNode.nodeValue;\n }\n }\n }\n }\n return response;\n }\n};\n\n/**\n * Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n * @method AltiResponseReader.read\n * @param {DOMElement} root - racine de la réponse XML à lire\n * @static\n * @memberof AltiResponseReader\n */\nAltiResponseReader.read = function (root) {\n if (root.nodeName === \"elevations\") {\n var altiResponse = AltiResponseReader.READERS.elevations(root);\n return altiResponse;\n } else if (root.nodeName === \"ExceptionReport\") {\n var exceptionReport = AltiResponseReader.READERS.exceptionreport(root);\n return exceptionReport;\n } else if (root.nodeName === \"error\") {\n var error = AltiResponseReader.READERS.error(root);\n return error;\n } else {\n throw new Error(\"Erreur lors de la lecture de la réponse : elle n'est pas au format attendu.\");\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiResponseReader);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL0Zvcm1hdHMvQWx0aVJlc3BvbnNlUmVhZGVyLmpzPzNlYTAiXSwibmFtZXMiOlsiQWx0aVJlc3BvbnNlUmVhZGVyIiwiUkVBREVSUyIsImVsZXZhdGlvbnMiLCJyb290IiwiYWx0aVJlc3BvbnNlIiwiQWx0aVJlc3BvbnNlIiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkcmVuIiwiY2hpbGROb2RlcyIsImNoaWxkIiwiZWxldmF0aW9uIiwiaSIsImxlbmd0aCIsIm5vZGVOYW1lIiwicHVzaCIsIm5vZGUiLCJFbGV2YXRpb24iLCJsYXQiLCJ0ZXh0Tm9kZSIsImZpcnN0Q2hpbGQiLCJub2RlVHlwZSIsInBhcnNlRmxvYXQiLCJub2RlVmFsdWUiLCJFcnJvciIsImxvbiIsInoiLCJlbGV2YXRpb25PYmplY3QiLCJhY2MiLCJzb3VyY2VfbmFtZSIsIm1lYXN1cmUiLCJzb3VyY2VfbWVhc3VyZSIsIm1lYXN1cmVzIiwibWVhc3VyZU5vZGUiLCJtZWFzdXJlQ2hpbGRyZW4iLCJNZWFzdXJlIiwiaiIsImV4Y2VwdGlvbnJlcG9ydCIsInJlc3BvbnNlIiwiZXhjZXB0aW9uUmVwb3J0IiwiZXhjZXB0aW9uIiwiZXhjZXB0aW9uQ29kZSIsImdldEF0dHJpYnV0ZSIsImVycm9yIiwiY29kZSIsImRlc2NyaXB0aW9uIiwicmVhZCJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQzBEO0FBQ047QUFDSjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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SVQsWUFBWSxHQUFHSixrQkFBa0IsQ0FBQ0MsT0FBTyxDQUFDQyxVQUFVLENBQUNDLElBQUksQ0FBQztJQUM5RCxPQUFPQyxZQUFZO0VBQ3ZCLENBQUMsTUFBTSxJQUFJRCxJQUFJLENBQUNVLFFBQVEsS0FBSyxpQkFBaUIsRUFBRTtJQUM1QyxJQUFJeUIsZUFBZSxHQUFHdEMsa0JBQWtCLENBQUNDLE9BQU8sQ0FBQ21DLGVBQWUsQ0FBQ2pDLElBQUksQ0FBQztJQUN0RSxPQUFPbUMsZUFBZTtFQUMxQixDQUFDLE1BQU0sSUFBSW5DLElBQUksQ0FBQ1UsUUFBUSxLQUFLLE9BQU8sRUFBRTtJQUNsQyxJQUFJNkIsS0FBSyxHQUFHMUMsa0JBQWtCLENBQUNDLE9BQU8sQ0FBQ3lDLEtBQUssQ0FBQ3ZDLElBQUksQ0FBQztJQUNsRCxPQUFPdUMsS0FBSztFQUNoQixDQUFDLE1BQU07SUFDSCxNQUFNLElBQUluQixLQUFLLENBQUMsNkVBQTZFLENBQUM7RUFDbEc7QUFDSixDQUFDO0FBRWN2QixpRkFBa0IiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvQWx0aS9Gb3JtYXRzL0FsdGlSZXNwb25zZVJlYWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBGb25jdGlvbiByZXRvdXJuYW50IHVuIG9iamV0IGNvbnRlbmFudCBkZXMgY2zDqXMgZGUgbGVjdHVyZSAocmVhZGVycylcbiAqICAgICAgcXVpIHBlcm1ldHRlbnQgZGUgcGFyc2VyIGRlcyByw6lwb25zZXMgWE1MIGR1IHNlcnZpY2UgQWx0aW3DqXRyaXF1ZSBkdSBHw6lvcG9ydGFpbFxuICogICAgICAoY2FsY3VsIGFsdGltw6l0cmlxdWUgc2ltcGxlIG91IHByb2ZpbCBhbHRpbcOpdHJpcXVlIGQndW5lIGNvdXJiZSksXG4gKiAgICAgIGxvcnNxdWUgbGUgcGFyYW3DqHRyZSBvdXRwdXQgPSB4bWwsXG4gKiAgICAgIGFmaW4gZGUgcsOpY3Vww6lyZXIgbGVzIMOpbMOpdmF0aW9ucyByZXRvdXJuw6llcy5cbiAqXG4gKiBAbW9kdWxlIEFsdGlSZXNwb25zZVJlYWRlclxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkFsdGkuRm9ybWF0cy5BbHRpUmVzcG9uc2VSZWFkZXJcbiAqIEBwcml2YXRlXG4gKi9cblxuLy8gaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgQWx0aVJlc3BvbnNlIGZyb20gXCIuLi9SZXNwb25zZS9tb2RlbC9BbHRpUmVzcG9uc2VcIjtcbmltcG9ydCBFbGV2YXRpb24gZnJvbSBcIi4uL1Jlc3BvbnNlL21vZGVsL0VsZXZhdGlvblwiO1xuaW1wb3J0IE1lYXN1cmUgZnJvbSBcIi4uL1Jlc3BvbnNlL21vZGVsL01lYXN1cmVcIjtcblxuLyoqXG4gKlxuICogT2JqZXQgQWx0aVJlc3BvbnNlUmVhZGVyXG4gKlxuICogQG1lbWJlciB7T2JqZWN0fSBBbHRpUmVzcG9uc2VSZWFkZXJcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlMgLSBPYmpldCBjb250ZW5hbnQgZGVzIGZvbmN0aW9ucyBkZSBsZWN0dXJlLCBhcHBlbMOpZXMgXCJyZWFkZXJzXCJcbiAqICAgICAgZG9udCBjaGFxdWUgY2zDqSBjb3JyZXNwb25kIGF1IG5vbSBkJ3VuIHRhZyBkdSBYTUwgcXVlIGwnb24gc291aGFpdGUgbGlyZVxuICogICAgICBldCBsYSB2YWxldXIgYXNzb2Npw6llIGVzdCB1bmUgZm9uY3Rpb24gKG5vZGUsIGRhdGEpXG4gKiAgICAgIG/DuSBub2RlIGVzdCB1biBub2V1ZCBkdSBkb2N1bWVudCBET01cbiAqICAgICAgZXQgZGF0YSBlc3QgdW4gb2JqZXQgb8O5IGwnb24gc3RvY2tlIGxlcyBpbmZvcm1hdGlvbnMgbHVlcyBkYW5zIGxlIFhNTC5cbiAqXG4gKiBAcHJvcGVydHkge01ldGhvZH0gQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlMuZWxldmF0aW9ucyAtICBMZWN0dXJlIGQndW4gbm9ldWQgXCJlbGV2YXRpb25zXCIgZGUgbGEgcsOpcG9uc2UgWE1MXG4gKiAgICAgIGR1IHNlcnZpY2UgYWx0aSwgY29ycmVzcG9uZGFudCBsb2dpcXVlbWVudCDDoCBsYSByYWNpbmUgZHUgZG9jdW1lbnRcbiAqICAgICAgKGNvbnRpZW50IHVuIG91IHBsdXNpZXVycyBjaGlsZE5vZGVzIGNvcnJlc3BvbmRhbnQgY2hhY3VuIMOgIHVuZSDDqWzDqXZhdGlvbiByZXRvdXJuw6llKVxuICpcbiAqIEBwcm9wZXJ0eSB7TWV0aG9kfSBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSUy5lbGV2YXRpb24gLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJlbGV2YXRpb25cIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICogICAgICAoY29udGllbnQgdW4gb3UgNCBjaGlsZE5vZGUgKHMpIGNvcnJlc3BvbmRhbnQgw6AgbCdhbHRpdHVkZSAoeikgZXQgw6l2ZW50dWVsbGVtZW50IGxhdCwgbG9uLCBldCBhY2MpXG4gKlxuICogQHByb3BlcnR5IHtNZXRob2R9IEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTLmxhdCAtIExlY3R1cmUgZCd1biBub2V1ZCBcImxhdFwiIGRlIGxhIHLDqXBvbnNlIHhtbCBkdSBzZXJ2aWNlIGFsdGkuXG4gKiAgICAgIChjb250aWVudCB1bmUgdmFsZXVyIGRlIGxhdGl0dWRlLCBxdWkgZXN0IHVuIGZsb3R0YW50KVxuICpcbiAqIEBwcm9wZXJ0eSB7TWV0aG9kfSBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSUy5sb24gLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJsb25cIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICogICAgICAoY29udGllbnQgdW5lIHZhbGV1ciBkZSBsb25naXR1ZGUsIHF1aSBlc3QgdW4gZmxvdHRhbnQpXG4gKlxuICogQHByb3BlcnR5IHtNZXRob2R9IEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTLnogLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJ6XCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAqICAgICAgKGNvbnRpZW50IHVuZSB2YWxldXIgZCdhbHRpdHVkZSwgcXVpIGVzdCB1biBmbG90dGFudClcbiAqXG4gKiBAcHJvcGVydHkge01ldGhvZH0gQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlMuYWNjIC0gTGVjdHVyZSBkJ3VuIG5vZXVkIFwiYWNjXCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAqICAgICAgKGNvbnRpZW50IHVuZSB2YWxldXIgZGUgcHLDqWNpc2lvbiwgcXVpIGVzdCB1biBmbG90dGFudClcbiAqXG4gKiBAcHJvcGVydHkge01ldGhvZH0gQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlMubWVhc3VyZXMgLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJtZWFzdXJlc1wiIGRlIGxhIHLDqXBvbnNlIHhtbCBkdSBzZXJ2aWNlIGFsdGkuXG4gKiAgICAgIChjb250aWVudCB1bmUgdmFsZXVyIGRlIHByw6ljaXNpb24sIHF1aSBlc3QgdW4gZmxvdHRhbnQpXG4gKlxuICogQHByb3BlcnR5IHtNZXRob2R9IEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTLnNvdXJjZV9uYW1lIC0gTGVjdHVyZSBkJ3VuIG5vZXVkIFwic291cmNlX25hbWVcIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICogICAgICAocG91ciByZW1wbGlyIGwnw6l2ZW50dWVsIG9iamV0IG1lYXN1cmUpXG4gKlxuICogQHByb3BlcnR5IHtNZXRob2R9IEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTLnNvdXJjZV9tZXN1cmUgLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJzb3VyY2VfbWVzdXJlXCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAqICAgICAgKHBvdXIgcmVtcGxpciBsJ8OpdmVudHVlbCBvYmpldCBtZWFzdXJlKVxuICpcbiAqIEBwcm9wZXJ0eSB7TWV0aG9kfSBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSUy5leGNlcHRpb25yZXBvcnQgLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJFeGNlcHRpb25SZXBvcnRcIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICpcbiAqIEBwcm9wZXJ0eSB7TWV0aG9kfSBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSUy5leGNlcHRpb24gLSBMZWN0dXJlIGQndW4gbm9ldWQgXCJFeGNlcHRpb25cIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICpcbiAqIEBwcm9wZXJ0eSB7TWV0aG9kfSBBbHRpUmVzcG9uc2VSZWFkZXIucmVhZCAtIE3DqXRob2RlIHBlcm1ldHRhbnQgZGUgbGFuY2VyIGxhIGxlY3R1cmUgZCd1bmUgcsOpcG9uc2UgWE1MIGR1IHNlcnZpY2UgYWx0aW3DqXRyaXF1ZSxcbiAqICAgICAgw6AgbCdhaWRlIGRlcyByZWFkZXJzIGRlIGxhIGNsYXNzZS5cbiAqXG4gKi9cbnZhciBBbHRpUmVzcG9uc2VSZWFkZXIgPSB7fTtcblxuQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlMgPSB7XG5cbiAgICAvKipcbiAgICAgKiBMZWN0dXJlIGQndW4gbm9ldWQgXCJlbGV2YXRpb25zXCIgZGUgbGEgcsOpcG9uc2UgWE1MIGR1IHNlcnZpY2UgYWx0aSwgY29ycmVzcG9uZGFudCBsb2dpcXVlbWVudCDDoCBsYSByYWNpbmUgZHUgZG9jdW1lbnRcbiAgICAgKiAgICAgIChjb250aWVudCB1biBvdSBwbHVzaWV1cnMgY2hpbGROb2RlcyBjb3JyZXNwb25kYW50IGNoYWN1biDDoCB1bmUgw6lsw6l2YXRpb24gcmV0b3VybsOpZSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdCAtIHJhY2luZSBkZSBsYSByw6lwb25zZSBYTUxcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlcm9mIEFsdGlSZXNwb25zZVJlYWRlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldG91cm5lIHVuIG9iamV0IGRlIHR5cGUgQWx0aVJlc3BvbnNlXG4gICAgICovXG4gICAgZWxldmF0aW9ucyA6IGZ1bmN0aW9uIChyb290KSB7XG4gICAgICAgIC8vIElORk8gOiBvbiBwYXNzZSBlbiBwYXJhbcOodHJlIGwnb2JqZXQgZW4gZW50csOpZSBlbGV2YXRpb25zLCB2aWRlLCDDoCByZW1wbGlyLlxuICAgICAgICB2YXIgYWx0aVJlc3BvbnNlID0gbmV3IEFsdGlSZXNwb25zZSgpO1xuXG4gICAgICAgIGlmIChyb290Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gcm9vdC5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgdmFyIGNoaWxkO1xuICAgICAgICAgICAgdmFyIGVsZXZhdGlvbjtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgICAgICBpZiAoQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlNbY2hpbGQubm9kZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbiA9IEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTW2NoaWxkLm5vZGVOYW1lXShjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGFsdGlSZXNwb25zZS5lbGV2YXRpb25zLnB1c2goZWxldmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWx0aVJlc3BvbnNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMZWN0dXJlIGQndW4gbm9ldWQgXCJlbGV2YXRpb25cIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICAgICAqICAgICAgKGNvbnRpZW50IHVuIG91IDUgY2hpbGROb2RlIChzKSBjb3JyZXNwb25kYW50IMOgIGwnYWx0aXR1ZGUgKHopIGV0IMOpdmVudHVlbGxlbWVudCBsYXQsIGxvbiwgYWNjIGV0IG1lYXN1cmVzKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIC0gbm9ldWQgZWxldmF0aW9uIMOgIGxpcmUgcG91ciByw6ljdXDDqXJlciBsZXMgaW5mb3JtYXRpb25zIGRlIGwnw6lsw6l2YXRpb24gcmV0b3VybsOpZSAoeiBbLCBsb24sIGxhdCwgYWNjLCBtZWFzdXJlc10pXG4gICAgICogQHJldHVybiB7QXJyYXl9IGVsZXZhdGlvblJlc3BvbnNlIC0gZm9ybWF0IGRlIGxhIHLDqXBvbnNlIGVuIHNvcnRpZSwgaW5zdGFuY2UgZGUgQWx0aVJlc3BvbnNlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJvZiBBbHRpUmVzcG9uc2VSZWFkZXJcbiAgICAgKi9cbiAgICBlbGV2YXRpb24gOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgZWxldmF0aW9uID0gbmV3IEVsZXZhdGlvbigpO1xuXG4gICAgICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgdmFyIGNoaWxkO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgaWYgKEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTW2NoaWxkLm5vZGVOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJTkZPIDogb24gcGFzc2UgZW4gcGFyYW3DqHRyZSBsJ29iamV0IGVuIGVudHLDqWUgZWxldmF0aW9uLCB2aWRlLCDDoCByZW1wbGlyLlxuICAgICAgICAgICAgICAgICAgICBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSU1tjaGlsZC5ub2RlTmFtZV0oY2hpbGQsIGVsZXZhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGV2YXRpb247XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExlY3R1cmUgZCd1biBub2V1ZCBcImxhdFwiIGRlIGxhIHLDqXBvbnNlIHhtbCBkdSBzZXJ2aWNlIGFsdGkuXG4gICAgICogICAgICAoY29udGllbnQgdW5lIHZhbGV1ciBkZSBsYXRpdHVkZSwgcXVpIGVzdCB1biBmbG90dGFudClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSAtIG5vZXVkIMOgIGxpcmUgcG91ciByw6ljdXDDqXJlciBsYSBsYXRpdHVkZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlbGV2YXRpb24gLSBvYmpldCBkYW5zIGxlcXVlbCBzdG9ja2VyIGxhIGxhdGl0dWRlIHJldG91cm7DqWVcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlcm9mIEFsdGlSZXNwb25zZVJlYWRlclxuICAgICAqL1xuICAgIGxhdCA6IGZ1bmN0aW9uIChub2RlLCBlbGV2YXRpb24pIHtcbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUgJiYgdGV4dE5vZGUubm9kZVR5cGUgPT09IDMpIHsgLy8gMyA9PT0gbm9kZS5URVhUX05PREVcbiAgICAgICAgICAgIGVsZXZhdGlvbi5sYXQgPSBwYXJzZUZsb2F0KHRleHROb2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJldXIgZGFucyBsYSBsZWN0dXJlIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgOiBsYXRpdHVkZSBhdHRlbmR1ZSBtYWlzIGFic2VudGVcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwibG9uXCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAgICAgKiAgICAgIChjb250aWVudCB1bmUgdmFsZXVyIGRlIGxvbmdpdHVkZSwgcXVpIGVzdCB1biBmbG90dGFudClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSAtIG5vZXVkIMOgIGxpcmUgcG91ciByw6ljdXDDqXJlciBsYSBsb25naXR1ZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZWxldmF0aW9uIC0gb2JqZXQgZGFucyBsZXF1ZWwgc3RvY2tlciBsYSBsb25naXR1ZGUgcmV0b3VybsOpZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyb2YgQWx0aVJlc3BvbnNlUmVhZGVyXG4gICAgICovXG4gICAgbG9uIDogZnVuY3Rpb24gKG5vZGUsIGVsZXZhdGlvbikge1xuICAgICAgICB2YXIgdGV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS5ub2RlVHlwZSA9PT0gMykgeyAvLyAzID09PSBub2RlLlRFWFRfTk9ERVxuICAgICAgICAgICAgZWxldmF0aW9uLmxvbiA9IHBhcnNlRmxvYXQodGV4dE5vZGUubm9kZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycmV1ciBkYW5zIGxhIGxlY3R1cmUgZGUgbGEgcsOpcG9uc2UgZHUgc2VydmljZSA6IGxvbmdpdHVkZSBhdHRlbmR1ZSBtYWlzIGFic2VudGVcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwielwiIGRlIGxhIHLDqXBvbnNlIHhtbCBkdSBzZXJ2aWNlIGFsdGkuXG4gICAgICogICAgICAoY29udGllbnQgdW5lIHZhbGV1ciBkJ2FsdGl0dWRlLCBxdWkgZXN0IHVuIGZsb3R0YW50KVxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIC0gbm9ldWQgw6AgbGlyZSBwb3VyIHLDqWN1cMOpcmVyIGwnYWx0aXR1ZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZWxldmF0aW9uT2JqZWN0IC0gb2JqZXQgZGFucyBsZXF1ZWwgc3RvY2tlciBsJ2FsdGl0dWRlIHJldG91cm7DqWUgOiBlbGV2YXRpb24gb3UgbWVhc3VyZVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyb2YgQWx0aVJlc3BvbnNlUmVhZGVyXG4gICAgICovXG4gICAgeiA6IGZ1bmN0aW9uIChub2RlLCBlbGV2YXRpb25PYmplY3QpIHtcbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUgJiYgdGV4dE5vZGUubm9kZVR5cGUgPT09IDMpIHsgLy8gMyA9PT0gbm9kZS5URVhUX05PREVcbiAgICAgICAgICAgIGlmIChlbGV2YXRpb25PYmplY3QpIHtcbiAgICAgICAgICAgICAgICBlbGV2YXRpb25PYmplY3QueiA9IHBhcnNlRmxvYXQodGV4dE5vZGUubm9kZVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxldmF0aW9uT2JqZWN0ID0gbmV3IEVsZXZhdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsZXZhdGlvbk9iamVjdC56ID0gcGFyc2VGbG9hdCh0ZXh0Tm9kZS5ub2RlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGV2YXRpb25PYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJldXIgZGFucyBsYSBsZWN0dXJlIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgOiBhbHRpdHVkZSBhdHRlbmR1ZSBtYWlzIGFic2VudGVcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwiYWNjXCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAgICAgKiAgICAgIChjb250aWVudCB1bmUgdmFsZXVyIGRlIHByw6ljaXNpb24sIHF1aSBlc3QgdW4gZmxvdHRhbnQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGUgLSBub2V1ZCDDoCBsaXJlIHBvdXIgcsOpY3Vww6lyZXIgbGEgcHLDqWNpc2lvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlbGV2YXRpb25PYmplY3QgLSBvYmpldCBkYW5zIGxlcXVlbCBzdG9ja2VyIGxhIHByw6ljaXNpb24gcmV0b3VybsOpZSA6IGVsZXZhdGlvbiBvdSBtZWFzdXJlXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJvZiBBbHRpUmVzcG9uc2VSZWFkZXJcbiAgICAgKi9cbiAgICBhY2MgOiBmdW5jdGlvbiAobm9kZSwgZWxldmF0aW9uT2JqZWN0KSB7XG4gICAgICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKHRleHROb2RlICYmIHRleHROb2RlLm5vZGVUeXBlID09PSAzKSB7IC8vIDMgPT09IG5vZGUuVEVYVF9OT0RFXG4gICAgICAgICAgICBlbGV2YXRpb25PYmplY3QuYWNjID0gcGFyc2VGbG9hdCh0ZXh0Tm9kZS5ub2RlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyZXVyIGRhbnMgbGEgbGVjdHVyZSBkZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlIDogcHLDqWNpc2lvbiAoYWNjKSBhdHRlbmR1ZSBtYWlzIGFic2VudGVcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwic291cmNlX25hbWVcIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICAgICAqICAgICAgKGNvbnRpZW50IGxlIG5vbSBkZSBsYSBzb3VyY2UsIHF1aSBlc3QgdW4gc3RyaW5nKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIC0gbm9ldWQgw6AgbGlyZSBwb3VyIHLDqWN1cMOpcmVyIGxhIHByw6ljaXNpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWVhc3VyZSAtIG9iamV0IGRhbnMgbGVxdWVsIHN0b2NrZXIgbGUgbm9tIGRlIGxhIHNvdXJjZSByZXRvdXJuw6lcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlcm9mIEFsdGlSZXNwb25zZVJlYWRlclxuICAgICAqL1xuICAgIHNvdXJjZV9uYW1lIDogZnVuY3Rpb24gKG5vZGUsIG1lYXN1cmUpIHtcbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUgJiYgdGV4dE5vZGUubm9kZVR5cGUgPT09IDMpIHsgLy8gMyA9PT0gbm9kZS5URVhUX05PREVcbiAgICAgICAgICAgIG1lYXN1cmUuc291cmNlX25hbWUgPSB0ZXh0Tm9kZS5ub2RlVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJldXIgZGFucyBsYSBsZWN0dXJlIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgOiBzb3VyY2VfbmFtZSBhdHRlbmR1ZSBtYWlzIGFic2VudGVcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwic291cmNlX21lYXN1cmVcIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICAgICAqICAgICAgKGNvbnRpZW50IGxlIG5vbSBkZSBsYSBtZXN1cmUsIHF1aSBlc3QgdW4gc3RyaW5nKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIC0gbm9ldWQgw6AgbGlyZSBwb3VyIHLDqWN1cMOpcmVyIGxhIHByw6ljaXNpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbWVhc3VyZSAtIG9iamV0IGRhbnMgbGVxdWVsIHN0b2NrZXIgbGUgbm9tIGRlIGxhIHNvdXJjZSByZXRvdXJuw6lcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlcm9mIEFsdGlSZXNwb25zZVJlYWRlclxuICAgICAqL1xuICAgIHNvdXJjZV9tZWFzdXJlIDogZnVuY3Rpb24gKG5vZGUsIG1lYXN1cmUpIHtcbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUgJiYgdGV4dE5vZGUubm9kZVR5cGUgPT09IDMpIHsgLy8gMyA9PT0gbm9kZS5URVhUX05PREVcbiAgICAgICAgICAgIG1lYXN1cmUuc291cmNlX21lYXN1cmUgPSB0ZXh0Tm9kZS5ub2RlVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJldXIgZGFucyBsYSBsZWN0dXJlIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgOiBzb3VyY2VfbWVhc3VyZSBhdHRlbmR1ZSBtYWlzIGFic2VudGVcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwibWVhc3VyZXNcIiBldCBkZSBzZXMgZW5mYW50cyBcIm1lYXN1cmVcIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICAgICAqICAgICAgKGNvbnRpZW50IHVuZSB2YWxldXIgZGUgcHLDqWNpc2lvbiwgcXVpIGVzdCB1biBmbG90dGFudClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSAtIG5vZXVkIMOgIGxpcmUgcG91ciByw6ljdXDDqXJlciBsYSBwcsOpY2lzaW9uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGVsZXZhdGlvbiAtIG9iamV0IGRhbnMgbGVxdWVsIHN0b2NrZXIgbGEgcHLDqWNpc2lvbiByZXRvdXJuw6llXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJvZiBBbHRpUmVzcG9uc2VSZWFkZXJcbiAgICAgKi9cbiAgICBtZWFzdXJlcyA6IGZ1bmN0aW9uIChub2RlLCBlbGV2YXRpb24pIHtcbiAgICAgICAgZWxldmF0aW9uLm1lYXN1cmVzID0gW107XG4gICAgICAgIHZhciBtZWFzdXJlO1xuICAgICAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgIHZhciBtZWFzdXJlTm9kZTtcbiAgICAgICAgICAgIHZhciBtZWFzdXJlQ2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWVhc3VyZSA9IG5ldyBNZWFzdXJlKCk7XG4gICAgICAgICAgICAgICAgbWVhc3VyZU5vZGUgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICBtZWFzdXJlQ2hpbGRyZW4gPSBtZWFzdXJlTm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVhc3VyZUNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSU1ttZWFzdXJlQ2hpbGRyZW5bal0ubm9kZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJTkZPIDogb24gcGFzc2UgZW4gcGFyYW3DqHRyZSBsJ29iamV0IGVuIGVudHLDqWUgZWxldmF0aW9uLCB2aWRlLCDDoCByZW1wbGlyLlxuICAgICAgICAgICAgICAgICAgICAgICAgQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlNbbWVhc3VyZUNoaWxkcmVuW2pdLm5vZGVOYW1lXShtZWFzdXJlQ2hpbGRyZW5bal0sIG1lYXN1cmUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyZXVyIGRhbnMgbGEgbGVjdHVyZSBkZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlIDogbWVhc3VyZXMgYXR0ZW5kdWVzIG1haXMgYWJzZW50ZXNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxldmF0aW9uLm1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwiRXhjZXB0aW9uUmVwb3J0XCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSAtIG5vZXVkIMOgIGxpcmUgcG91ciByw6ljdXDDqXJlciBsJ2V4Y2VwdGlvblxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZXhjZXB0aW9uUmVwb3J0IC0gb2JqZXQgY29udGVuYW50IGwnZXhjZXB0aW9uXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJvZiBBbHRpUmVzcG9uc2VSZWFkZXJcbiAgICAgKi9cbiAgICBleGNlcHRpb25yZXBvcnQgOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgcmVzcG9uc2UgPSB7fTtcblxuICAgICAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgIHZhciBjaGlsZDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gXCJFeGNlcHRpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5leGNlcHRpb25SZXBvcnQgPSBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSUy5leGNlcHRpb24oY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwiRXhjZXB0aW9uXCIgZGUgbGEgcsOpcG9uc2UgeG1sIGR1IHNlcnZpY2UgYWx0aS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZSAtIG5vZXVkIMOgIGxpcmUgcG91ciByw6ljdXDDqXJlciBsJ2V4Y2VwdGlvblxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZXhjZXB0aW9uUmVwb3J0IC0gb2JqZXQgY29udGVuYW50IGwnZXhjZXB0aW9uLCBhdmVjIGRldXggYXR0cmlidXRzIDpcbiAgICAgKiAgICAgIHtTdHJpbmd9IGV4Y2VwdGlvblJlcG9ydC5leGNlcHRpb25Db2RlIC0gcXVpIGNvbnRpZW50IGwnaWRlbnRpZmlhbnQgZHUgY29kZSBkZSBsJ2V4Y2VwdGlvblxuICAgICAqICAgICAge1N0cmluZ30gZXhjZXB0aW9uUmVwb3J0LmV4Y2VwdGlvbiAtIHF1aSBjb250aWVudCBsZSBtZXNzYWdlIGRlIGwnZXhjZXB0aW9uXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJvZiBBbHRpUmVzcG9uc2VSZWFkZXJcbiAgICAgKi9cbiAgICBleGNlcHRpb24gOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgZXhjZXB0aW9uUmVwb3J0ID0ge307XG5cbiAgICAgICAgLy8gZ2V0IGV4Y2VwdGlvbiBjb2RlXG4gICAgICAgIHZhciBleGNlcHRpb25Db2RlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJleGNlcHRpb25Db2RlXCIpO1xuICAgICAgICBpZiAoZXhjZXB0aW9uQ29kZSkge1xuICAgICAgICAgICAgZXhjZXB0aW9uUmVwb3J0LmV4Y2VwdGlvbkNvZGUgPSBleGNlcHRpb25Db2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2V0IGV4Y2VwdGlvbiBtZXNzYWdlXG4gICAgICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKHRleHROb2RlICYmIHRleHROb2RlLm5vZGVUeXBlID09PSAzKSB7IC8vIDMgPT09IG5vZGUuVEVYVF9OT0RFXG4gICAgICAgICAgICBleGNlcHRpb25SZXBvcnQuZXhjZXB0aW9uID0gdGV4dE5vZGUubm9kZVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4Y2VwdGlvblJlcG9ydDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGVjdHVyZSBkJ3VuIG5vZXVkIFwiRXJyb3JcIiBkZSBsYSByw6lwb25zZSB4bWwgZHUgc2VydmljZSBhbHRpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIC0gbm9ldWQgw6AgbGlyZSBwb3VyIHLDqWN1cMOpcmVyIGwnZXhjZXB0aW9uXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBlcnJvciAtIG9iamV0IGNvbnRlbmFudCBsJ2V4Y2VwdGlvblxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBlcnJvciA6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgICAgIGVycm9yIDoge31cbiAgICAgICAgfTtcbiAgICAgICAgLy8gZ2V0IGVycm9yIGNvZGUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgdmFyIGNoaWxkO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgdmFyIHRleHROb2RlO1xuICAgICAgICAgICAgICAgIC8vIGdldCBlcnJvciBjb2RlXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmIGNoaWxkLm5vZGVOYW1lID09PSBcImNvZGVcIikgeyAvLyAxID09PSBub2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZSA9IGNoaWxkLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS5ub2RlVHlwZSA9PT0gMykgeyAvLyAzID09PSBub2RlLlRFWFRfTk9ERVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3IuY29kZSA9IHRleHROb2RlLm5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgZXJyb3IgZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEgJiYgY2hpbGQubm9kZU5hbWUgPT09IFwiZGVzY3JpcHRpb25cIikgeyAvLyAxID09PSBub2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZSA9IGNoaWxkLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS5ub2RlVHlwZSA9PT0gMykgeyAvLyAzID09PSBub2RlLlRFWFRfTk9ERVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3IuZGVzY3JpcHRpb24gPSB0ZXh0Tm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNw6l0aG9kZSBwZXJtZXR0YW50IGRlIGxhbmNlciBsYSBsZWN0dXJlIGQndW5lIHLDqXBvbnNlIFhNTCBkdSBzZXJ2aWNlIGFsdGltw6l0cmlxdWUsXG4gKiAgICAgIMOgIGwnYWlkZSBkZXMgcmVhZGVycyBkZSBsYSBjbGFzc2UuXG4gKlxuICogQG1ldGhvZCBBbHRpUmVzcG9uc2VSZWFkZXIucmVhZFxuICogQHBhcmFtIHtET01FbGVtZW50fSByb290IC0gcmFjaW5lIGRlIGxhIHLDqXBvbnNlIFhNTCDDoCBsaXJlXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyb2YgQWx0aVJlc3BvbnNlUmVhZGVyXG4gKi9cbkFsdGlSZXNwb25zZVJlYWRlci5yZWFkID0gZnVuY3Rpb24gKHJvb3QpIHtcbiAgICBpZiAocm9vdC5ub2RlTmFtZSA9PT0gXCJlbGV2YXRpb25zXCIpIHtcbiAgICAgICAgdmFyIGFsdGlSZXNwb25zZSA9IEFsdGlSZXNwb25zZVJlYWRlci5SRUFERVJTLmVsZXZhdGlvbnMocm9vdCk7XG4gICAgICAgIHJldHVybiBhbHRpUmVzcG9uc2U7XG4gICAgfSBlbHNlIGlmIChyb290Lm5vZGVOYW1lID09PSBcIkV4Y2VwdGlvblJlcG9ydFwiKSB7XG4gICAgICAgIHZhciBleGNlcHRpb25SZXBvcnQgPSBBbHRpUmVzcG9uc2VSZWFkZXIuUkVBREVSUy5leGNlcHRpb25yZXBvcnQocm9vdCk7XG4gICAgICAgIHJldHVybiBleGNlcHRpb25SZXBvcnQ7XG4gICAgfSBlbHNlIGlmIChyb290Lm5vZGVOYW1lID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGVycm9yID0gQWx0aVJlc3BvbnNlUmVhZGVyLlJFQURFUlMuZXJyb3Iocm9vdCk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlIGxhIHLDqXBvbnNlIDogZWxsZSBuJ2VzdCBwYXMgYXUgZm9ybWF0IGF0dGVuZHUuXCIpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFsdGlSZXNwb25zZVJlYWRlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Formats/AltiResponseReader.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Request/AltiRequestFactory.js": +/*!*********************************************************!*\ + !*** ./src/Services/Alti/Request/AltiRequestFactory.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _AltiRequestREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AltiRequestREST */ \"./src/Services/Alti/Request/AltiRequestREST.js\");\n/* harmony import */ var _AltiRequestWPS__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AltiRequestWPS */ \"./src/Services/Alti/Request/AltiRequestWPS.js\");\n/**\n * Creation d'une requête en REST ou WPS\n * (Factory)\n *\n * @module AltiRequestFactory\n * @alias Gp.Services.Alti.Request.AltiRequestFactory\n * @private\n */\n\n\n\n\nvar AltiRequestFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * scope : this,\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true\n * };\n *\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"AltiRequestFactory\");\n logger.trace([\"AltiRequestFactory::build()\"]);\n var request = null;\n\n // on factorise les options par groupe;\n // - global,\n // - param, les params pour les data inputs\n // - wps, les param du service\n // - callback\n\n var settings = {\n // ajout des valeurs par defaut spécifiques au service\n type: options.sampling ? \"Profil\" : \"Elevation\",\n method: options.httpMethod,\n param: {\n positions: null,\n delimiter: null,\n // FIXME par defaut, on ne le met pas en place car ça fait planter la requête !?\n indent: null,\n // par defaut\n crs: null,\n // par defaut\n format: null,\n // (only to POST)\n sampling: null,\n // (only use by Profil)\n zonly: null,\n // (only use by Elevation)\n measures: null // (only use by Elevation)\n }\n };\n\n // surcharge des valeurs obligatoires\n settings.param.positions = options.positions;\n settings.param.format = options.outputFormat;\n settings.param.sampling = options.sampling;\n settings.param.zonly = options.zonly;\n settings.param.measures = options.measures;\n settings.param.resource = options.resource;\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n var message = null;\n switch (options.api) {\n case \"REST\":\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new _AltiRequestREST__WEBPACK_IMPORTED_MODULE_2__[\"default\"](settings);\n if (!myReq.processRequestString()) {\n message = \"Error in process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__[\"default\"](message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n break;\n case \"WPS\":\n // ajout des valeurs par defaut spécifiques au service WPS\n settings.wps = {\n service: null,\n // par defaut\n version: null,\n // par defaut\n identifier: null,\n // par defaut\n rawdataoutput: null,\n // par defaut\n request: null // par defaut\n };\n request = _AltiRequestWPS__WEBPACK_IMPORTED_MODULE_3__[\"default\"].build(settings);\n if (!request) {\n message = \"Error in process request (wps) !\";\n if (bOnError) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__[\"default\"](message));\n return;\n }\n throw new Error(message);\n }\n break;\n default:\n message = \"Type of API is not supported by service (REST or WPS) !\";\n if (bOnError) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__[\"default\"](message));\n return;\n }\n throw new Error(message);\n }\n if (bOnSuccess) {\n options.onSuccess.call(options.scope, request);\n }\n return request;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiRequestFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvQWx0aVJlcXVlc3RGYWN0b3J5LmpzP2Q0MDMiXSwibmFtZXMiOlsiQWx0aVJlcXVlc3RGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJyZXF1ZXN0Iiwic2V0dGluZ3MiLCJ0eXBlIiwic2FtcGxpbmciLCJtZXRob2QiLCJodHRwTWV0aG9kIiwicGFyYW0iLCJwb3NpdGlvbnMiLCJkZWxpbWl0ZXIiLCJpbmRlbnQiLCJjcnMiLCJmb3JtYXQiLCJ6b25seSIsIm1lYXN1cmVzIiwib3V0cHV0Rm9ybWF0IiwicmVzb3VyY2UiLCJiT25FcnJvciIsIm9uRXJyb3IiLCJiT25TdWNjZXNzIiwib25TdWNjZXNzIiwibWVzc2FnZSIsImFwaSIsIm15UmVxIiwiQWx0aVJlcXVlc3RSRVNUIiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJjYWxsIiwic2NvcGUiLCJFcnJvclNlcnZpY2UiLCJFcnJvciIsInJlcXVlc3RTdHJpbmciLCJ3cHMiLCJzZXJ2aWNlIiwidmVyc2lvbiIsImlkZW50aWZpZXIiLCJyYXdkYXRhb3V0cHV0IiwiQWx0aVJlcXVlc3RXUFMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ29EO0FBQ1E7QUFDWjtBQUNGO0FBRTlDLElBQUlBLGtCQUFrQixHQUFHO0VBRXJCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxLQUFLLEVBQUcsU0FBUkEsS0FBS0EsQ0FBYUMsT0FBTyxFQUFFO0lBQ3ZCO0lBQ0EsSUFBSUMsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENB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QixPQUFPLENBQUNRLElBQUksQ0FBQzlCLE9BQU8sQ0FBQytCLEtBQUssRUFBRSxJQUFJQyxnRUFBWSxDQUFDUCxPQUFPLENBQUMsQ0FBQztZQUM5RDtVQUNKO1VBQ0EsTUFBTSxJQUFJUSxLQUFLLENBQUNSLE9BQU8sQ0FBQztRQUM1QjtRQUNBO01BQ0o7UUFDSUEsT0FBTyxHQUFHLHlEQUF5RDtRQUNuRSxJQUFJSixRQUFRLEVBQUU7VUFDVnJCLE9BQU8sQ0FBQ3NCLE9BQU8sQ0FBQ1EsSUFBSSxDQUFDOUIsT0FBTyxDQUFDK0IsS0FBSyxFQUFFLElBQUlDLGdFQUFZLENBQUNQLE9BQU8sQ0FBQyxDQUFDO1VBQzlEO1FBQ0o7UUFDQSxNQUFNLElBQUlRLEtBQUssQ0FBQ1IsT0FBTyxDQUFDO0lBQ2hDO0lBRUEsSUFBSUYsVUFBVSxFQUFFO01BQ1p2QixPQUFPLENBQUN3QixTQUFTLENBQUNNLElBQUksQ0FBQzlCLE9BQU8sQ0FBQytCLEtBQUssRUFBRTFCLE9BQU8sQ0FBQztJQUNsRDtJQUVBLE9BQU9BLE9BQU87RUFDbEI7QUFDSixDQUFDO0FBRWNQLGlGQUFrQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvQWx0aVJlcXVlc3RGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGlvbiBkJ3VuZSByZXF1w6p0ZSBlbiBSRVNUIG91IFdQU1xuICogKEZhY3RvcnkpXG4gKlxuICogQG1vZHVsZSBBbHRpUmVxdWVzdEZhY3RvcnlcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5BbHRpLlJlcXVlc3QuQWx0aVJlcXVlc3RGYWN0b3J5XG4gKiBAcHJpdmF0ZVxuICovXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uLy4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgQWx0aVJlcXVlc3RSRVNUIGZyb20gXCIuL0FsdGlSZXF1ZXN0UkVTVFwiO1xuaW1wb3J0IEFsdGlSZXF1ZXN0V1BTIGZyb20gXCIuL0FsdGlSZXF1ZXN0V1BTXCI7XG5cbnZhciBBbHRpUmVxdWVzdEZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBBbHRpXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICogICAgICBodHRwTWV0aG9kIDogJ0dFVCcsIC8vIEdFVHxQT1NUXG4gICAgICogICAgICBvblN1Y2Nlc3MgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHt9LFxuICAgICAqICAgICAgb25FcnJvciA6IGZ1bmN0aW9uIChlcnJvcikge30sXG4gICAgICogICAgICBzY29wZSA6IHRoaXMsXG4gICAgICogICAgICBwb3NpdGlvbnMgOiBbe2xvbjosIGxhdDp9LCB7bG9uOiwgbGF0On1dLFxuICAgICAqICAgICAgb3V0cHV0Rm9ybWF0IDogJ2pzb24nIC8vIGpzb258eG1sXG4gICAgICogICAgICBzYW1wbGluZyA6IDMsXG4gICAgICogICAgICBhcGkgOiAnUkVTVCcsIC8vIFJFU1R8V1BTXG4gICAgICogICAgICB6b25seSA6IGZhbHNlIC8vIGZhbHNlfHRydWVcbiAgICAgKiAgIH07XG4gICAgICpcbiAgICAgKi9cbiAgICBidWlsZCA6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIGxvZ2dlclxuICAgICAgICB2YXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIkFsdGlSZXF1ZXN0RmFjdG9yeVwiKTtcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFtcIkFsdGlSZXF1ZXN0RmFjdG9yeTo6YnVpbGQoKVwiXSk7XG5cbiAgICAgICAgdmFyIHJlcXVlc3QgPSBudWxsO1xuXG4gICAgICAgIC8vIG9uIGZhY3RvcmlzZSBsZXMgb3B0aW9ucyBwYXIgZ3JvdXBlO1xuICAgICAgICAvLyAtIGdsb2JhbCxcbiAgICAgICAgLy8gLSBwYXJhbSwgbGVzIHBhcmFtcyBwb3VyIGxlcyBkYXRhIGlucHV0c1xuICAgICAgICAvLyAtIHdwcywgbGVzIHBhcmFtIGR1IHNlcnZpY2VcbiAgICAgICAgLy8gLSBjYWxsYmFja1xuXG4gICAgICAgIHZhciBzZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIC8vIGFqb3V0IGRlcyB2YWxldXJzIHBhciBkZWZhdXQgc3DDqWNpZmlxdWVzIGF1IHNlcnZpY2VcbiAgICAgICAgICAgIHR5cGUgOiBvcHRpb25zLnNhbXBsaW5nID8gXCJQcm9maWxcIiA6IFwiRWxldmF0aW9uXCIsXG4gICAgICAgICAgICBtZXRob2QgOiBvcHRpb25zLmh0dHBNZXRob2QsXG4gICAgICAgICAgICBwYXJhbSA6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMgOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlbGltaXRlciA6IG51bGwsIC8vIEZJWE1FIHBhciBkZWZhdXQsIG9uIG5lIGxlIG1ldCBwYXMgZW4gcGxhY2UgY2FyIMOnYSBmYWl0IHBsYW50ZXIgbGEgcmVxdcOqdGUgIT9cbiAgICAgICAgICAgICAgICBpbmRlbnQgOiBudWxsLCAvLyBwYXIgZGVmYXV0XG4gICAgICAgICAgICAgICAgY3JzIDogbnVsbCwgLy8gcGFyIGRlZmF1dFxuICAgICAgICAgICAgICAgIGZvcm1hdCA6IG51bGwsIC8vIChvbmx5IHRvIFBPU1QpXG4gICAgICAgICAgICAgICAgc2FtcGxpbmcgOiBudWxsLCAvLyAob25seSB1c2UgYnkgUHJvZmlsKVxuICAgICAgICAgICAgICAgIHpvbmx5IDogbnVsbCwgLy8gKG9ubHkgdXNlIGJ5IEVsZXZhdGlvbilcbiAgICAgICAgICAgICAgICBtZWFzdXJlcyA6IG51bGwgLy8gKG9ubHkgdXNlIGJ5IEVsZXZhdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzdXJjaGFyZ2UgZGVzIHZhbGV1cnMgb2JsaWdhdG9pcmVzXG4gICAgICAgIHNldHRpbmdzLnBhcmFtLnBvc2l0aW9ucyA9IG9wdGlvbnMucG9zaXRpb25zO1xuICAgICAgICBzZXR0aW5ncy5wYXJhbS5mb3JtYXQgPSBvcHRpb25zLm91dHB1dEZvcm1hdDtcbiAgICAgICAgc2V0dGluZ3MucGFyYW0uc2FtcGxpbmcgPSBvcHRpb25zLnNhbXBsaW5nO1xuICAgICAgICBzZXR0aW5ncy5wYXJhbS56b25seSA9IG9wdGlvbnMuem9ubHk7XG4gICAgICAgIHNldHRpbmdzLnBhcmFtLm1lYXN1cmVzID0gb3B0aW9ucy5tZWFzdXJlcztcbiAgICAgICAgc2V0dGluZ3MucGFyYW0ucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlO1xuXG4gICAgICAgIC8vIGdlc3Rpb24gZGVzIGNhbGxiYWNrXG4gICAgICAgIHZhciBiT25FcnJvciA9ICEhKG9wdGlvbnMub25FcnJvciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9ucy5vbkVycm9yID09PSBcImZ1bmN0aW9uXCIpOyAvLyBjYXN0IHZhcmlhYmxlIHRvIGJvb2xlYW5cbiAgICAgICAgdmFyIGJPblN1Y2Nlc3MgPSAhIShvcHRpb25zLm9uU3VjY2VzcyAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9ucy5vblN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIik7XG5cbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuYXBpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUkVTVFwiOlxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIGxlcyBleGNlcHRpb25zIG5lIHNvbnQgcGFzICdjYXRjaMOpZXMnIHN1ciBsZSBjb25zdHJ1Y3RldXIgIVxuICAgICAgICAgICAgICAgIHZhciBteVJlcSA9IG5ldyBBbHRpUmVxdWVzdFJFU1Qoc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIGlmICghbXlSZXEucHJvY2Vzc1JlcXVlc3RTdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJFcnJvciBpbiBwcm9jZXNzIHJlcXVlc3QgKHJlc3QpICFcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKG1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBteVJlcS5yZXF1ZXN0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIldQU1wiOlxuICAgICAgICAgICAgICAgIC8vIGFqb3V0IGRlcyB2YWxldXJzIHBhciBkZWZhdXQgc3DDqWNpZmlxdWVzIGF1IHNlcnZpY2UgV1BTXG4gICAgICAgICAgICAgICAgc2V0dGluZ3Mud3BzID0ge1xuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIDogbnVsbCwgLy8gcGFyIGRlZmF1dFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIDogbnVsbCwgLy8gcGFyIGRlZmF1dFxuICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIDogbnVsbCwgLy8gcGFyIGRlZmF1dFxuICAgICAgICAgICAgICAgICAgICByYXdkYXRhb3V0cHV0IDogbnVsbCwgLy8gcGFyIGRlZmF1dFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IDogbnVsbCAvLyBwYXIgZGVmYXV0XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBBbHRpUmVxdWVzdFdQUy5idWlsZChzZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkVycm9yIGluIHByb2Nlc3MgcmVxdWVzdCAod3BzKSAhXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZShtZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiVHlwZSBvZiBBUEkgaXMgbm90IHN1cHBvcnRlZCBieSBzZXJ2aWNlIChSRVNUIG9yIFdQUykgIVwiO1xuICAgICAgICAgICAgICAgIGlmIChiT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKG1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYk9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb3B0aW9ucy5vblN1Y2Nlc3MuY2FsbChvcHRpb25zLnNjb3BlLCByZXF1ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFsdGlSZXF1ZXN0RmFjdG9yeTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Request/AltiRequestFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Request/AltiRequestREST.js": +/*!******************************************************!*\ + !*** ./src/Services/Alti/Request/AltiRequestREST.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _model_AltiElevationRequest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./model/AltiElevationRequest */ \"./src/Services/Alti/Request/model/AltiElevationRequest.js\");\n/* harmony import */ var _model_AltiProfilRequest__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./model/AltiProfilRequest */ \"./src/Services/Alti/Request/model/AltiProfilRequest.js\");\n/* jshint multistr : true */\n\n\n\n\n\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service altimetrique.\n *\n * @todo Le service Alti n'implemente pas le POST !?\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequestREST\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {String} options.param.resource - 'rge_alti_corse2a_float32_zip_lamb93'\n * @param {Boolean} options.param.zonly - false|true\n * @param {Boolean} options.param.measures - false|true\n * @param {String} options.param.format - \"JSON|XML\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n *\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false // par defaut (only use by Elevation)\n * measures : false // par defaut (only use by Elevation)\n * }\n * };\n *\n * var result;\n * try {\n * var obj = new AltiRequestREST (options);\n * if (! obj.processRequestString ()) {\n * throw new Error(\"Request empty !?\")\n * }\n * result = obj.requestString;\n * } catch (e) {\n * // exceptions...\n * }\n * @private\n */\nfunction AltiRequestREST(options) {\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"AltiRequestREST\");\n this.logger.trace(\"[Constructeur AltiRequestREST ()]\");\n if (!(this instanceof AltiRequestREST)) {\n throw new TypeError(\"AltiRequestREST constructor cannot be called as a function.\");\n }\n this.options = options || {};\n\n // existance des options\n if (!this.options) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!this.options.type) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n this.DataObject = null;\n switch (this.options.type) {\n case \"Elevation\":\n this.DataObject = new _model_AltiElevationRequest__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.options.param);\n break;\n case \"Profil\":\n this.DataObject = new _model_AltiProfilRequest__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this.options.param);\n break;\n default:\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\nAltiRequestREST.prototype = {\n /**\n * request\n * @type {String}\n */\n requestString: null,\n /**\n * Constructeur (alias)\n */\n constructor: AltiRequestREST,\n /**\n * Template de la requête.\n */\n template: {\n get: {\n // FIXME on retire le param 'delimiter' : &delimiter='__DELIMITER__'\n value: \"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__\",\n input: {\n point: \"&zonly=__ZONLY__\",\n profil: \"&sampling=__SAMPLING__\"\n }\n },\n post: {\n // FIXME on retire le param 'delimiter' : delimiter='__DELIMITER__'\\n\\\n value: \"lon=__LON__\\n\" + \"lat=__LAT__\\n\" + \"indent=__INDENT__\\n\" + \"crs='__CRS__'\\n\" + \"resource='__RESOURCE__'\\n\" + \"measures='__MEASURES__'\\n\",\n input: {\n point: \"zonly=__ZONLY__\\n\",\n profil: \"sampling=__SAMPLING__\"\n }\n }\n },\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,&indent=true&zonly=true&crs='CRS:84'\n * // POST out : Not yet supported method POST !\n * @returns {String}\n */\n processRequestString: function processRequestString() {\n this.logger.trace(\"AltiRequestREST::processRequestString ()\");\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n }\n template = template.replace(/__LON__/g, this.DataObject.getLon());\n template = template.replace(/__LAT__/g, this.DataObject.getLat());\n // FIXME on retire le param 'delimiter'\n // template = template.replace(/__DELIMITER__/g, this.DataObject.delimiter);\n template = template.replace(/__INDENT__/g, this.DataObject.indent);\n template = template.replace(/__CRS__/g, this.DataObject.crs);\n template = template.replace(/__RESOURCE__/g, this.DataObject.resource);\n template = template.replace(/__MEASURES__/g, this.DataObject.measures);\n\n // ajout +\n template = template + this.__addDataInputs();\n this.logger.trace(\"traduction tmpl\", template);\n\n // sauvegarde\n this.requestString = template;\n return this.requestString;\n },\n /**\n * Ajout de parametres spécifiques (ex. zonly)\n *\n * @returns {String}\n */\n __addDataInputs: function __addDataInputs() {\n this.logger.trace(\"AltiRequestREST::addDataInput ()\");\n var myTemplate;\n if (this.method === \"POST\") {\n myTemplate = this.template.post;\n } else if (this.method === \"GET\") {\n myTemplate = this.template.get;\n } else {\n throw new Error(\"No other HTTP method supported by the service !\");\n }\n var tmpl = null;\n if (this.DataObject.CLASSNAME === \"AltiElevationRequest\") {\n tmpl = myTemplate.input.point;\n return tmpl.replace(/__ZONLY__/g, this.DataObject.zonly.toString());\n } else if (this.DataObject.CLASSNAME === \"AltiProfilRequest\") {\n tmpl = myTemplate.input.profil;\n return tmpl.replace(/__SAMPLING__/g, this.DataObject.sampling);\n } else {\n throw new Error(\"No other object supported than elevation or profil !?\");\n }\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiRequestREST);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvQWx0aVJlcXVlc3RSRVNULmpzPzY2YjkiXSwibmFtZXMiOlsiQWx0aVJlcXVlc3RSRVNUIiwib3B0aW9ucyIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwiVHlwZUVycm9yIiwiRXJyb3IiLCJfIiwiZ2V0TWVzc2FnZSIsInR5cGUiLCJEYXRhT2JqZWN0IiwiQWx0aUVsZXZhdGlvblJlcXVlc3QiLCJwYXJhbSIsIkFsdGlQcm9maWxSZXF1ZXN0IiwibWV0aG9kIiwicHJvdG90eXBlIiwicmVxdWVzdFN0cmluZyIsImNvbnN0cnVjdG9yIiwidGVtcGxhdGUiLCJnZXQiLCJ2YWx1ZSIsImlucHV0IiwicG9pbnQiLCJwcm9maWwiLCJwb3N0IiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJyZXBsYWNlIiwiZ2V0TG9uIiwiZ2V0TGF0IiwiaW5kZW50IiwiY3JzIiwicmVzb3VyY2UiLCJtZWFzdXJlcyIsIl9fYWRkRGF0YUlucHV0cyIsIm15VGVtcGxhdGUiLCJ0bXBsIiwiQ0xBU1NOQU1FIiwiem9ubHkiLCJ0b1N0cmluZyIsInNhbXBsaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRW9EO0FBQ0g7QUFDZTtBQUNOOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLGVBQWVBLENBQUVD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QUcsSUFBSSxDQUFDaEIsUUFBUSxDQUFDTSxJQUFJO0lBQ25DLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ1YsTUFBTSxLQUFLLEtBQUssRUFBRTtNQUM5Qm9CLFVBQVUsR0FBRyxJQUFJLENBQUNoQixRQUFRLENBQUNDLEdBQUc7SUFDbEMsQ0FBQyxNQUFNO01BQ0gsTUFBTSxJQUFJYixLQUFLLENBQUMsaURBQWlELENBQUM7SUFDdEU7SUFFQSxJQUFJNkIsSUFBSSxHQUFHLElBQUk7SUFDZixJQUFJLElBQUksQ0FBQ3pCLFVBQVUsQ0FBQzBCLFNBQVMsS0FBSyxzQkFBc0IsRUFBRTtNQUN0REQsSUFBSSxHQUFHRCxVQUFVLENBQUNiLEtBQUssQ0FBQ0MsS0FBSztNQUM3QixPQUFPYSxJQUFJLENBQUNULE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDaEIsVUFBVSxDQUFDMkIsS0FBSyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQzVCLFVBQVUsQ0FBQzBCLFNBQVMsS0FBSyxtQkFBbUIsRUFBRTtNQUMxREQsSUFBSSxHQUFHRCxVQUFVLENBQUNiLEtBQUssQ0FBQ0UsTUFBTTtNQUM5QixPQUFPWSxJQUFJLENBQUNULE9BQU8sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDaEIsVUFBVSxDQUFDNkIsUUFBUSxDQUFDO0lBQ2xFLENBQUMsTUFBTTtNQUNILE1BQU0sSUFBSWpDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQztJQUM1RTtFQUNKO0FBQ0osQ0FBQztBQUVjUCw4RUFBZSIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvQWx0aVJlcXVlc3RSRVNULmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoganNoaW50IG11bHRpc3RyIDogdHJ1ZSAqL1xuXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBfIGZyb20gXCIuLi8uLi8uLi9VdGlscy9NZXNzYWdlc1Jlc291cmNlc1wiO1xuaW1wb3J0IEFsdGlFbGV2YXRpb25SZXF1ZXN0IGZyb20gXCIuL21vZGVsL0FsdGlFbGV2YXRpb25SZXF1ZXN0XCI7XG5pbXBvcnQgQWx0aVByb2ZpbFJlcXVlc3QgZnJvbSBcIi4vbW9kZWwvQWx0aVByb2ZpbFJlcXVlc3RcIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBDbGFzc2UgZGUgZ2VzdGlvbiBkZXMgcmVxdcOqdGVzIGRlIHR5cGUgUkVTVCBzdXIgbGUgc2VydmljZSBhbHRpbWV0cmlxdWUuXG4gKlxuICogQHRvZG8gTGUgc2VydmljZSBBbHRpIG4naW1wbGVtZW50ZSBwYXMgbGUgUE9TVCAhP1xuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuQWx0aS5SZXF1ZXN0LkFsdGlSZXF1ZXN0UkVTVFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gICBvcHRpb25zLnBhcmFtLnBvc2l0aW9ucyAtIHRhYmxlYXUgZGUgY29vcmRvbm7DqWVzIGxvbi9sYXRcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMucGFyYW0uZGVsaW1pdGVyIC0gJ3wnXG4gKiBAcGFyYW0ge0Jvb2xlYW59ICBvcHRpb25zLnBhcmFtLmluZGVudCAtIGZhbHNlfHRydWVcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMucGFyYW0uY3JzIC0gJ0NSUzo4NCdcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMucGFyYW0uc2FtcGxpbmcgLSAzXG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLnBhcmFtLnJlc291cmNlIC0gJ3JnZV9hbHRpX2NvcnNlMmFfZmxvYXQzMl96aXBfbGFtYjkzJ1xuICogQHBhcmFtIHtCb29sZWFufSAgb3B0aW9ucy5wYXJhbS56b25seSAtIGZhbHNlfHRydWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIG9wdGlvbnMucGFyYW0ubWVhc3VyZXMgLSBmYWxzZXx0cnVlXG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLnBhcmFtLmZvcm1hdCAtIFwiSlNPTnxYTUxcIlxuICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy50eXBlIC0gXCJQcm9maWx8RWxldmF0aW9uXCJcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMubWV0aG9kIC0gR0VUfFBPU1RcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgICB2YXIgb3B0aW9ucyA9IHtcbiAqICAgICAgICAgICB0eXBlIDogJ1Byb2ZpbCcsIC8vIEVsZXZhdGlvblxuICogICAgICAgICAgIG1ldGhvZCA6ICdHRVQnLCAgLy8gcGFyIGRlZmF1dFxuICogICAgICAgICAgIHBhcmFtIDoge1xuICogICAgICAgICAgICAgICBwb3NpdGlvbnMgOiBbXG4gKiAgICAgICAgICAgICAgICAgICB7bG9uOicxLjExJywgbGF0OicxLjExJ30sXG4gKiAgICAgICAgICAgICAgICAgICB7bG9uOicxLjEwJywgbGF0OicxLjEwJ30sXG4gKiAgICAgICAgICAgICAgICAgICB7bG9uOicxLjEyJywgbGF0OicxLjEyJ31cbiAqICAgICAgICAgICAgICAgXSxcbiAqICAgICAgICAgICAgICAgZGVsaW1pdGVyIDogXCI7XCIsICAgICAgICAgLy8gcGFyIGRlZmF1dFxuICogICAgICAgICAgICAgICBpbmRlbnQgICAgOiB0cnVlLCAgICAgICAgLy8gcGFyIGRlZmF1dFxuICogICAgICAgICAgICAgICBjcnMgICAgICAgOiAnRVBTRzo0MzI2JywgLy8gcGFyIGRlZmF1dFxuICogICAgICAgICAgICAgICBmb3JtYXQgICAgOiAnanNvbicsICAgICAgLy8gcGFyIGRlZmF1dCAob25seSB0byBQT1NUKVxuICogICAgICAgICAgICAgICBzYW1wbGluZyAgOiAzICwgICAgICAgICAgLy8gcGFyIGRlZmF1dCAob25seSB1c2UgYnkgUHJvZmlsKVxuICogICAgICAgICAgICAgICB6b25seSAgICAgOiBmYWxzZSAgICAgICAgLy8gcGFyIGRlZmF1dCAob25seSB1c2UgYnkgRWxldmF0aW9uKVxuICogICAgICAgICAgICAgICBtZWFzdXJlcyAgOiBmYWxzZSAgICAgICAgLy8gcGFyIGRlZmF1dCAob25seSB1c2UgYnkgRWxldmF0aW9uKVxuICogICAgICAgICAgIH1cbiAqICAgICAgfTtcbiAqXG4gKiAgICAgIHZhciByZXN1bHQ7XG4gKiAgICAgIHRyeSB7XG4gKiAgICAgICAgICB2YXIgb2JqID0gbmV3IEFsdGlSZXF1ZXN0UkVTVCAob3B0aW9ucyk7XG4gKiAgICAgICAgICBpZiAoISBvYmoucHJvY2Vzc1JlcXVlc3RTdHJpbmcgKCkpIHtcbiAqICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0IGVtcHR5ICE/XCIpXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgICByZXN1bHQgPSBvYmoucmVxdWVzdFN0cmluZztcbiAqICAgICAgfSBjYXRjaCAoZSkge1xuICogICAgICAgICAgLy8gZXhjZXB0aW9ucy4uLlxuICogICAgICB9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBBbHRpUmVxdWVzdFJFU1QgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJBbHRpUmVxdWVzdFJFU1RcIik7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIEFsdGlSZXF1ZXN0UkVTVCAoKV1cIik7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWx0aVJlcXVlc3RSRVNUKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWx0aVJlcXVlc3RSRVNUIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIGV4aXN0YW5jZSBkZXMgb3B0aW9uc1xuICAgIGlmICghdGhpcy5vcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9FTVBUWVwiLCBcIm9wdGlvbnNcIikpO1xuICAgIH1cblxuICAgIC8vIHR5cGUgZGUgcmVxdWV0ZSA6IEFsdGl0dWRlIG91IFByb2ZpbFxuICAgIC8vIChwYXJhbS4gw6AgZGV0ZXJtaW5lciBlbiBmb25jdGlvbiBkZXMgcGFyYW1ldHJlcyBkJ2VudHLDqWUpXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fRU1QVFlcIiwgXCJ0eXBlIChFbGV2YXRpb24gb3IgUHJvZmlsKVwiKSk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0aW9uIGR1IG1vZGVsZSBkZSByZXF1w6p0ZVxuICAgIC8vICh0ZXN0IGR1IHR5cGUgZCdvYmpldCBjYW5kaWRhdClcbiAgICB0aGlzLkRhdGFPYmplY3QgPSBudWxsO1xuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkVsZXZhdGlvblwiOlxuICAgICAgICAgICAgdGhpcy5EYXRhT2JqZWN0ID0gbmV3IEFsdGlFbGV2YXRpb25SZXF1ZXN0KHRoaXMub3B0aW9ucy5wYXJhbSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlByb2ZpbFwiOlxuICAgICAgICAgICAgdGhpcy5EYXRhT2JqZWN0ID0gbmV3IEFsdGlQcm9maWxSZXF1ZXN0KHRoaXMub3B0aW9ucy5wYXJhbSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9UWVBFXCIsIFwidHlwZSAoRWxldmF0aW9uIG9yIFByb2ZpbClcIikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1ldGhvZGUuXG4gICAgICogUGFyIGRlZmF1dCwgXCJHRVRcIi5cbiAgICAgKi9cbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIjtcbn1cblxuQWx0aVJlcXVlc3RSRVNULnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIHJlcXVlc3RcbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHJlcXVlc3RTdHJpbmcgOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciA6IEFsdGlSZXF1ZXN0UkVTVCxcblxuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlIGRlIGxhIHJlcXXDqnRlLlxuICAgICAqL1xuICAgIHRlbXBsYXRlIDoge1xuICAgICAgICBnZXQgOiB7XG4gICAgICAgICAgICAvLyBGSVhNRSBvbiByZXRpcmUgbGUgcGFyYW0gJ2RlbGltaXRlcicgOiAmZGVsaW1pdGVyPSdfX0RFTElNSVRFUl9fJ1xuICAgICAgICAgICAgdmFsdWUgOiBcImxvbj1fX0xPTl9fJmxhdD1fX0xBVF9fJmluZGVudD1fX0lOREVOVF9fJmNycz0nX19DUlNfXycmcmVzb3VyY2U9X19SRVNPVVJDRV9fJm1lYXN1cmVzPV9fTUVBU1VSRVNfX1wiLFxuICAgICAgICAgICAgaW5wdXQgOiB7XG4gICAgICAgICAgICAgICAgcG9pbnQgOiBcIiZ6b25seT1fX1pPTkxZX19cIixcbiAgICAgICAgICAgICAgICBwcm9maWwgOiBcIiZzYW1wbGluZz1fX1NBTVBMSU5HX19cIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwb3N0IDoge1xuICAgICAgICAgICAgLy8gRklYTUUgb24gcmV0aXJlIGxlIHBhcmFtICdkZWxpbWl0ZXInIDogZGVsaW1pdGVyPSdfX0RFTElNSVRFUl9fJ1xcblxcXG4gICAgICAgICAgICB2YWx1ZSA6IFwibG9uPV9fTE9OX19cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJsYXQ9X19MQVRfX1xcblwiICtcbiAgICAgICAgICAgICAgICBcImluZGVudD1fX0lOREVOVF9fXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiY3JzPSdfX0NSU19fJ1xcblwiICtcbiAgICAgICAgICAgICAgICBcInJlc291cmNlPSdfX1JFU09VUkNFX18nXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwibWVhc3VyZXM9J19fTUVBU1VSRVNfXydcXG5cIixcbiAgICAgICAgICAgIGlucHV0IDoge1xuICAgICAgICAgICAgICAgIHBvaW50IDogXCJ6b25seT1fX1pPTkxZX19cXG5cIixcbiAgICAgICAgICAgICAgICBwcm9maWwgOiBcInNhbXBsaW5nPV9fU0FNUExJTkdfX1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0aW9uIGRlIGxhIHJlcXXDqnRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHRVQgIG91dCA6IGxvbj0wLjIzNjcsMi4xNTcwJmxhdD00OC4wNTUxLDQ2LjYwNzcmZGVsaW1pdGVyPSwmaW5kZW50PXRydWUmem9ubHk9dHJ1ZSZjcnM9J0NSUzo4NCdcbiAgICAgKiAvLyBQT1NUIG91dCA6IE5vdCB5ZXQgc3VwcG9ydGVkIG1ldGhvZCBQT1NUICFcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuICAgIHByb2Nlc3NSZXF1ZXN0U3RyaW5nIDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkFsdGlSZXF1ZXN0UkVTVDo6cHJvY2Vzc1JlcXVlc3RTdHJpbmcgKClcIik7XG5cbiAgICAgICAgdmFyIHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIlBPU1RcIikge1xuICAgICAgICAgICAgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlLnBvc3QudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZS5nZXQudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoL19fTE9OX18vZywgdGhpcy5EYXRhT2JqZWN0LmdldExvbigpKTtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9fX0xBVF9fL2csIHRoaXMuRGF0YU9iamVjdC5nZXRMYXQoKSk7XG4gICAgICAgIC8vIEZJWE1FIG9uIHJldGlyZSBsZSBwYXJhbSAnZGVsaW1pdGVyJ1xuICAgICAgICAvLyB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoL19fREVMSU1JVEVSX18vZywgdGhpcy5EYXRhT2JqZWN0LmRlbGltaXRlcik7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgvX19JTkRFTlRfXy9nLCB0aGlzLkRhdGFPYmplY3QuaW5kZW50KTtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9fX0NSU19fL2csIHRoaXMuRGF0YU9iamVjdC5jcnMpO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoL19fUkVTT1VSQ0VfXy9nLCB0aGlzLkRhdGFPYmplY3QucmVzb3VyY2UpO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoL19fTUVBU1VSRVNfXy9nLCB0aGlzLkRhdGFPYmplY3QubWVhc3VyZXMpO1xuXG4gICAgICAgIC8vIGFqb3V0ICtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArIHRoaXMuX19hZGREYXRhSW5wdXRzKCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwidHJhZHVjdGlvbiB0bXBsXCIsIHRlbXBsYXRlKTtcblxuICAgICAgICAvLyBzYXV2ZWdhcmRlXG4gICAgICAgIHRoaXMucmVxdWVzdFN0cmluZyA9IHRlbXBsYXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RTdHJpbmc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFqb3V0IGRlIHBhcmFtZXRyZXMgc3DDqWNpZmlxdWVzIChleC4gem9ubHkpXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuICAgIF9fYWRkRGF0YUlucHV0cyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJBbHRpUmVxdWVzdFJFU1Q6OmFkZERhdGFJbnB1dCAoKVwiKTtcblxuICAgICAgICB2YXIgbXlUZW1wbGF0ZTtcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIlBPU1RcIikge1xuICAgICAgICAgICAgbXlUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUucG9zdDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgbXlUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUuZ2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gb3RoZXIgSFRUUCBtZXRob2Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2aWNlICFcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG1wbCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLkRhdGFPYmplY3QuQ0xBU1NOQU1FID09PSBcIkFsdGlFbGV2YXRpb25SZXF1ZXN0XCIpIHtcbiAgICAgICAgICAgIHRtcGwgPSBteVRlbXBsYXRlLmlucHV0LnBvaW50O1xuICAgICAgICAgICAgcmV0dXJuIHRtcGwucmVwbGFjZSgvX19aT05MWV9fL2csIHRoaXMuRGF0YU9iamVjdC56b25seS50b1N0cmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLkRhdGFPYmplY3QuQ0xBU1NOQU1FID09PSBcIkFsdGlQcm9maWxSZXF1ZXN0XCIpIHtcbiAgICAgICAgICAgIHRtcGwgPSBteVRlbXBsYXRlLmlucHV0LnByb2ZpbDtcbiAgICAgICAgICAgIHJldHVybiB0bXBsLnJlcGxhY2UoL19fU0FNUExJTkdfXy9nLCB0aGlzLkRhdGFPYmplY3Quc2FtcGxpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gb3RoZXIgb2JqZWN0IHN1cHBvcnRlZCB0aGFuIGVsZXZhdGlvbiBvciBwcm9maWwgIT9cIik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBbHRpUmVxdWVzdFJFU1Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Alti/Request/AltiRequestREST.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Request/AltiRequestWPS.js": +/*!*****************************************************!*\ + !*** ./src/Services/Alti/Request/AltiRequestWPS.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Formats_WPS__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../Formats/WPS */ \"./src/Formats/WPS.js\");\n/* harmony import */ var _model_AltiElevationRequest__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./model/AltiElevationRequest */ \"./src/Services/Alti/Request/model/AltiElevationRequest.js\");\n/* harmony import */ var _model_AltiProfilRequest__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./model/AltiProfilRequest */ \"./src/Services/Alti/Request/model/AltiProfilRequest.js\");\n/**\n * Classe d'interface des requêtes de type WPS sur le service altimetrique.\n * (Factory)\n *\n * @module Gp.Services.Alti.Request.AltiRequestWPS\n * @alias Gp.Services.Alti.Request.AltiRequestWPS\n * @private\n */\n\n\n\n\n\nvar AltiRequestWPS = {\n /**\n * Interface unique de construction de la requête.\n *\n * @method build\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {Boolean} options.param.zonly - false|true\n * @param {String} options.param.format - \"JSON|XML\" (only to POST)\n * @param {String} options.wps.service - \"WPS\"\n * @param {String} options.wps.version - \"1.0.0\"\n * @param {String} options.wps.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.wps.rawdataoutput - \"result\"\n * @param {String} options.wps.request - \"Execute\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false, // par defaut (only use by Elevation)\n * },\n * wps : {\n * service : 'WPS', // par defaut\n * version : '1.0.0', // par defaut\n * identifier : 'gs:WPS', // par defaut, Elevation = gs:WPSElevation, Profil = gs:WPSLineElevation\n * rawdataoutput : 'result',// par defaut\n * request : 'Execute' // par defaut\n * }\n * };\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"AltiRequestWPS\");\n logger.trace([\"AltiRequestWPS::build()\"]);\n\n // existance des options\n if (!options) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!options.type) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n var DataObject = null;\n switch (options.type) {\n case \"Elevation\":\n // surcharge\n options.wps.identifier = \"gs:WPSElevation\";\n DataObject = new _model_AltiElevationRequest__WEBPACK_IMPORTED_MODULE_3__[\"default\"](options.param);\n break;\n case \"Profil\":\n // surcharge\n options.wps.identifier = \"gs:WPSLineElevation\";\n DataObject = new _model_AltiProfilRequest__WEBPACK_IMPORTED_MODULE_4__[\"default\"](options.param);\n break;\n default:\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n // construction de la requête WPS\n var settings = {\n data: DataObject,\n method: options.method,\n param: options.wps\n };\n var rqstWPS = new _Formats_WPS__WEBPACK_IMPORTED_MODULE_2__[\"default\"](settings);\n if (!rqstWPS.processRequestString()) {\n throw new Error(\"Enable to process request !\");\n }\n return rqstWPS.requestString;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiRequestWPS);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvQWx0aVJlcXVlc3RXUFMuanM/ZGU1MiJdLCJuYW1lcyI6WyJBbHRpUmVxdWVzdFdQUyIsImJ1aWxkIiwib3B0aW9ucyIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwiRXJyb3IiLCJfIiwiZ2V0TWVzc2FnZSIsInR5cGUiLCJEYXRhT2JqZWN0Iiwid3BzIiwiaWRlbnRpZmllciIsIkFsdGlFbGV2YXRpb25SZXF1ZXN0IiwicGFyYW0iLCJBbHRpUHJvZmlsUmVxdWVzdCIsInNldHRpbmdzIiwiZGF0YSIsIm1ldGhvZCIsInJxc3RXUFMiLCJXUFMiLCJwcm9jZXNzUmVxdWVzdFN0cmluZyIsInJlcXVlc3RTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDb0Q7QUFDSDtBQUNWO0FBQ3lCO0FBQ047QUFFMUQsSUFBSUEsY0FBYyxHQUFHO0VBRWpCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxLQUFLLEVBQUcsU0FBUkEsS0FBS0EsQ0FBYUMsT0FBTyxFQUFFO0lBQ3ZCO0lBQ0EsSUFBSUMsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7SUFDL0NGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7SUFFekM7SUFDQSxJQUFJLENBQUNKLE9BQU8sRUFBRTtNQUNWLE1BQU0sSUFBSUssS0FBSyxDQUFDQyxnRUFBQyxDQUFDQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNEOztJQUVBO0lBQ0E7SUFDQSxJQUFJLENBQUNQLE9BQU8sQ0FBQ1EsSUFBSSxFQUFFO01BQ2YsTUFBTSxJQUFJSCxLQUFLLENBQUNDLGdFQUFDLENBQUNDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztJQUM5RTs7SUFFQTtJQUNBO0lBQ0EsSUFBSUUsVUFBVSxHQUFHLElBQUk7SUFDckIsUUFBUVQsT0FBTyxDQUFDUSxJQUFJO01BQ2hCLEtBQUssV0FBVztRQUNaO1FBQ0FSLE9BQU8sQ0FBQ1UsR0FBRyxDQUFDQyxVQUFVLEdBQUcsaUJBQWlCO1FBQzFDRixVQUFVLEdBQUcsSUFBSUcsbUVBQW9CLENBQUNaLE9BQU8sQ0FBQ2EsS0FBSyxDQUFDO1FBQ3BEO01BQ0osS0FBSyxRQUFRO1FBQ1Q7UUFDQWIsT0FBTyxDQUFDVSxHQUFHLENBQUNDLFVBQVUsR0FBRyxxQkFBcUI7UUFDOUNGLFVBQVUsR0FBRyxJQUFJSyxnRUFBaUIsQ0FBQ2QsT0FBTyxDQUFDYSxLQUFLLENBQUM7UUFDakQ7TUFDSjtRQUNJLE1BQU0sSUFBSVIsS0FBSyxDQUFDQyxnRUFBQyxDQUFDQyxVQUFVLENBQUMsWUFBWSxFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFDakY7O0lBRUE7SUFDQSxJQUFJUSxRQUFRLEdBQUc7TUFDWEMsSUFBSSxFQUFHUCxVQUFVO01BQ2pCUSxNQUFNLEVBQUdqQixPQUFPLENBQUNpQixNQUFNO01BQ3ZCSixLQUFLLEVBQUdiLE9BQU8sQ0FBQ1U7SUFDcEIsQ0FBQztJQUVELElBQUlRLE9BQU8sR0FBRyxJQUFJQyxvREFBRyxDQUFDSixRQUFRLENBQUM7SUFFL0IsSUFBSSxDQUFDRyxPQUFPLENBQUNFLG9CQUFvQixDQUFDLENBQUMsRUFBRTtNQUNqQyxNQUFNLElBQUlmLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztJQUNsRDtJQUVBLE9BQU9hLE9BQU8sQ0FBQ0csYUFBYTtFQUNoQztBQUNKLENBQUM7QUFFY3ZCLDZFQUFjIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0FsdGkvUmVxdWVzdC9BbHRpUmVxdWVzdFdQUy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3NlIGQnaW50ZXJmYWNlIGRlcyByZXF1w6p0ZXMgZGUgdHlwZSBXUFMgc3VyIGxlIHNlcnZpY2UgYWx0aW1ldHJpcXVlLlxuICogKEZhY3RvcnkpXG4gKlxuICogQG1vZHVsZSBHcC5TZXJ2aWNlcy5BbHRpLlJlcXVlc3QuQWx0aVJlcXVlc3RXUFNcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5BbHRpLlJlcXVlc3QuQWx0aVJlcXVlc3RXUFNcbiAqIEBwcml2YXRlXG4gKi9cbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uLy4uLy4uL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzXCI7XG5pbXBvcnQgV1BTIGZyb20gXCIuLi8uLi8uLi9Gb3JtYXRzL1dQU1wiO1xuaW1wb3J0IEFsdGlFbGV2YXRpb25SZXF1ZXN0IGZyb20gXCIuL21vZGVsL0FsdGlFbGV2YXRpb25SZXF1ZXN0XCI7XG5pbXBvcnQgQWx0aVByb2ZpbFJlcXVlc3QgZnJvbSBcIi4vbW9kZWwvQWx0aVByb2ZpbFJlcXVlc3RcIjtcblxudmFyIEFsdGlSZXF1ZXN0V1BTID0ge1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJmYWNlIHVuaXF1ZSBkZSBjb25zdHJ1Y3Rpb24gZGUgbGEgcmVxdcOqdGUuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtPYmplY3R9ICAgb3B0aW9ucy5wYXJhbS5wb3NpdGlvbnMgLSB0YWJsZWF1IGRlIGNvb3Jkb25uw6llcyBsb24vbGF0XG4gICAgICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy5wYXJhbS5kZWxpbWl0ZXIgLSAnfCdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59ICBvcHRpb25zLnBhcmFtLmluZGVudCAtIGZhbHNlfHRydWVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLnBhcmFtLmNycyAtICdDUlM6ODQnXG4gICAgICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy5wYXJhbS5zYW1wbGluZyAtIDNcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59ICBvcHRpb25zLnBhcmFtLnpvbmx5IC0gZmFsc2V8dHJ1ZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMucGFyYW0uZm9ybWF0IC0gXCJKU09OfFhNTFwiIChvbmx5IHRvIFBPU1QpXG4gICAgICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy53cHMuc2VydmljZSAtIFwiV1BTXCJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLndwcy52ZXJzaW9uIC0gXCIxLjAuMFwiXG4gICAgICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy53cHMuaWRlbnRpZmllciAtIFwiZ3M6V1BTRWxldmF0aW9ufGdzOldQU0xpbmVFbGV2YXRpb25cIlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMud3BzLnJhd2RhdGFvdXRwdXQgLSBcInJlc3VsdFwiXG4gICAgICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy53cHMucmVxdWVzdCAtIFwiRXhlY3V0ZVwiXG4gICAgICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy50eXBlIC0gXCJQcm9maWx8RWxldmF0aW9uXCJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLm1ldGhvZCAtIEdFVHxQT1NUXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAqICAgICAgICAgICB0eXBlIDogJ1Byb2ZpbCcsIC8vIEVsZXZhdGlvblxuICAgICAqICAgICAgICAgICBtZXRob2QgOiAnR0VUJywgIC8vIHBhciBkZWZhdXRcbiAgICAgKiAgICAgICAgICAgcGFyYW0gOiB7XG4gICAgICogICAgICAgICAgICAgICBwb3NpdGlvbnMgOiBbXG4gICAgICogICAgICAgICAgICAgICAgICAge2xvbjonMS4xMScsIGxhdDonMS4xMSd9LFxuICAgICAqICAgICAgICAgICAgICAgICAgIHtsb246JzEuMTAnLCBsYXQ6JzEuMTAnfSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICB7bG9uOicxLjEyJywgbGF0OicxLjEyJ31cbiAgICAgKiAgICAgICAgICAgICAgIF0sXG4gICAgICogICAgICAgICAgICAgICBkZWxpbWl0ZXIgOiBcIjtcIiwgICAgICAgICAvLyBwYXIgZGVmYXV0XG4gICAgICogICAgICAgICAgICAgICBpbmRlbnQgICAgOiB0cnVlLCAgICAgICAgLy8gcGFyIGRlZmF1dFxuICAgICAqICAgICAgICAgICAgICAgY3JzICAgICAgIDogJ0VQU0c6NDMyNicsIC8vIHBhciBkZWZhdXRcbiAgICAgKiAgICAgICAgICAgICAgIGZvcm1hdCAgICA6ICdqc29uJywgICAgICAvLyBwYXIgZGVmYXV0IChvbmx5IHRvIFBPU1QpXG4gICAgICogICAgICAgICAgICAgICBzYW1wbGluZyAgOiAzICwgICAgICAgICAgLy8gcGFyIGRlZmF1dCAob25seSB1c2UgYnkgUHJvZmlsKVxuICAgICAqICAgICAgICAgICAgICAgem9ubHkgICAgIDogZmFsc2UsICAgICAgIC8vIHBhciBkZWZhdXQgKG9ubHkgdXNlIGJ5IEVsZXZhdGlvbilcbiAgICAgKiAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgd3BzIDoge1xuICAgICAqICAgICAgICAgICAgICAgICBzZXJ2aWNlIDogJ1dQUycsICAgICAgICAgLy8gcGFyIGRlZmF1dFxuICAgICAqICAgICAgICAgICAgICAgICB2ZXJzaW9uIDogJzEuMC4wJywgICAgICAgLy8gcGFyIGRlZmF1dFxuICAgICAqICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIDogJ2dzOldQUycsICAgLy8gcGFyIGRlZmF1dCwgRWxldmF0aW9uID0gZ3M6V1BTRWxldmF0aW9uLCBQcm9maWwgPSBnczpXUFNMaW5lRWxldmF0aW9uXG4gICAgICogICAgICAgICAgICAgICAgIHJhd2RhdGFvdXRwdXQgOiAncmVzdWx0JywvLyBwYXIgZGVmYXV0XG4gICAgICogICAgICAgICAgICAgICAgIHJlcXVlc3QgOiAnRXhlY3V0ZScgICAgICAvLyBwYXIgZGVmYXV0XG4gICAgICogICAgICAgICAgIH1cbiAgICAgKiAgICAgICB9O1xuICAgICAqL1xuICAgIGJ1aWxkIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbG9nZ2VyXG4gICAgICAgIHZhciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiQWx0aVJlcXVlc3RXUFNcIik7XG4gICAgICAgIGxvZ2dlci50cmFjZShbXCJBbHRpUmVxdWVzdFdQUzo6YnVpbGQoKVwiXSk7XG5cbiAgICAgICAgLy8gZXhpc3RhbmNlIGRlcyBvcHRpb25zXG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX0VNUFRZXCIsIFwib3B0aW9uc1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0eXBlIGRlIHJlcXVldGUgOiBBbHRpdHVkZSBvdSBQcm9maWxcbiAgICAgICAgLy8gKHBhcmFtLiDDoCBkZXRlcm1pbmVyIGVuIGZvbmN0aW9uIGRlcyBwYXJhbWV0cmVzIGQnZW50csOpZSlcbiAgICAgICAgaWYgKCFvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9FTVBUWVwiLCBcInR5cGUgKEVsZXZhdGlvbiBvciBQcm9maWwpXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnN0cnVjdGlvbiBkdSBtb2RlbGUgZGUgcmVxdcOqdGVcbiAgICAgICAgLy8gKHRlc3QgZHUgdHlwZSBkJ29iamV0IGNhbmRpZGF0KVxuICAgICAgICB2YXIgRGF0YU9iamVjdCA9IG51bGw7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiRWxldmF0aW9uXCI6XG4gICAgICAgICAgICAgICAgLy8gc3VyY2hhcmdlXG4gICAgICAgICAgICAgICAgb3B0aW9ucy53cHMuaWRlbnRpZmllciA9IFwiZ3M6V1BTRWxldmF0aW9uXCI7XG4gICAgICAgICAgICAgICAgRGF0YU9iamVjdCA9IG5ldyBBbHRpRWxldmF0aW9uUmVxdWVzdChvcHRpb25zLnBhcmFtKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJQcm9maWxcIjpcbiAgICAgICAgICAgICAgICAvLyBzdXJjaGFyZ2VcbiAgICAgICAgICAgICAgICBvcHRpb25zLndwcy5pZGVudGlmaWVyID0gXCJnczpXUFNMaW5lRWxldmF0aW9uXCI7XG4gICAgICAgICAgICAgICAgRGF0YU9iamVjdCA9IG5ldyBBbHRpUHJvZmlsUmVxdWVzdChvcHRpb25zLnBhcmFtKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX1RZUEVcIiwgXCJ0eXBlIChFbGV2YXRpb24gb3IgUHJvZmlsKVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zdHJ1Y3Rpb24gZGUgbGEgcmVxdcOqdGUgV1BTXG4gICAgICAgIHZhciBzZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIGRhdGEgOiBEYXRhT2JqZWN0LFxuICAgICAgICAgICAgbWV0aG9kIDogb3B0aW9ucy5tZXRob2QsXG4gICAgICAgICAgICBwYXJhbSA6IG9wdGlvbnMud3BzXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJxc3RXUFMgPSBuZXcgV1BTKHNldHRpbmdzKTtcblxuICAgICAgICBpZiAoIXJxc3RXUFMucHJvY2Vzc1JlcXVlc3RTdHJpbmcoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5hYmxlIHRvIHByb2Nlc3MgcmVxdWVzdCAhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJxc3RXUFMucmVxdWVzdFN0cmluZztcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBbHRpUmVxdWVzdFdQUztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Request/AltiRequestWPS.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Request/model/AltiElevationRequest.js": +/*!*****************************************************************!*\ + !*** ./src/Services/Alti/Request/model/AltiElevationRequest.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _AltiRequest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AltiRequest */ \"./src/Services/Alti/Request/model/AltiRequest.js\");\n\n\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes de type POINT du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiElevationRequest\n * @param {Object} options - options\n * @param {Boolean} options.zonly - false|true\n *\n * @private\n */\nfunction AltiElevationRequest(options) {\n if (!(this instanceof AltiElevationRequest)) {\n throw new TypeError(\"AltiElevationRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiElevationRequest\";\n\n // appel du constructeur par heritage\n _AltiRequest__WEBPACK_IMPORTED_MODULE_1__[\"default\"].apply(this, arguments);\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur AltiElevationRequest ()]\");\n\n /**\n * Z uniquement.\n * true|false\n */\n this.zonly = this.options.zonly || false; // test des options héritées !\n}\n\n/**\n * @lends module:AltiElevationRequest#\n */\n\nAltiElevationRequest.prototype = Object.create(_AltiRequest__WEBPACK_IMPORTED_MODULE_1__[\"default\"].prototype, {\n /**\n * Setter/getter pour \"zonly\"\n */\n zonly: {\n /** getter */\n get: function get() {\n return this._zonly;\n },\n /** setter */\n set: function set(z) {\n this._zonly = z;\n }\n }\n});\n\n/**\n * Constructeur (alias)\n */\nAltiElevationRequest.prototype.constructor = AltiElevationRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array}\n */\nAltiElevationRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k: \"lon\",\n v: this.getLon()\n });\n map.push({\n k: \"lat\",\n v: this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k: \"indent\",\n v: this.indent\n });\n map.push({\n k: \"crs\",\n v: this.crs\n });\n map.push({\n k: \"zonly\",\n v: this.zonly\n });\n map.push({\n k: \"format\",\n v: this.format\n });\n map.push({\n k: \"resource\",\n v: this.resource\n });\n return map;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiElevationRequest);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvbW9kZWwvQWx0aUVsZXZhdGlvblJlcXVlc3QuanM/MTY1NCJdLCJuYW1lcyI6WyJBbHRpRWxldmF0aW9uUmVxdWVzdCIsIm9wdGlvbnMiLCJUeXBlRXJyb3IiLCJDTEFTU05BTUUiLCJBbHRpUmVxdWVzdCIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJ6b25seSIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsImdldCIsIl96b25seSIsInNldCIsInoiLCJjb25zdHJ1Y3RvciIsImdldERhdGEiLCJtYXAiLCJwdXNoIiwiayIsInYiLCJnZXRMb24iLCJnZXRMYXQiLCJpbmRlbnQiLCJjcnMiLCJmb3JtYXQiLCJyZXNvdXJjZSJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQXVEO0FBQ2Y7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLG9CQUFvQkEsQ0FBRUMsT0FBTyxFQUFFO0VBQ3BDLElBQUksRUFBRSxJQUFJLFlBQVlELG9CQUFvQixDQUFDLEVBQUU7SUFDekMsTUFBTSxJQUFJRSxTQUFTLENBQUMsa0VBQWtFLENBQUM7RUFDM0Y7O0VBRUE7QUFDSjtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxTQUFTLEdBQUcsc0JBQXNCOztFQUV2QztFQUNBQyxvREFBVyxDQUFDQyxLQUFLLENBQUMsSUFBSSxFQUFFQyxTQUFTLENBQUM7RUFFbEMsSUFBSSxDQUFDQyxNQUFNLEdBQUdDLDhEQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0VBQ2hDLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxLQUFLLENBQUMsd0NBQXdDLENBQUM7O0VBRTNEO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxLQUFLLEdBQUcsSUFBSSxDQUFDVixPQUFPLENBQUNVLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFYLG9CQUFvQixDQUFDWSxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDVixvREFBVyxDQUFDUSxTQUFTLEVBQUU7RUFFbEU7QUFDSjtBQUNBO0VBQ0lELEtBQUssRUFBRztJQUNKO0lBQ0FJLEdBQUcsRUFBRyxTQUFOQSxHQUFHQSxDQUFBLEVBQWU7TUFDZCxPQUFPLElBQUksQ0FBQ0MsTUFBTTtJQUN0QixDQUFDO0lBQ0Q7SUFDQUMsR0FBRyxFQUFHLFNBQU5BLEdBQUdBLENBQWFDLENBQUMsRUFBRTtNQUNmLElBQUksQ0FBQ0YsTUFBTSxHQUFHRSxDQUFDO0lBQ25CO0VBQ0o7QUFFSixDQUFDLENBQUM7O0FBRUY7QUFDQTtBQUNBO0FBQ0FsQixvQkFBb0IsQ0FBQ1ksU0FBUyxDQUFDTyxXQUFXLEdBQUduQixvQkFBb0I7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsb0JBQW9CLENBQUNZLFNBQVMsQ0FBQ1EsT0FBTyxHQUFHLFlBQVk7RUFDakQ7RUFDQSxJQUFJQyxHQUFHLEdBQUcsRUFBRTtFQUNaQSxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsS0FBSztJQUNUQyxDQUFDLEVBQUcsSUFBSSxDQUFDQyxNQUFNLENBQUM7RUFDcEIsQ0FBQyxDQUFDO0VBQ0ZKLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO0lBQ0xDLENBQUMsRUFBRyxLQUFLO0lBQ1RDLENBQUMsRUFBRyxJQUFJLENBQUNFLE1BQU0sQ0FBQztFQUNwQixDQUFDLENBQUM7RUFDRjtFQUNBTCxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsUUFBUTtJQUNaQyxDQUFDLEVBQUcsSUFBSSxDQUFDRztFQUNiLENBQUMsQ0FBQztFQUNGTixHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsS0FBSztJQUNUQyxDQUFDLEVBQUcsSUFBSSxDQUFDSTtFQUNiLENBQUMsQ0FBQztFQUNGUCxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsT0FBTztJQUNYQyxDQUFDLEVBQUcsSUFBSSxDQUFDYjtFQUNiLENBQUMsQ0FBQztFQUNGVSxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsUUFBUTtJQUNaQyxDQUFDLEVBQUcsSUFBSSxDQUFDSztFQUNiLENBQUMsQ0FBQztFQUNGUixHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsVUFBVTtJQUNkQyxDQUFDLEVBQUcsSUFBSSxDQUFDTTtFQUNiLENBQUMsQ0FBQztFQUVGLE9BQU9ULEdBQUc7QUFDZCxDQUFDO0FBRWNyQixtRkFBb0IiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvQWx0aS9SZXF1ZXN0L21vZGVsL0FsdGlFbGV2YXRpb25SZXF1ZXN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBBbHRpUmVxdWVzdCBmcm9tIFwiLi9BbHRpUmVxdWVzdFwiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiBDbGFzc2UgZGUgZ2VzdGlvbiBkZXMgcGFyYW0uIGRlcyByZXF1w6p0ZXMgZGUgdHlwZSBQT0lOVCBkdSBzZXJ2aWNlIGFsdGltZXRyaXF1ZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5BbHRpLlJlcXVlc3QuQWx0aUVsZXZhdGlvblJlcXVlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9uc1xuICogQHBhcmFtIHtCb29sZWFufSAgb3B0aW9ucy56b25seSAtIGZhbHNlfHRydWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBBbHRpRWxldmF0aW9uUmVxdWVzdCAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBbHRpRWxldmF0aW9uUmVxdWVzdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFsdGlFbGV2YXRpb25SZXF1ZXN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm9tIGRlIGxhIGNsYXNzZSAoaGVyaXRhZ2UpXG4gICAgICovXG4gICAgdGhpcy5DTEFTU05BTUUgPSBcIkFsdGlFbGV2YXRpb25SZXF1ZXN0XCI7XG5cbiAgICAvLyBhcHBlbCBkdSBjb25zdHJ1Y3RldXIgcGFyIGhlcml0YWdlXG4gICAgQWx0aVJlcXVlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiW0NvbnN0cnVjdGV1ciBBbHRpRWxldmF0aW9uUmVxdWVzdCAoKV1cIik7XG5cbiAgICAvKipcbiAgICAgKiBaIHVuaXF1ZW1lbnQuXG4gICAgICogdHJ1ZXxmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuem9ubHkgPSB0aGlzLm9wdGlvbnMuem9ubHkgfHwgZmFsc2U7IC8vIHRlc3QgZGVzIG9wdGlvbnMgaMOpcml0w6llcyAhXG59XG5cbi8qKlxuICogQGxlbmRzIG1vZHVsZTpBbHRpRWxldmF0aW9uUmVxdWVzdCNcbiAqL1xuXG5BbHRpRWxldmF0aW9uUmVxdWVzdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFsdGlSZXF1ZXN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0dGVyL2dldHRlciBwb3VyIFwiem9ubHlcIlxuICAgICAqL1xuICAgIHpvbmx5IDoge1xuICAgICAgICAvKiogZ2V0dGVyICovXG4gICAgICAgIGdldCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl96b25seTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqIHNldHRlciAqL1xuICAgICAgICBzZXQgOiBmdW5jdGlvbiAoeikge1xuICAgICAgICAgICAgdGhpcy5fem9ubHkgPSB6O1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICovXG5BbHRpRWxldmF0aW9uUmVxdWVzdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbHRpRWxldmF0aW9uUmVxdWVzdDtcblxuLyoqXG4gKiBUYWJsZWF1IGRlIGNsZWZzL3ZhbGV1cnMgcG91ciBwYXJhbS5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbkFsdGlFbGV2YXRpb25SZXF1ZXN0LnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHBhciBnbG9wLi4uLCBhcHBlbCBkZSBBbHRpUmVxdWVzdDo6Z2V0RGF0YSAoKSAhXG4gICAgdmFyIG1hcCA9IFtdO1xuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwibG9uXCIsXG4gICAgICAgIHYgOiB0aGlzLmdldExvbigpXG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJsYXRcIixcbiAgICAgICAgdiA6IHRoaXMuZ2V0TGF0KClcbiAgICB9KTtcbiAgICAvLyBtYXAucHVzaCh7ayA6IFwiZGVsaW1pdGVyXCIsIHYgOiB0aGlzLmRlbGltaXRlcn0pOyAvLyBGSVhNRSBvbiByZXRpcmUgbGUgcGFyYW0gXCJkZWxpbWl0ZXJcIlxuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwiaW5kZW50XCIsXG4gICAgICAgIHYgOiB0aGlzLmluZGVudFxuICAgIH0pO1xuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwiY3JzXCIsXG4gICAgICAgIHYgOiB0aGlzLmNyc1xuICAgIH0pO1xuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwiem9ubHlcIixcbiAgICAgICAgdiA6IHRoaXMuem9ubHlcbiAgICB9KTtcbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcImZvcm1hdFwiLFxuICAgICAgICB2IDogdGhpcy5mb3JtYXRcbiAgICB9KTtcbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcInJlc291cmNlXCIsXG4gICAgICAgIHYgOiB0aGlzLnJlc291cmNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFwO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQWx0aUVsZXZhdGlvblJlcXVlc3Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Alti/Request/model/AltiElevationRequest.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Request/model/AltiProfilRequest.js": +/*!**************************************************************!*\ + !*** ./src/Services/Alti/Request/model/AltiProfilRequest.js ***! + \**************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _AltiRequest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AltiRequest */ \"./src/Services/Alti/Request/model/AltiRequest.js\");\n\n\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes de type PROFIL du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiProfilRequest\n * @param {Object} options - options\n * @param {String} options.sampling - 3\n *\n * @private\n */\nfunction AltiProfilRequest(options) {\n if (!(this instanceof AltiProfilRequest)) {\n throw new TypeError(\"AltiProfilRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiProfilRequest\";\n\n // appel du constructeur par heritage\n _AltiRequest__WEBPACK_IMPORTED_MODULE_1__[\"default\"].apply(this, arguments);\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur AltiProfilRequest ()]\");\n\n /**\n * Sampling\n * Par defaut, 3\n */\n this.sampling = this.options.sampling || 3; // test des options héritées !\n}\n\n/**\n * @lends module:AltiProfilRequest#\n */\n\nAltiProfilRequest.prototype = Object.create(_AltiRequest__WEBPACK_IMPORTED_MODULE_1__[\"default\"].prototype, {\n /**\n * Setter/getter pour \"sampling\"\n */\n sampling: {\n /** getter */\n get: function get() {\n return this._sampling;\n },\n /** setter */\n set: function set(value) {\n this._sampling = value;\n }\n }\n});\n\n/**\n * Constructeur (alias)\n */\nAltiProfilRequest.prototype.constructor = AltiProfilRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiProfilRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k: \"lon\",\n v: this.getLon()\n });\n map.push({\n k: \"lat\",\n v: this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k: \"indent\",\n v: this.indent\n });\n map.push({\n k: \"crs\",\n v: this.crs\n });\n map.push({\n k: \"sampling\",\n v: this.sampling\n });\n map.push({\n k: \"format\",\n v: this.format\n });\n map.push({\n k: \"resource\",\n v: this.resource\n });\n return map;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiProfilRequest);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvbW9kZWwvQWx0aVByb2ZpbFJlcXVlc3QuanM/ZjA5YyJdLCJuYW1lcyI6WyJBbHRpUHJvZmlsUmVxdWVzdCIsIm9wdGlvbnMiLCJUeXBlRXJyb3IiLCJDTEFTU05BTUUiLCJBbHRpUmVxdWVzdCIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJzYW1wbGluZyIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsImdldCIsIl9zYW1wbGluZyIsInNldCIsInZhbHVlIiwiY29uc3RydWN0b3IiLCJnZXREYXRhIiwibWFwIiwicHVzaCIsImsiLCJ2IiwiZ2V0TG9uIiwiZ2V0TGF0IiwiaW5kZW50IiwiY3JzIiwiZm9ybWF0IiwicmVzb3VyY2UiXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUF1RDtBQUNmOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsaUJBQWlCQSxDQUFFQyxPQUFPLEVBQUU7RUFDakMsSUFBSSxFQUFFLElBQUksWUFBWUQsaUJBQWlCLENBQUMsRUFBRTtJQUN0QyxNQUFNLElBQUlFLFNBQVMsQ0FBQywrREFBK0QsQ0FBQztFQUN4Rjs7RUFFQTtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxtQkFBbUI7O0VBRXBDO0VBQ0FDLG9EQUFXLENBQUNDLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQztFQUVsQyxJQUFJLENBQUNDLE1BQU0sR0FBR0MsOERBQU0sQ0FBQ0MsU0FBUyxDQUFDLENBQUM7RUFDaEMsSUFBSSxDQUFDRixNQUFNLENBQUNHLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQzs7RUFFeEQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJLENBQUNWLE9BQU8sQ0FBQ1UsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQVgsaUJBQWlCLENBQUNZLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUNWLG9EQUFXLENBQUNRLFNBQVMsRUFBRTtFQUUvRDtBQUNKO0FBQ0E7RUFDSUQsUUFBUSxFQUFHO0lBQ1A7SUFDQUksR0FBRyxFQUFHLFNBQU5BLEdBQUdBLENBQUEsRUFBZTtNQUNkLE9BQU8sSUFBSSxDQUFDQyxTQUFTO0lBQ3pCLENBQUM7SUFDRDtJQUNBQyxHQUFHLEVBQUcsU0FBTkEsR0FBR0EsQ0FBYUMsS0FBSyxFQUFFO01BQ25CLElBQUksQ0FBQ0YsU0FBUyxHQUFHRSxLQUFLO0lBQzFCO0VBQ0o7QUFDSixDQUFDLENBQUM7O0FBRUY7QUFDQTtBQUNBO0FBQ0FsQixpQkFBaUIsQ0FBQ1ksU0FBUyxDQUFDTyxXQUFXLEdBQUduQixpQkFBaUI7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsaUJBQWlCLENBQUNZLFNBQVMsQ0FBQ1EsT0FBTyxHQUFHLFlBQVk7RUFDOUM7RUFDQSxJQUFJQyxHQUFHLEdBQUcsRUFBRTtFQUNaQSxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsS0FBSztJQUNUQyxDQUFDLEVBQUcsSUFBSSxDQUFDQyxNQUFNLENBQUM7RUFDcEIsQ0FBQyxDQUFDO0VBQ0ZKLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO0lBQ0xDLENBQUMsRUFBRyxLQUFLO0lBQ1RDLENBQUMsRUFBRyxJQUFJLENBQUNFLE1BQU0sQ0FBQztFQUNwQixDQUFDLENBQUM7RUFDRjtFQUNBTCxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsUUFBUTtJQUNaQyxDQUFDLEVBQUcsSUFBSSxDQUFDRztFQUNiLENBQUMsQ0FBQztFQUNGTixHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsS0FBSztJQUNUQyxDQUFDLEVBQUcsSUFBSSxDQUFDSTtFQUNiLENBQUMsQ0FBQztFQUNGUCxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsVUFBVTtJQUNkQyxDQUFDLEVBQUcsSUFBSSxDQUFDYjtFQUNiLENBQUMsQ0FBQztFQUNGVSxHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsUUFBUTtJQUNaQyxDQUFDLEVBQUcsSUFBSSxDQUFDSztFQUNiLENBQUMsQ0FBQztFQUNGUixHQUFHLENBQUNDLElBQUksQ0FBQztJQUNMQyxDQUFDLEVBQUcsVUFBVTtJQUNkQyxDQUFDLEVBQUcsSUFBSSxDQUFDTTtFQUNiLENBQUMsQ0FBQztFQUVGLE9BQU9ULEdBQUc7QUFDZCxDQUFDO0FBRWNyQixnRkFBaUIiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvQWx0aS9SZXF1ZXN0L21vZGVsL0FsdGlQcm9maWxSZXF1ZXN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBBbHRpUmVxdWVzdCBmcm9tIFwiLi9BbHRpUmVxdWVzdFwiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqIENsYXNzZSBkZSBnZXN0aW9uIGRlcyBwYXJhbS4gZGVzIHJlcXXDqnRlcyBkZSB0eXBlIFBST0ZJTCBkdSBzZXJ2aWNlIGFsdGltZXRyaXF1ZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5BbHRpLlJlcXVlc3QuQWx0aVByb2ZpbFJlcXVlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMgLSBvcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLnNhbXBsaW5nIC0gM1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEFsdGlQcm9maWxSZXF1ZXN0IChvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFsdGlQcm9maWxSZXF1ZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWx0aVByb2ZpbFJlcXVlc3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb20gZGUgbGEgY2xhc3NlIChoZXJpdGFnZSlcbiAgICAgKi9cbiAgICB0aGlzLkNMQVNTTkFNRSA9IFwiQWx0aVByb2ZpbFJlcXVlc3RcIjtcblxuICAgIC8vIGFwcGVsIGR1IGNvbnN0cnVjdGV1ciBwYXIgaGVyaXRhZ2VcbiAgICBBbHRpUmVxdWVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCk7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIEFsdGlQcm9maWxSZXF1ZXN0ICgpXVwiKTtcblxuICAgIC8qKlxuICAgICAqIFNhbXBsaW5nXG4gICAgICogUGFyIGRlZmF1dCwgM1xuICAgICAqL1xuICAgIHRoaXMuc2FtcGxpbmcgPSB0aGlzLm9wdGlvbnMuc2FtcGxpbmcgfHwgMzsgLy8gdGVzdCBkZXMgb3B0aW9ucyBow6lyaXTDqWVzICFcbn1cblxuLyoqXG4gKiBAbGVuZHMgbW9kdWxlOkFsdGlQcm9maWxSZXF1ZXN0I1xuICovXG5cbkFsdGlQcm9maWxSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWx0aVJlcXVlc3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXR0ZXIvZ2V0dGVyIHBvdXIgXCJzYW1wbGluZ1wiXG4gICAgICovXG4gICAgc2FtcGxpbmcgOiB7XG4gICAgICAgIC8qKiBnZXR0ZXIgKi9cbiAgICAgICAgZ2V0IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NhbXBsaW5nO1xuICAgICAgICB9LFxuICAgICAgICAvKiogc2V0dGVyICovXG4gICAgICAgIHNldCA6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fc2FtcGxpbmcgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gKi9cbkFsdGlQcm9maWxSZXF1ZXN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFsdGlQcm9maWxSZXF1ZXN0O1xuXG4vKipcbiAqIFRhYmxlYXUgZGUgY2xlZnMvdmFsZXVycyBwb3VyIHBhcmFtLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3RbXX1cbiAqL1xuQWx0aVByb2ZpbFJlcXVlc3QucHJvdG90eXBlLmdldERhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gcGFyIGdsb3AuLi4sIGFwcGVsIGRlIEFsdGlSZXF1ZXN0OjpnZXREYXRhICgpICFcbiAgICB2YXIgbWFwID0gW107XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJsb25cIixcbiAgICAgICAgdiA6IHRoaXMuZ2V0TG9uKClcbiAgICB9KTtcbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcImxhdFwiLFxuICAgICAgICB2IDogdGhpcy5nZXRMYXQoKVxuICAgIH0pO1xuICAgIC8vIG1hcC5wdXNoKHtrIDogXCJkZWxpbWl0ZXJcIiwgdiA6IHRoaXMuZGVsaW1pdGVyfSk7IC8vIEZJWE1FIG9uIHJldGlyZSBsZSBwYXJhbSBcImRlbGltaXRlclwiXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJpbmRlbnRcIixcbiAgICAgICAgdiA6IHRoaXMuaW5kZW50XG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJjcnNcIixcbiAgICAgICAgdiA6IHRoaXMuY3JzXG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJzYW1wbGluZ1wiLFxuICAgICAgICB2IDogdGhpcy5zYW1wbGluZ1xuICAgIH0pO1xuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwiZm9ybWF0XCIsXG4gICAgICAgIHYgOiB0aGlzLmZvcm1hdFxuICAgIH0pO1xuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwicmVzb3VyY2VcIixcbiAgICAgICAgdiA6IHRoaXMucmVzb3VyY2VcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBbHRpUHJvZmlsUmVxdWVzdDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Request/model/AltiProfilRequest.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Request/model/AltiRequest.js": +/*!********************************************************!*\ + !*** ./src/Services/Alti/Request/model/AltiRequest.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequest\n * @param {Object} options - options\n * @param {Object} options.positions - tableau de coordonnées lon/lat\n * @param {String} options.delimiter - \"|\"\n * @param {Boolean} options.indent - false|true\n * @param {String} options.crs - \"CRS:84\"\n * @param {String} options.format - \"JSON|XML\"\n *\n * @private\n */\nfunction AltiRequest(options) {\n if (!(this instanceof AltiRequest)) {\n throw new TypeError(\"AltiRequest constructor cannot be called as a function.\");\n }\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur AltiRequest ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n /**\n * Liste des coordonnées.\n * @example\n * var c = [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}];\n */\n this.positions = this.options.positions || [];\n\n /**\n * Caractère de séparation.\n * Par defaut, \"|\".\n */\n this.delimiter = this.options.delimiter || \"|\";\n\n /**\n * Indentation.\n * true|false\n */\n this.indent = this.options.indent || false;\n\n /**\n * Projection.\n * Par defaut, CRS:84.\n */\n this.crs = this.options.crs || \"CRS:84\";\n\n /**\n * format de sortie.\n * Par defaut, \"json\".\n */\n this.format = this.options.format || \"json\";\n\n /*\n * Ressource utilisée\n */\n this.resource = this.options.resource;\n\n /**\n * Réponse détaillée (source & accuracy)\n * true|false\n */\n this.measures = this.options.measures || false;\n}\n\n/**\n * CLASSNAME\n */\nAltiRequest.CLASSNAME = \"AltiRequest\";\nAltiRequest.prototype = {\n /**\n * @lends module:AltiRequest#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor: AltiRequest,\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.setPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n setPositions: function setPositions(lstPosition) {\n var positions = [];\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n positions.push(o);\n }\n }\n this.positions = positions;\n },\n /**\n * Liste des coordonnées.\n *\n * @param {Int} pos - position\n * @returns {positions}\n * @example\n * obj.getPositions (); // [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}]\n * obj.getPositions (0); // [{lon : \"\", lat : \"\"}]\n */\n getPositions: function getPositions(pos) {\n // FIXME test if not a number !?\n if (!pos) {\n return this.positions;\n }\n var index = this.positions.length - 1;\n if (pos > index || pos < index) {\n this.logger.warn(\"index out of range !\");\n return this.positions;\n }\n return this.positions[pos];\n },\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.addPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n addPositions: function addPositions(lstPosition) {\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n this.positions.push(lstPosition[i]);\n }\n }\n },\n /**\n * Retourne la liste des longitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de longitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLon: function getLon() {\n var lstLon = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLon.push(this.positions[i].lon);\n }\n this.logger.trace(lstLon);\n return lstLon.join(this.delimiter);\n },\n /**\n * Retourne la liste des lattitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de lattitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLat: function getLat() {\n var lstLat = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLat.push(this.positions[i].lat);\n }\n this.logger.trace(lstLat);\n return lstLat.join(this.delimiter);\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiRequest.prototype.getData = function () {\n var map = [];\n map.push({\n k: \"lon\",\n v: this.getLon()\n });\n map.push({\n k: \"lat\",\n v: this.getLat()\n });\n map.push({\n k: \"delimiter\",\n v: this.delimiter\n });\n map.push({\n k: \"indent\",\n v: this.indent\n });\n map.push({\n k: \"crs\",\n v: this.crs\n });\n map.push({\n k: \"format\",\n v: this.format\n });\n return map;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiRequest);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1JlcXVlc3QvbW9kZWwvQWx0aVJlcXVlc3QuanM/MDgwZSJdLCJuYW1lcyI6WyJBbHRpUmVxdWVzdCIsIm9wdGlvbnMiLCJUeXBlRXJyb3IiLCJsb2dnZXIiLCJMb2dnZXIiLCJnZXRMb2dnZXIiLCJ0cmFjZSIsInBvc2l0aW9ucyIsImRlbGltaXRlciIsImluZGVudCIsImNycyIsImZvcm1hdCIsInJlc291cmNlIiwibWVhc3VyZXMiLCJDTEFTU05BTUUiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsInNldFBvc2l0aW9ucyIsImxzdFBvc2l0aW9uIiwiaSIsImxlbmd0aCIsIm8iLCJsb24iLCJsYXQiLCJwdXNoIiwiZ2V0UG9zaXRpb25zIiwicG9zIiwiaW5kZXgiLCJ3YXJuIiwiYWRkUG9zaXRpb25zIiwiZ2V0TG9uIiwibHN0TG9uIiwiam9pbiIsImdldExhdCIsImxzdExhdCIsImdldERhdGEiLCJtYXAiLCJrIiwidiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsV0FBV0EsQ0FBRUMsT0FBTyxFQUFFO0VBQzNCLElBQUksRUFBRSxJQUFJLFlBQVlELFdBQVcsQ0FBQyxFQUFFO0lBQ2hDLE1BQU0sSUFBSUUsU0FBUyxDQUFDLHlEQUF5RCxDQUFDO0VBQ2xGO0VBRUEsSUFBSSxDQUFDQyxNQUFNLEdBQUdDLDhEQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0VBQ2hDLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxLQUFLLENBQUMsK0JBQStCLENBQUM7O0VBRWxEO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQ0wsT0FBTyxHQUFHQSxPQUFPLElBQUksQ0FBQyxDQUFDOztFQUU1QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0ksSUFBSSxD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Q3hDLElBQUlDLEdBQUcsR0FBRyxFQUFFO0VBRVpBLEdBQUcsQ0FBQ1osSUFBSSxDQUFDO0lBQ0xhLENBQUMsRUFBRyxLQUFLO0lBQ1RDLENBQUMsRUFBRyxJQUFJLENBQUNSLE1BQU0sQ0FBQztFQUNwQixDQUFDLENBQUM7RUFDRk0sR0FBRyxDQUFDWixJQUFJLENBQUM7SUFDTGEsQ0FBQyxFQUFHLEtBQUs7SUFDVEMsQ0FBQyxFQUFHLElBQUksQ0FBQ0wsTUFBTSxDQUFDO0VBQ3BCLENBQUMsQ0FBQztFQUNGRyxHQUFHLENBQUNaLElBQUksQ0FBQztJQUNMYSxDQUFDLEVBQUcsV0FBVztJQUNmQyxDQUFDLEVBQUcsSUFBSSxDQUFDOUI7RUFDYixDQUFDLENBQUM7RUFDRjRCLEdBQUcsQ0FBQ1osSUFBSSxDQUFDO0lBQ0xhLENBQUMsRUFBRyxRQUFRO0lBQ1pDLENBQUMsRUFBRyxJQUFJLENBQUM3QjtFQUNiLENBQUMsQ0FBQztFQUNGMkIsR0FBRyxDQUFDWixJQUFJLENBQUM7SUFDTGEsQ0FBQyxFQUFHLEtBQUs7SUFDVEMsQ0FBQyxFQUFHLElBQUksQ0FBQzVCO0VBQ2IsQ0FBQyxDQUFDO0VBQ0YwQixHQUFHLENBQUNaLElBQUksQ0FBQztJQUNMYSxDQUFDLEVBQUcsUUFBUTtJQUNaQyxDQUFDLEVBQUcsSUFBSSxDQUFDM0I7RUFDYixDQUFDLENBQUM7RUFFRixPQUFPeUIsR0FBRztBQUNkLENBQUM7QUFFY3BDLDBFQUFXIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0FsdGkvUmVxdWVzdC9tb2RlbC9BbHRpUmVxdWVzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICogQ2xhc3NlIGRlIGdlc3Rpb24gZGVzIHBhcmFtLiBkZXMgcmVxdcOqdGVzIGR1IHNlcnZpY2UgYWx0aW1ldHJpcXVlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkFsdGkuUmVxdWVzdC5BbHRpUmVxdWVzdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gICBvcHRpb25zLnBvc2l0aW9ucyAtIHRhYmxlYXUgZGUgY29vcmRvbm7DqWVzIGxvbi9sYXRcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIG9wdGlvbnMuZGVsaW1pdGVyIC0gXCJ8XCJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIG9wdGlvbnMuaW5kZW50IC0gZmFsc2V8dHJ1ZVxuICogQHBhcmFtIHtTdHJpbmd9ICAgb3B0aW9ucy5jcnMgLSBcIkNSUzo4NFwiXG4gKiBAcGFyYW0ge1N0cmluZ30gICBvcHRpb25zLmZvcm1hdCAtIFwiSlNPTnxYTUxcIlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEFsdGlSZXF1ZXN0IChvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFsdGlSZXF1ZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWx0aVJlcXVlc3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShcIltDb25zdHJ1Y3RldXIgQWx0aVJlcXVlc3QgKCldXCIpO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBlbiBwYXJhbcOqdHJlcyBkdSBjb25zdHJ1Y3RldXIuXG4gICAgICovXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIExpc3RlIGRlcyBjb29yZG9ubsOpZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYyA9IFt7bG9uIDogXCJcIiwgbGF0IDogXCJcIn0sIHtsb24gOiBcIlwiLCBsYXQgOiBcIlwifV07XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25zIHx8IFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2FyYWN0w6hyZSBkZSBzw6lwYXJhdGlvbi5cbiAgICAgKiBQYXIgZGVmYXV0LCBcInxcIi5cbiAgICAgKi9cbiAgICB0aGlzLmRlbGltaXRlciA9IHRoaXMub3B0aW9ucy5kZWxpbWl0ZXIgfHwgXCJ8XCI7XG5cbiAgICAvKipcbiAgICAgKiBJbmRlbnRhdGlvbi5cbiAgICAgKiB0cnVlfGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5pbmRlbnQgPSB0aGlzLm9wdGlvbnMuaW5kZW50IHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUHJvamVjdGlvbi5cbiAgICAgKiBQYXIgZGVmYXV0LCBDUlM6ODQuXG4gICAgICovXG4gICAgdGhpcy5jcnMgPSB0aGlzLm9wdGlvbnMuY3JzIHx8IFwiQ1JTOjg0XCI7XG5cbiAgICAvKipcbiAgICAgKiBmb3JtYXQgZGUgc29ydGllLlxuICAgICAqIFBhciBkZWZhdXQsIFwianNvblwiLlxuICAgICAqL1xuICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5vcHRpb25zLmZvcm1hdCB8fCBcImpzb25cIjtcblxuICAgIC8qXG4gICAgICogUmVzc291cmNlIHV0aWxpc8OpZVxuICAgICovXG4gICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMub3B0aW9ucy5yZXNvdXJjZTtcblxuICAgIC8qKlxuICAgICAqIFLDqXBvbnNlIGTDqXRhaWxsw6llIChzb3VyY2UgJiBhY2N1cmFjeSlcbiAgICAgKiB0cnVlfGZhbHNlXG4gICAgKi9cbiAgICB0aGlzLm1lYXN1cmVzID0gdGhpcy5vcHRpb25zLm1lYXN1cmVzIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIENMQVNTTkFNRVxuICovXG5BbHRpUmVxdWVzdC5DTEFTU05BTUUgPSBcIkFsdGlSZXF1ZXN0XCI7XG5cbkFsdGlSZXF1ZXN0LnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIEBsZW5kcyBtb2R1bGU6QWx0aVJlcXVlc3QjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIDogQWx0aVJlcXVlc3QsXG5cbiAgICAvKipcbiAgICAgKiBBam91dCBkXCJ1bmUgbGlzdGUgZGUgY29vcmRvbm7DqWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3RbXX0gbHN0UG9zaXRpb24gLSBsaXN0ZSBkZSBwb3NpdGlvbnNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG9iai5zZXRQb3NpdGlvbnMgKFt7bG9uIDogXCIwLjE1XCIsIGxhdCA6IFwiMC4xNVwifSwge2xvbiA6IFwiMS4xNVwiLCBsYXQgOiBcIjEuMTVcIn1dKTtcbiAgICAgKi9cbiAgICBzZXRQb3NpdGlvbnMgOiBmdW5jdGlvbiAobHN0UG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxzdFBvc2l0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbyA9IGxzdFBvc2l0aW9uW2ldO1xuICAgICAgICAgICAgaWYgKG8ubG9uICYmIG8ubGF0KSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2gobyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGlzdGUgZGVzIGNvb3Jkb25uw6llcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SW50fSBwb3MgLSBwb3NpdGlvblxuICAgICAqIEByZXR1cm5zIHtwb3NpdGlvbnN9XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBvYmouZ2V0UG9zaXRpb25zICgpOyAgLy8gW3tsb24gOiBcIlwiLCBsYXQgOiBcIlwifSwge2xvbiA6IFwiXCIsIGxhdCA6IFwiXCJ9XVxuICAgICAqIG9iai5nZXRQb3NpdGlvbnMgKDApOyAvLyBbe2xvbiA6IFwiXCIsIGxhdCA6IFwiXCJ9XVxuICAgICAqL1xuICAgIGdldFBvc2l0aW9ucyA6IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgLy8gRklYTUUgdGVzdCBpZiBub3QgYSBudW1iZXIgIT9cbiAgICAgICAgaWYgKCFwb3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMucG9zaXRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChwb3MgPiBpbmRleCB8fCBwb3MgPCBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImluZGV4IG91dCBvZiByYW5nZSAhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25zW3Bvc107XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFqb3V0IGRcInVuZSBsaXN0ZSBkZSBjb29yZG9ubsOpZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdFtdfSBsc3RQb3NpdGlvbiAtIGxpc3RlIGRlIHBvc2l0aW9uc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogb2JqLmFkZFBvc2l0aW9ucyAoW3tsb24gOiBcIjAuMTVcIiwgbGF0IDogXCIwLjE1XCJ9LCB7bG9uIDogXCIxLjE1XCIsIGxhdCA6IFwiMS4xNVwifV0pO1xuICAgICAqL1xuICAgIGFkZFBvc2l0aW9ucyA6IGZ1bmN0aW9uIChsc3RQb3NpdGlvbikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxzdFBvc2l0aW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbyA9IGxzdFBvc2l0aW9uW2ldO1xuICAgICAgICAgICAgaWYgKG8ubG9uICYmIG8ubGF0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChsc3RQb3NpdGlvbltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0b3VybmUgbGEgbGlzdGUgZGVzIGxvbmdpdHVkZXMgYXZlYyB1biBjYXJhY3TDqHJlIGRlIHPDqXBhcmF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gLSB1bmUgbGlzdGUgZGUgbG9uZ2l0dWRlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gb3V0IDogMC4yMzY3fDIuMTU3MHw0My43ODl8Li4uXG4gICAgICovXG4gICAgZ2V0TG9uIDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbHN0TG9uID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxzdExvbi5wdXNoKHRoaXMucG9zaXRpb25zW2ldLmxvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UobHN0TG9uKTtcbiAgICAgICAgcmV0dXJuIGxzdExvbi5qb2luKHRoaXMuZGVsaW1pdGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0b3VybmUgbGEgbGlzdGUgZGVzIGxhdHRpdHVkZXMgYXZlYyB1biBjYXJhY3TDqHJlIGRlIHPDqXBhcmF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gLSB1bmUgbGlzdGUgZGUgbGF0dGl0dWRlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gb3V0IDogMC4yMzY3fDIuMTU3MHw0My43ODl8Li4uXG4gICAgICovXG4gICAgZ2V0TGF0IDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbHN0TGF0ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxzdExhdC5wdXNoKHRoaXMucG9zaXRpb25zW2ldLmxhdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UobHN0TGF0KTtcbiAgICAgICAgcmV0dXJuIGxzdExhdC5qb2luKHRoaXMuZGVsaW1pdGVyKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogVGFibGVhdSBkZSBjbGVmcy92YWxldXJzIHBvdXIgcGFyYW0uXG4gKlxuICogQHJldHVybnMge09iamVjdFtdfVxuICovXG5BbHRpUmVxdWVzdC5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWFwID0gW107XG5cbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcImxvblwiLFxuICAgICAgICB2IDogdGhpcy5nZXRMb24oKVxuICAgIH0pO1xuICAgIG1hcC5wdXNoKHtcbiAgICAgICAgayA6IFwibGF0XCIsXG4gICAgICAgIHYgOiB0aGlzLmdldExhdCgpXG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJkZWxpbWl0ZXJcIixcbiAgICAgICAgdiA6IHRoaXMuZGVsaW1pdGVyXG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJpbmRlbnRcIixcbiAgICAgICAgdiA6IHRoaXMuaW5kZW50XG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJjcnNcIixcbiAgICAgICAgdiA6IHRoaXMuY3JzXG4gICAgfSk7XG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJmb3JtYXRcIixcbiAgICAgICAgdiA6IHRoaXMuZm9ybWF0XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFwO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQWx0aVJlcXVlc3Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Alti/Request/model/AltiRequest.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Response/AltiResponseFactory.js": +/*!***********************************************************!*\ + !*** ./src/Services/Alti/Response/AltiResponseFactory.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _Formats_XML__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../Formats/XML */ \"./src/Formats/XML.js\");\n/* harmony import */ var _Formats_AltiResponseReader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Formats/AltiResponseReader */ \"./src/Services/Alti/Formats/AltiResponseReader.js\");\n/* harmony import */ var _model_AltiResponse__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./model/AltiResponse */ \"./src/Services/Alti/Response/model/AltiResponse.js\");\n/* harmony import */ var _model_Elevation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./model/Elevation */ \"./src/Services/Alti/Response/model/Elevation.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AltiResponseFactory\n * @private\n * @alias Gp.Services.Alti.Response.AltiResponseFactory\n */\n\n\n\n\n\n\n\nvar AltiResponseFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"AltiResponseFactory\");\n logger.trace([\"AltiResponseFactory::build()\"]);\n var data = null;\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n switch (options.outputFormat) {\n case \"xml\":\n logger.trace(\"analyze response : xml\");\n try {\n var p = new _Formats_XML__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n reader: _Formats_AltiResponseReader__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n if (typeof options.response === \"string\") {\n p.setXMLString(options.response);\n } else {\n p.setXMLDoc(options.response);\n }\n data = p.parse();\n if (!data) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\"));\n }\n } catch (e) {\n var message = e.message;\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", message),\n status: 200,\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR\n }));\n return;\n }\n break;\n case \"json\":\n logger.trace(\"analyze response : json\");\n logger.trace(\"analyze response : \", _typeof(options.response));\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // le service renvoie t il une erreur ?\n if (JSONResponse && JSONResponse.error) {\n // ex. {\"error\": {\"code\": \"BAD_PARAMETER\",\"description\": \"The values () cannot be parsed as a valid longitude (double value such as -180 < lat < 180).\"}}\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status: 200,\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR\n }));\n return;\n }\n\n // analyse de la reponse\n if (JSONResponse) {\n var elevations = JSONResponse.elevations;\n var altiResponse = new _model_AltiResponse__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n var elevation;\n if (Array.isArray(elevations) && elevations.length) {\n for (var i = 0; i < elevations.length; i++) {\n elevation = new _model_Elevation__WEBPACK_IMPORTED_MODULE_6__[\"default\"]();\n if (_typeof(elevations[i]) === \"object\") {\n // elevations[i] est un objet elevation\n if (elevations[i].lon) {\n elevation.lon = elevations[i].lon;\n }\n if (elevations[i].lat) {\n elevation.lat = elevations[i].lat;\n }\n if (elevations[i].z) {\n elevation.z = elevations[i].z;\n }\n if (elevations[i].acc) {\n elevation.acc = elevations[i].acc;\n }\n if (elevations[i].measures) {\n elevation.measures = elevations[i].measures;\n }\n } else if (typeof elevations[i] === \"number\") {\n // elevations[i] est un nombre, dans le cas de zonly=true notamment\n elevation.z = elevations[i];\n }\n if (Array.isArray(altiResponse.elevations)) {\n altiResponse.elevations.push(elevation);\n }\n }\n }\n data = altiResponse;\n }\n if (!data) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_UNKERR,\n status: -1\n }));\n return;\n }\n break;\n default:\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_FORMAT_2\"),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_UNKERR,\n status: -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR,\n status: 200\n }));\n return;\n } else if (data.error) {\n var errorMess = data.error.description;\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", errorMess),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR,\n status: 200\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n options.onSuccess.call(options.scope, data);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiResponseFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL0FsdGlSZXNwb25zZUZhY3RvcnkuanM/NDc1MSJdLCJuYW1lcyI6WyJBbHRpUmVzcG9uc2VGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJkYXRhIiwicmVzcG9uc2UiLCJyYXdSZXNwb25zZSIsIm91dHB1dEZvcm1hdCIsInAiLCJYTUwiLCJyZWFkZXIiLCJBbHRpUmVzcG9uc2VSZWFkZXIiLCJzZXRYTUxTdHJpbmciLCJzZXRYTUxEb2MiLCJwYXJzZSIsIkVycm9yIiwiTVJlcyIsImdldE1lc3NhZ2UiLCJlIiwibWVzc2FnZSIsIm9uRXJyb3IiLCJjYWxsIiwic2NvcGUiLCJFcnJvclNlcnZpY2UiLCJzdGF0dXMiLCJ0eXBlIiwiVFlQRV9TUlZFUlIiLCJfdHlwZW9mIiwiSlNPTlJlc3BvbnNlIiwiSlNPTiIsImVycm9yIiwiZGVzY3JpcHRpb24iLCJlbGV2YXRpb25zIiwiYWx0aVJlc3BvbnNlIiwiQWx0aVJlc3BvbnNlIiwiZWxldmF0aW9uIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaSIsIkVsZXZhdGlvbiIsImxvbiIsImxhdCIsInoiLCJhY2MiLCJtZWFzdXJlcyIsInB1c2giLCJUWVBFX1VOS0VSUiIsImV4Y2VwdGlvblJlcG9ydCIsImVycm9yTWVzcyIsIm9uU3VjY2VzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNvRDtBQUNBO0FBQ1E7QUFDckI7QUFDd0I7QUFDZjtBQUNOO0FBRTFDLElBQUlBLG1CQUFtQixHQUFHO0VBRXRCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxLQUFLLEVBQUcsU0FB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QyxnRUFBWSxDQUFDO1lBQ2pESixPQUFPLEVBQUdILGdFQUFJLENBQUNDLFVBQVUsQ0FBQyw0QkFBNEIsRUFBRWIsSUFBSSxDQUFDNEMsZUFBZSxDQUFDO1lBQzdFdkIsSUFBSSxFQUFHRixnRUFBWSxDQUFDRyxXQUFXO1lBQy9CRixNQUFNLEVBQUc7VUFDYixDQUFDLENBQUMsQ0FBQztVQUNIO1FBQ0osQ0FBQyxNQUFNLElBQUlwQixJQUFJLENBQUMwQixLQUFLLEVBQUU7VUFDbkIsSUFBSW1CLFNBQVMsR0FBRzdDLElBQUksQ0FBQzBCLEtBQUssQ0FBQ0MsV0FBVztVQUN0Q2hDLE9BQU8sQ0FBQ3FCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDdEIsT0FBTyxDQUFDdUIsS0FBSyxFQUFFLElBQUlDLGdFQUFZLENBQUM7WUFDakRKLE9BQU8sRUFBR0gsZ0VBQUksQ0FBQ0MsVUFBVSxDQUFDLDRCQUE0QixFQUFFZ0MsU0FBUyxDQUFDO1lBQ2xFeEIsSUFBSSxFQUFHRixnRUFBWSxDQUFDRyxXQUFXO1lBQy9CRixNQUFNLEVBQUc7VUFDYixDQUFDLENBQUMsQ0FBQztVQUNIO1FBQ0o7TUFDSjtJQUNKLENBQUMsTUFBTTtNQUNIekIsT0FBTyxDQUFDcUIsT0FBTyxDQUFDQyxJQUFJLENBQUN0QixPQUFPLENBQUN1QixLQUFLLEVBQUUsSUFBSUMsZ0VBQVksQ0FBQ1AsZ0VBQUksQ0FBQ0MsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztNQUNoRztJQUNKO0lBRUFsQixPQUFPLENBQUNtRCxTQUFTLENBQUM3QixJQUFJLENBQUN0QixPQUFPLENBQUN1QixLQUFLLEVBQUVsQixJQUFJLENBQUM7RUFDL0M7QUFDSixDQUFDO0FBRWNQLGtGQUFtQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL0FsdGlSZXNwb25zZUZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZhY3RvcnkgcG91ciBnw6luw6lyZXIgdW5lIHJlcG9uc2UgSlNPTiDDoCBwYXJ0aXIgZCd1biBYTUwgb3UgZCd1biBKU09OXG4gKiAoRmFjdG9yeSlcbiAqXG4gKiBAbW9kdWxlIEFsdGlSZXNwb25zZUZhY3RvcnlcbiAqIEBwcml2YXRlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuQWx0aS5SZXNwb25zZS5BbHRpUmVzcG9uc2VGYWN0b3J5XG4gKi9cbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IE1SZXMgZnJvbSBcIi4uLy4uLy4uL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzXCI7XG5pbXBvcnQgRXJyb3JTZXJ2aWNlIGZyb20gXCIuLi8uLi8uLi9FeGNlcHRpb25zL0Vycm9yU2VydmljZVwiO1xuaW1wb3J0IFhNTCBmcm9tIFwiLi4vLi4vLi4vRm9ybWF0cy9YTUxcIjtcbmltcG9ydCBBbHRpUmVzcG9uc2VSZWFkZXIgZnJvbSBcIi4uL0Zvcm1hdHMvQWx0aVJlc3BvbnNlUmVhZGVyXCI7XG5pbXBvcnQgQWx0aVJlc3BvbnNlIGZyb20gXCIuL21vZGVsL0FsdGlSZXNwb25zZVwiO1xuaW1wb3J0IEVsZXZhdGlvbiBmcm9tIFwiLi9tb2RlbC9FbGV2YXRpb25cIjtcblxudmFyIEFsdGlSZXNwb25zZUZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBBbHRpXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICogICAgICByZXNwb25zZSA6XG4gICAgICogICAgICBvdXRwdXRGb3JtYXQgOlxuICAgICAqICAgICAgcmF3UmVzcG9uc2UgOlxuICAgICAqICAgICAgc2NvcGUgOlxuICAgICAqICAgICAgb25TdWNjZXNzIDpcbiAgICAgKiAgICAgIG9uRXJyb3IgOlxuICAgICAqICAgfTtcbiAgICAgKlxuICAgICAqL1xuICAgIGJ1aWxkIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbG9nZ2VyXG4gICAgICAgIHZhciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiQWx0aVJlc3BvbnNlRmFjdG9yeVwiKTtcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFtcIkFsdGlSZXNwb25zZUZhY3Rvcnk6OmJ1aWxkKClcIl0pO1xuXG4gICAgICAgIHZhciBkYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAob3B0aW9ucy5yZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJhbmFseXplIHJlc3BvbnNlIDogcmF3XCIpO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbnMub3V0cHV0Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ4bWxcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcImFuYWx5emUgcmVzcG9uc2UgOiB4bWxcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBuZXcgWE1MKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyIDogQWx0aVJlc3BvbnNlUmVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVzcG9uc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5zZXRYTUxTdHJpbmcob3B0aW9ucy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5zZXRYTUxEb2Mob3B0aW9ucy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHAucGFyc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FWENFUFRJT05fMlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FWENFUFRJT05cIiwgbWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA6IEVycm9yU2VydmljZS5UWVBFX1NSVkVSUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJhbmFseXplIHJlc3BvbnNlIDoganNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcImFuYWx5emUgcmVzcG9uc2UgOiBcIiwgdHlwZW9mIG9wdGlvbnMucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgSlNPTlJlc3BvbnNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXNwb25zZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT05SZXNwb25zZSA9IEpTT04ucGFyc2Uob3B0aW9ucy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT05SZXNwb25zZSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlIHNlcnZpY2UgcmVudm9pZSB0IGlsIHVuZSBlcnJldXIgP1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05SZXNwb25zZSAmJiBKU09OUmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleC4ge1wiZXJyb3JcIjoge1wiY29kZVwiOiBcIkJBRF9QQVJBTUVURVJcIixcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHZhbHVlcyAoKSBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdmFsaWQgbG9uZ2l0dWRlIChkb3VibGUgdmFsdWUgc3VjaCBhcyAtMTgwIDwgbGF0IDwgMTgwKS5cIn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTlwiLCBKU09OUmVzcG9uc2UuZXJyb3IuZGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiBFcnJvclNlcnZpY2UuVFlQRV9TUlZFUlJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmFseXNlIGRlIGxhIHJlcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09OUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxldmF0aW9ucyA9IEpTT05SZXNwb25zZS5lbGV2YXRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRpUmVzcG9uc2UgPSBuZXcgQWx0aVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZXZhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGV2YXRpb25zKSAmJiBlbGV2YXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXZhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbiA9IG5ldyBFbGV2YXRpb24oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGV2YXRpb25zW2ldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxldmF0aW9uc1tpXSBlc3QgdW4gb2JqZXQgZWxldmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZXZhdGlvbnNbaV0ubG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbi5sb24gPSBlbGV2YXRpb25zW2ldLmxvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZXZhdGlvbnNbaV0ubGF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbi5sYXQgPSBlbGV2YXRpb25zW2ldLmxhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZXZhdGlvbnNbaV0ueikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb24ueiA9IGVsZXZhdGlvbnNbaV0uejtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZXZhdGlvbnNbaV0uYWNjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbi5hY2MgPSBlbGV2YXRpb25zW2ldLmFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZXZhdGlvbnNbaV0ubWVhc3VyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uLm1lYXN1cmVzID0gZWxldmF0aW9uc1tpXS5tZWFzdXJlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGV2YXRpb25zW2ldID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxldmF0aW9uc1tpXSBlc3QgdW4gbm9tYnJlLCBkYW5zIGxlIGNhcyBkZSB6b25seT10cnVlIG5vdGFtbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbi56ID0gZWxldmF0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWx0aVJlc3BvbnNlLmVsZXZhdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0aVJlc3BvbnNlLmVsZXZhdGlvbnMucHVzaChlbGV2YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhbHRpUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9BTkFMWVNFXzJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiBFcnJvclNlcnZpY2UuVFlQRV9VTktFUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9GT1JNQVRfMlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogRXJyb3JTZXJ2aWNlLlRZUEVfVU5LRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU2kgbGEgcsOpcG9uc2UgY29udGVuYWl0IHVuZSBleGNlcHRpb24gcmVudm95w6llIHBhciBsZSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZXhjZXB0aW9uUmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6IE1SZXMuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRVhDRVBUSU9OXCIsIGRhdGEuZXhjZXB0aW9uUmVwb3J0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiBFcnJvclNlcnZpY2UuVFlQRV9TUlZFUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgOiAyMDBcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3MgPSBkYXRhLmVycm9yLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTlwiLCBlcnJvck1lc3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA6IEVycm9yU2VydmljZS5UWVBFX1NSVkVSUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IDIwMFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKE1SZXMuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlcIikpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMub25TdWNjZXNzLmNhbGwob3B0aW9ucy5zY29wZSwgZGF0YSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQWx0aVJlc3BvbnNlRmFjdG9yeTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Response/AltiResponseFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Response/model/AltiResponse.js": +/*!**********************************************************!*\ + !*** ./src/Services/Alti/Response/model/AltiResponse.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Response object for {@link module:Services~getAltitude Gp.Services.getAltitude ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} elevations - Elevations array.\n *\n * @namespace\n * @alias Gp.Services.AltiResponse\n */\nfunction AltiResponse() {\n if (!(this instanceof AltiResponse)) {\n throw new TypeError(\"AltiResponse constructor cannot be called as a function.\");\n }\n this.elevations = [];\n}\nAltiResponse.prototype = {\n constructor: AltiResponse\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AltiResponse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL21vZGVsL0FsdGlSZXNwb25zZS5qcz8yYmM1Il0sIm5hbWVzIjpbIkFsdGlSZXNwb25zZSIsIlR5cGVFcnJvciIsImVsZXZhdGlvbnMiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsWUFBWUEsQ0FBQSxFQUFJO0VBQ3JCLElBQUksRUFBRSxJQUFJLFlBQVlBLFlBQVksQ0FBQyxFQUFFO0lBQ2pDLE1BQU0sSUFBSUMsU0FBUyxDQUFDLDBEQUEwRCxDQUFDO0VBQ25GO0VBRUEsSUFBSSxDQUFDQyxVQUFVLEdBQUcsRUFBRTtBQUN4QjtBQUVBRixZQUFZLENBQUNHLFNBQVMsR0FBRztFQUVyQkMsV0FBVyxFQUFHSjtBQUVsQixDQUFDO0FBRWNBLDJFQUFZIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0FsdGkvUmVzcG9uc2UvbW9kZWwvQWx0aVJlc3BvbnNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNwb25zZSBvYmplY3QgZm9yIHtAbGluayBtb2R1bGU6U2VydmljZXN+Z2V0QWx0aXR1ZGUgR3AuU2VydmljZXMuZ2V0QWx0aXR1ZGUgKCl9IGludm9jYXRpb24gd2hlbiBzdWNjZXNzZnVsLiBSZWNlaXZlZCBhcyB0aGUgYXJndW1lbnQgb2Ygb25TdWNjZXNzIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPEdwLlNlcnZpY2VzLkFsdGkuRWxldmF0aW9uPn0gZWxldmF0aW9ucyAtIEVsZXZhdGlvbnMgYXJyYXkuXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkFsdGlSZXNwb25zZVxuICovXG5mdW5jdGlvbiBBbHRpUmVzcG9uc2UgKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBbHRpUmVzcG9uc2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBbHRpUmVzcG9uc2UgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmVsZXZhdGlvbnMgPSBbXTtcbn1cblxuQWx0aVJlc3BvbnNlLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yIDogQWx0aVJlc3BvbnNlXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFsdGlSZXNwb25zZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Response/model/AltiResponse.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Response/model/Elevation.js": +/*!*******************************************************!*\ + !*** ./src/Services/Alti/Response/model/Elevation.js ***! + \*******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if \"zonly\" parameter wasn't set to true.\n *\n * @property {Float} lat - Point latitude. (only if zonly=false)\n * @property {Float} lon - Point longitude. (only if zonly=false)\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Elevation\n */\nfunction Elevation() {\n if (!(this instanceof Elevation)) {\n throw new TypeError(\"Elevation constructor cannot be called as a function.\");\n }\n this.z = null;\n}\nElevation.prototype = {\n constructor: Elevation\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Elevation);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL21vZGVsL0VsZXZhdGlvbi5qcz82NTZhIl0sIm5hbWVzIjpbIkVsZXZhdGlvbiIsIlR5cGVFcnJvciIsInoiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBU0EsQ0FBQSxFQUFJO0VBQ2xCLElBQUksRUFBRSxJQUFJLFlBQVlBLFNBQVMsQ0FBQyxFQUFFO0lBQzlCLE1BQU0sSUFBSUMsU0FBUyxDQUFDLHVEQUF1RCxDQUFDO0VBQ2hGO0VBRUEsSUFBSSxDQUFDQyxDQUFDLEdBQUcsSUFBSTtBQUNqQjtBQUVBRixTQUFTLENBQUNHLFNBQVMsR0FBRztFQUVsQkMsV0FBVyxFQUFHSjtBQUVsQixDQUFDO0FBRWNBLHdFQUFTIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0FsdGkvUmVzcG9uc2UvbW9kZWwvRWxldmF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFNpbmdsZSBlbGV2YXRpb24gb2JqZWN0IHJldHVybmVkIGJ5IHVuZGVybHlpbmcgd2ViIHNlcnZpY2UuIENvbnRhaW5zIGF0IGxlYXN0LCBvbmUgZWxldmF0aW9uICh6KS4gTWF5IGFsc28gY29udGFpbiBwb2ludCBjb29yZGluYXRlcyBhbmQgZWxldmF0aW9uIGFjY3VyYWN5IGlmIFwiem9ubHlcIiBwYXJhbWV0ZXIgd2Fzbid0IHNldCB0byB0cnVlLlxuICpcbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IGxhdCAtIFBvaW50IGxhdGl0dWRlLiAob25seSBpZiB6b25seT1mYWxzZSlcbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IGxvbiAtIFBvaW50IGxvbmdpdHVkZS4gKG9ubHkgaWYgem9ubHk9ZmFsc2UpXG4gKiBAcHJvcGVydHkge0Zsb2F0fSB6IC0gUG9pbnQgZWxldmF0aW9uLlxuICogQHByb3BlcnR5IHtGbG9hdH0gYWNjIC0gQWNjdXJhY3kgb2YgZWxldmF0aW9uIGZvciB0aGlzIHBvaW50LiAob25seSBpZiB6b25seT1mYWxzZSlcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuQWx0aS5FbGV2YXRpb25cbiAqL1xuZnVuY3Rpb24gRWxldmF0aW9uICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRWxldmF0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRWxldmF0aW9uIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy56ID0gbnVsbDtcbn1cblxuRWxldmF0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yIDogRWxldmF0aW9uXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVsZXZhdGlvbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Response/model/Elevation.js\n"); + +/***/ }), + +/***/ "./src/Services/Alti/Response/model/Measure.js": +/*!*****************************************************!*\ + !*** ./src/Services/Alti/Response/model/Measure.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Single measure object returned by underlying web service if measures = true and zonly = false\n *\n * @property {String} source_name - Name of the source\n * @property {String} source_measure - Name of the measure\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Measure\n */\nfunction Measure() {\n if (!(this instanceof Measure)) {\n throw new TypeError(\"Measure constructor cannot be called as a function.\");\n }\n this.source_name = null;\n this.source_measure = null;\n this.z = null;\n this.acc = null;\n}\nMeasure.prototype = {\n constructor: Measure\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Measure);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BbHRpL1Jlc3BvbnNlL21vZGVsL01lYXN1cmUuanM/ZTNiMSJdLCJuYW1lcyI6WyJNZWFzdXJlIiwiVHlwZUVycm9yIiwic291cmNlX25hbWUiLCJzb3VyY2VfbWVhc3VyZSIsInoiLCJhY2MiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsT0FBT0EsQ0FBQSxFQUFJO0VBQ2hCLElBQUksRUFBRSxJQUFJLFlBQVlBLE9BQU8sQ0FBQyxFQUFFO0lBQzVCLE1BQU0sSUFBSUMsU0FBUyxDQUFDLHFEQUFxRCxDQUFDO0VBQzlFO0VBRUEsSUFBSSxDQUFDQyxXQUFXLEdBQUcsSUFBSTtFQUN2QixJQUFJLENBQUNDLGNBQWMsR0FBRyxJQUFJO0VBQzFCLElBQUksQ0FBQ0MsQ0FBQyxHQUFHLElBQUk7RUFDYixJQUFJLENBQUNDLEdBQUcsR0FBRyxJQUFJO0FBQ25CO0FBRUFMLE9BQU8sQ0FBQ00sU0FBUyxHQUFHO0VBRWhCQyxXQUFXLEVBQUdQO0FBRWxCLENBQUM7QUFFY0Esc0VBQU8iLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvQWx0aS9SZXNwb25zZS9tb2RlbC9NZWFzdXJlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFNpbmdsZSBtZWFzdXJlIG9iamVjdCByZXR1cm5lZCBieSB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlIGlmIG1lYXN1cmVzID0gdHJ1ZSBhbmQgem9ubHkgPSBmYWxzZVxuICpcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzb3VyY2VfbmFtZSAtIE5hbWUgb2YgdGhlIHNvdXJjZVxuICogQHByb3BlcnR5IHtTdHJpbmd9IHNvdXJjZV9tZWFzdXJlIC0gTmFtZSBvZiB0aGUgbWVhc3VyZVxuICogQHByb3BlcnR5IHtGbG9hdH0geiAtIFBvaW50IGVsZXZhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IGFjYyAtIEFjY3VyYWN5IG9mIGVsZXZhdGlvbiBmb3IgdGhpcyBwb2ludC4gKG9ubHkgaWYgem9ubHk9ZmFsc2UpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkFsdGkuTWVhc3VyZVxuICovXG5mdW5jdGlvbiBNZWFzdXJlICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWVhc3VyZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1lYXN1cmUgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZV9uYW1lID0gbnVsbDtcbiAgICB0aGlzLnNvdXJjZV9tZWFzdXJlID0gbnVsbDtcbiAgICB0aGlzLnogPSBudWxsO1xuICAgIHRoaXMuYWNjID0gbnVsbDtcbn1cblxuTWVhc3VyZS5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvciA6IE1lYXN1cmVcblxufTtcblxuZXhwb3J0IGRlZmF1bHQgTWVhc3VyZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Alti/Response/model/Measure.js\n"); + +/***/ }), + +/***/ "./src/Services/AutoComplete/AutoComplete.js": +/*!***************************************************!*\ + !*** ./src/Services/AutoComplete/AutoComplete.js ***! + \***************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Response_AutoCompleteResponseFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Response/AutoCompleteResponseFactory */ \"./src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js\");\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Utils/Helper */ \"./src/Utils/Helper.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n\n\n\n\n\n\n\n\n/**\n * @classdesc\n * Appel du service d'autocomplétion du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.AutoComplete\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.text - La chaîne de caractère à compléter.\n * Cette chaîne n'est pas \"URL encodée\".\n * C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête.\n *\n * @param {Array.} [options.type = [\"StreetAddress\"]] - Type de l'objet recherché.\n * Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, type = ['StreetAddress'].\n *\n * @param {String} [options.territory] - Limitation de la zone de recherche de localisants.\n * Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE',\n * DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31'\n * Pas de valeur par défaut.\n * La valeur par défaut est donc celle du service.\n * Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié.\n *\n * @param {Number} [options.maximumResponses = 10] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * La valeur par défaut sera donc celle du service : 10.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * text : \"\",\n * type : \"StreetAddress\",\n * territory : 'METROPOLE',\n * maximumResponses : 10\n * };\n */\nfunction AutoComplete(options_) {\n if (!(this instanceof AutoComplete)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"AutoComplete\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"AutoComplete\";\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getLogger(\"Gp.Services.AutoComplete\");\n this.logger.trace(\"[Constructeur AutoComplete (options)]\");\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__[\"default\"].AutoComplete.newUrl();\n }\n\n // appel du constructeur par heritage\n _CommonService__WEBPACK_IMPORTED_MODULE_0__[\"default\"].apply(this, arguments);\n if (!options.text) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getMessage(\"PARAM_MISSING\", \"text\"));\n }\n\n // ajout des options spécifiques au service\n this.options.text = options.text;\n\n // on definit des parametres par defaut\n if (!options.type) {\n options.type = [\"StreetAddress,PositionOfInterest\"];\n }\n this.options.type = options.type;\n this.options.territory = options.terr || \"\";\n this.options.maximumResponses = options.maximumResponses || 10;\n\n // INFO\n // le service ne repond pas en mode POST (405 Method Not Allowed)\n if (this.options.protocol === \"XHR\" && this.options.httpMethod === \"POST\") {\n this.logger.warn(\"Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !\");\n this.options.httpMethod = \"GET\"; // on surcharge !\n }\n\n // attributs d'instances\n\n /**\n * Format forcé de la réponse du service : \"json\"\n * sauf si l'on souhaite une reponse brute (options.rawResponse)\n */\n this.options.outputFormat = this.options.rawResponse ? \"\" : \"json\";\n}\n\n/**\n * @lends module:AutoComplete#\n */\n\nAutoComplete.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nAutoComplete.prototype.constructor = AutoComplete;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nAutoComplete.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.type) {\n options.type = options.filterOptions.type;\n }\n }\n if (options.filterOptions.territory) {\n this.logger.warn(\"The parameter 'filterOptions.territory' is deprecated\");\n if (!options.terr) {\n options.terr = options.filterOptions.territory;\n }\n }\n delete options.filterOptions;\n }\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAutoComplete.prototype.buildRequest = function (error, success) {\n // ex.\n // http://wxs.ign.fr/CLEF/ols/apis/completion?\n // text=Brie-Comt&\n // type=StreetAddress,PositionOfInterest&\n // territory=METROPOLE&\n // maximumResponses=10\n\n // traitement des param KPV sous forme de tableau\n var territory = \"\";\n if (this.options.territory) {\n territory = this.options.territory;\n }\n var type = \"\";\n if (this.options.type) {\n type = this.options.type.join(\",\");\n }\n\n // normalisation de la requete avec param KPV\n this.request = _Utils_Helper__WEBPACK_IMPORTED_MODULE_5__[\"default\"].normalyzeParameters({\n text: encodeURIComponent(this.options.text),\n type: type,\n terr: territory,\n maximumResponses: this.options.maximumResponses\n });\n !this.request ? error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getMessage(\"SERVICE_REQUEST_BUILD\"))) : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback de succès de l'analyse de la réponse\n */\nAutoComplete.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response: this.response,\n rawResponse: this.options.rawResponse,\n onSuccess: success,\n onError: error,\n scope: this\n };\n _Response_AutoCompleteResponseFactory__WEBPACK_IMPORTED_MODULE_2__[\"default\"].build(options);\n } else {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AutoComplete);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BdXRvQ29tcGxldGUvQXV0b0NvbXBsZXRlLmpzP2YyN2UiXSwibmFtZXMiOlsiQXV0b0NvbXBsZXRlIiwib3B0aW9uc18iLCJUeXBlRXJyb3IiLCJNUiIsImdldE1lc3NhZ2UiLCJDTEFTU05BTUUiLCJsb2dnZXIiLCJMb2dnZXIiLCJnZXRMb2dnZXIiLCJ0cmFjZSIsIm9wdGlvbnMiLCJwYXRjaE9wdGlvbkNvbnZlcnRvciIsInNlcnZlclVybCIsIkRlZmF1bHRVcmxTZXJ2aWNlIiwibmV3VXJsIiwiQ29tbW9uU2VydmljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwidGV4dCIsIkVycm9yIiwidHlwZSIsInRlcnJpdG9yeSIsInRlcnIiLCJtYXhpbXVtUmVzcG9uc2VzIiwicHJvdG9jb2wiLCJodHRwTWV0aG9kIiwid2FybiIsIm91dHB1dEZvcm1hdCIsInJhd1Jlc3BvbnNlIiwicHJvdG90eXBlIiwiT2JqZWN0IiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJmaWx0ZXJPcHRpb25zIiwiYnVpbGRSZXF1ZXN0IiwiZXJyb3IiLCJzdWNjZXNzIiwiam9pbiIsInJlcXVlc3QiLCJIZWxwZXIiLCJub3JtYWx5emVQYXJhbWV0ZXJzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY2FsbCIsIkVycm9yU2VydmljZSIsImFuYWx5emVSZXNwb25zZSIsInJlc3BvbnNlIiwib25TdWNjZXNzIiwib25FcnJvciIsInNjb3BlIiwiQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5IiwiYnVpbGQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkM7QUFDUTtBQUM0QjtBQUNoQztBQUNGO0FBQ1A7QUFDaUI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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RUFBWSxDQUFDeEMsZ0VBQUUsQ0FBQ0MsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztFQUMvRTtBQUNKLENBQUM7QUFFY0osMkVBQVkiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvQXV0b0NvbXBsZXRlL0F1dG9Db21wbGV0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25TZXJ2aWNlIGZyb20gXCIuLi9Db21tb25TZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdFVybFNlcnZpY2UgZnJvbSBcIi4uL0RlZmF1bHRVcmxTZXJ2aWNlXCI7XG5pbXBvcnQgQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5IGZyb20gXCIuL1Jlc3BvbnNlL0F1dG9Db21wbGV0ZVJlc3BvbnNlRmFjdG9yeVwiO1xuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgTVIgZnJvbSBcIi4uLy4uL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzXCI7XG5pbXBvcnQgSGVscGVyIGZyb20gXCIuLi8uLi9VdGlscy9IZWxwZXJcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICogQXBwZWwgZHUgc2VydmljZSBkJ2F1dG9jb21wbMOpdGlvbiBkdSBHw6lvcG9ydGFpbCA6XG4gKiBlbnZvaSBkZSBsYSByZXF1w6p0ZSBjb25zdHJ1aXRlIHNlbG9uIGxlcyBwYXJhbcOodHJlcyBlbiBvcHRpb25zLFxuICogw6l2ZW50dWVsbGVtZW50IHBhcnNpbmcgZXQgYW5hbHlzZSAgZGUgbGEgcsOpcG9uc2UsXG4gKiByZXRvdXIgZCd1bmUgcsOpcG9uc2UgZW4gcGFyYW3DqHRyZSBkZSBsYSBmb25jdGlvbiBvblN1Y2Nlc3MuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIHtHcC5TZXJ2aWNlcy5Db21tb25TZXJ2aWNlfVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkF1dG9Db21wbGV0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBzcMOpY2lmaXF1ZXMgYXUgc2VydmljZSAoKyBsZXMgb3B0aW9ucyBoZXJpdMOpZXMpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMudGV4dCAtIExhIGNoYcOubmUgZGUgY2FyYWN0w6hyZSDDoCBjb21wbMOpdGVyLlxuICogICAgICBDZXR0ZSBjaGHDrm5lIG4nZXN0IHBhcyBcIlVSTCBlbmNvZMOpZVwiLlxuICogICAgICBDJ2VzdCBsJ0FQSSBxdWkgcydvY2N1cGUgZGUgbCdlbmNvZGVyIHBvdXIgbCdpbmNsdXJlIGRhbnMgbGEgcmVxdcOqdGUuXG4gKlxuICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW29wdGlvbnMudHlwZSA9IFtcIlN0cmVldEFkZHJlc3NcIl1dIC0gVHlwZSBkZSBsJ29iamV0IHJlY2hlcmNow6kuXG4gKiAgICAgIExlIHNlcnZpY2UgZCdhdXRvY29tcGzDqXRpb24gZHUgR8Opb3BvcnRhaWwgcGVybWV0IGRlIHJlY2hlcmNoZXIgZGVzIHRvcG9ueW1lcyAnUG9zaXRpb25PZkludGVyZXN0JyBldC9vdSBkZXMgYWRyZXNzZXMgcG9zdGFsZXMgJ1N0cmVldEFkZHJlc3MnLlxuICogICAgICBEJ2F1dHJlcyB0eXBlcyBwb3Vycm9udCDDqnRyZSByYWpvdXTDqXMgc2Vsb24gbCfDqXZvbHV0aW9uIGR1IHNlcnZpY2UuXG4gKiAgICAgIFBhciBkw6lmYXV0LCB0eXBlID0gWydTdHJlZXRBZGRyZXNzJ10uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRlcnJpdG9yeV0gLSBMaW1pdGF0aW9uIGRlIGxhIHpvbmUgZGUgcmVjaGVyY2hlIGRlIGxvY2FsaXNhbnRzLlxuICogICAgICBMZSBzZXJ2aWNlIGQnYXV0b2NvbXBsw6l0aW9uIGR1IEfDqW9wb3J0YWlsIHBlcm1ldCBkZSBsaW1pdGVyIGxhIHJlY2hlcmNoZSDDoCBsYSBtw6l0cm9wb2xlIGV0IGxhIENvcnNlIDogb3B0aW9ucy50ZXJyaXRvcnkgPSAnTUVUUk9QT0xFJyxcbiAqICAgICAgRE9NUyBUT01TIDogb3B0aW9ucy50ZXJyaXRvcnkgPSAnRE9NVE9NJywgb3Ugw6AgdW4gZMOpcGFydGVtZW50IDogb3B0aW9ucy50ZXJyaXRvcnkgPSAnMzEnXG4gKiAgICAgIFBhcyBkZSB2YWxldXIgcGFyIGTDqWZhdXQuXG4gKiAgICAgIExhIHZhbGV1ciBwYXIgZMOpZmF1dCBlc3QgZG9uYyBjZWxsZSBkdSBzZXJ2aWNlLlxuICogICAgICBMZSBzZXJ2aWNlIGQnYXV0b2NvbXBsw6l0aW9uIGR1IEfDqW9wb3J0YWlsIHJlbnZvaWUgdG91dGVzIGxlcyBpbmZvcm1hdGlvbnMgcXVhbmQgYXVjdW4gdGVycml0b2lyZSBuJ2VzdCBzcMOpY2lmacOpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhpbXVtUmVzcG9uc2VzID0gMTBdIC0gTm9tYnJlIGRlIHLDqXBvbnNlcyBtYXhpbWFsIHF1ZSBsJ29uIHNvdWhhaXRlIHJlY2V2b2lyLlxuICogICAgICBQYXMgZGUgdmFsZXVyIHBhciBkw6lmYXV0LlxuICogICAgICBMYSB2YWxldXIgcGFyIGTDqWZhdXQgc2VyYSBkb25jIGNlbGxlIGR1IHNlcnZpY2UgOiAxMC5cbiAqXG4gKiBAZXhhbXBsZVxuICogICB2YXIgb3B0aW9ucyA9IHtcbiAqICAgICAgLy8gb3B0aW9ucyBjb21tdW5lcyBhdXggc2VydmljZXNcbiAqICAgICAgYXBpS2V5IDogbnVsbCxcbiAqICAgICAgc2VydmVyVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Qvc2VydmljZS8nLFxuICogICAgICBwcm90b2NvbCA6ICdKU09OUCcsIC8vIEpTT05QfFhIUlxuICogICAgICBwcm94eVVSTCA6IG51bGwsXG4gKiAgICAgIGh0dHBNZXRob2QgOiAnR0VUJywgLy8gR0VUfFBPU1RcbiAqICAgICAgdGltZU91dCA6IDEwMDAwLCAvLyBtc1xuICogICAgICByYXdSZXNwb25zZSA6IGZhbHNlLCAvLyB0cnVlfGZhbHNlXG4gKiAgICAgIHNjb3BlIDogbnVsbCwgLy8gdGhpc1xuICogICAgICBvblN1Y2Nlc3MgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHt9LFxuICogICAgICBvbkZhaWx1cmUgOiBmdW5jdGlvbiAoZXJyb3IpIHt9LFxuICogICAgICAvLyBzcMOpY2lmaXF1ZSBhdSBzZXJ2aWNlXG4gKiAgICAgIHRleHQgOiBcIlwiLFxuICogICAgICB0eXBlIDogXCJTdHJlZXRBZGRyZXNzXCIsXG4gKiAgICAgIHRlcnJpdG9yeSA6ICdNRVRST1BPTEUnLFxuICogICAgICBtYXhpbXVtUmVzcG9uc2VzIDogMTBcbiAqICAgfTtcbiAqL1xuZnVuY3Rpb24gQXV0b0NvbXBsZXRlIChvcHRpb25zXykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoTVIuZ2V0TWVzc2FnZShcIkNMQVNTX0NPTlNUUlVDVE9SXCIsIFwiQXV0b0NvbXBsZXRlXCIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb20gZGUgbGEgY2xhc3NlIChoZXJpdGFnZSlcbiAgICAgKiBGSVhNRSBpbnN0YW5jZSBvdSBjbGFzc2UgP1xuICAgICAqL1xuICAgIHRoaXMuQ0xBU1NOQU1FID0gXCJBdXRvQ29tcGxldGVcIjtcblxuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIkdwLlNlcnZpY2VzLkF1dG9Db21wbGV0ZVwiKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShcIltDb25zdHJ1Y3RldXIgQXV0b0NvbXBsZXRlIChvcHRpb25zKV1cIik7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMucGF0Y2hPcHRpb25Db252ZXJ0b3Iob3B0aW9uc18pO1xuXG4gICAgaWYgKCFvcHRpb25zLnNlcnZlclVybCkge1xuICAgICAgICBvcHRpb25zLnNlcnZlclVybCA9IERlZmF1bHRVcmxTZXJ2aWNlLkF1dG9Db21wbGV0ZS5uZXdVcmwoKTtcbiAgICB9XG5cbiAgICAvLyBhcHBlbCBkdSBjb25zdHJ1Y3RldXIgcGFyIGhlcml0YWdlXG4gICAgQ29tbW9uU2VydmljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKCFvcHRpb25zLnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKE1SLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwidGV4dFwiKSk7XG4gICAgfVxuXG4gICAgLy8gYWpvdXQgZGVzIG9wdGlvbnMgc3DDqWNpZmlxdWVzIGF1IHNlcnZpY2VcbiAgICB0aGlzLm9wdGlvbnMudGV4dCA9IG9wdGlvbnMudGV4dDtcblxuICAgIC8vIG9uIGRlZmluaXQgZGVzIHBhcmFtZXRyZXMgcGFyIGRlZmF1dFxuICAgIGlmICghb3B0aW9ucy50eXBlKSB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFtcIlN0cmVldEFkZHJlc3MsUG9zaXRpb25PZkludGVyZXN0XCJdO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy50eXBlID0gb3B0aW9ucy50eXBlO1xuICAgIHRoaXMub3B0aW9ucy50ZXJyaXRvcnkgPSBvcHRpb25zLnRlcnIgfHwgXCJcIjtcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVJlc3BvbnNlcyA9IG9wdGlvbnMubWF4aW11bVJlc3BvbnNlcyB8fCAxMDtcblxuICAgIC8vIElORk9cbiAgICAvLyBsZSBzZXJ2aWNlIG5lIHJlcG9uZCBwYXMgZW4gbW9kZSBQT1NUICg0MDUgTWV0aG9kIE5vdCBBbGxvd2VkKVxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJvdG9jb2wgPT09IFwiWEhSXCIgJiYgdGhpcy5vcHRpb25zLmh0dHBNZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJMZSBzZXJ2aWNlIG5lIGfDqXJlIHBhcyBsZSBtb2RlIGQnaW50ZXJyb2dhdGlvbiBlbiBQT1NULCBvbiBiYXNjdWxlIHN1ciBkdSBHRVQgIVwiKTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmh0dHBNZXRob2QgPSBcIkdFVFwiOyAvLyBvbiBzdXJjaGFyZ2UgIVxuICAgIH1cblxuICAgIC8vIGF0dHJpYnV0cyBkJ2luc3RhbmNlc1xuXG4gICAgLyoqXG4gICAgICogRm9ybWF0IGZvcmPDqSBkZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlIDogXCJqc29uXCJcbiAgICAgKiBzYXVmIHNpIGwnb24gc291aGFpdGUgdW5lIHJlcG9uc2UgYnJ1dGUgKG9wdGlvbnMucmF3UmVzcG9uc2UpXG4gICAgICovXG4gICAgdGhpcy5vcHRpb25zLm91dHB1dEZvcm1hdCA9ICh0aGlzLm9wdGlvbnMucmF3UmVzcG9uc2UpID8gXCJcIiA6IFwianNvblwiO1xufVxuXG4vKipcbiAqIEBsZW5kcyBtb2R1bGU6QXV0b0NvbXBsZXRlI1xuICovXG5cbkF1dG9Db21wbGV0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbW1vblNlcnZpY2UucHJvdG90eXBlLCB7XG4gICAgLy8gdG9kb1xuICAgIC8vIGdldHRlci9zZXR0ZXJcbn0pO1xuXG4vKlxuICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAqL1xuQXV0b0NvbXBsZXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEF1dG9Db21wbGV0ZTtcblxuLyoqXG4gKiBQYXRjaCBwb3VyIGxhIGNvbnZlcnRpb24gZGVzIG9wdGlvbnMgdmVycyBsZSBub3V2ZWF1IGZvcm1hbGlzbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNfIC0gb3B0aW9ucyBkdSBzZXJ2aWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gb3B0aW9uc1xuICovXG5BdXRvQ29tcGxldGUucHJvdG90eXBlLnBhdGNoT3B0aW9uQ29udmVydG9yID0gZnVuY3Rpb24gKG9wdGlvbnNfKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNfO1xuXG4gICAgaWYgKG9wdGlvbnMuZmlsdGVyT3B0aW9ucykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiVGhlIHBhcmFtZXRlciAnZmlsdGVyT3B0aW9ucycgaXMgZGVwcmVjYXRlZFwiKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5maWx0ZXJPcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdmaWx0ZXJPcHRpb25zLnR5cGUnIGlzIGRlcHJlY2F0ZWRcIik7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudHlwZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9IG9wdGlvbnMuZmlsdGVyT3B0aW9ucy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyT3B0aW9ucy50ZXJyaXRvcnkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdmaWx0ZXJPcHRpb25zLnRlcnJpdG9yeScgaXMgZGVwcmVjYXRlZFwiKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy50ZXJyKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50ZXJyID0gb3B0aW9ucy5maWx0ZXJPcHRpb25zLnRlcnJpdG9yeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmZpbHRlck9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG59O1xuXG4vKipcbiAqIChvdmVyd3JpdGUpXG4gKiBDcsOpYXRpb24gZGUgbGEgcmVxdcOqdGVcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvciAgIC0gY2FsbGJhY2sgZGVzIGVycmV1cnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgLSBjYWxsYmFja1xuICovXG5BdXRvQ29tcGxldGUucHJvdG90eXBlLmJ1aWxkUmVxdWVzdCA9IGZ1bmN0aW9uIChlcnJvciwgc3VjY2Vzcykge1xuICAgIC8vIGV4LlxuICAgIC8vIGh0dHA6Ly93eHMuaWduLmZyL0NMRUYvb2xzL2FwaXMvY29tcGxldGlvbj9cbiAgICAvLyB0ZXh0PUJyaWUtQ29tdCZcbiAgICAvLyB0eXBlPVN0cmVldEFkZHJlc3MsUG9zaXRpb25PZkludGVyZXN0JlxuICAgIC8vIHRlcnJpdG9yeT1NRVRST1BPTEUmXG4gICAgLy8gbWF4aW11bVJlc3BvbnNlcz0xMFxuXG4gICAgLy8gdHJhaXRlbWVudCBkZXMgcGFyYW0gS1BWIHNvdXMgZm9ybWUgZGUgdGFibGVhdVxuICAgIHZhciB0ZXJyaXRvcnkgPSBcIlwiO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudGVycml0b3J5KSB7XG4gICAgICAgIHRlcnJpdG9yeSA9IHRoaXMub3B0aW9ucy50ZXJyaXRvcnk7XG4gICAgfVxuXG4gICAgdmFyIHR5cGUgPSBcIlwiO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSkge1xuICAgICAgICB0eXBlID0gdGhpcy5vcHRpb25zLnR5cGUuam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXNhdGlvbiBkZSBsYSByZXF1ZXRlIGF2ZWMgcGFyYW0gS1BWXG4gICAgdGhpcy5yZXF1ZXN0ID0gSGVscGVyLm5vcm1hbHl6ZVBhcmFtZXRlcnMoe1xuICAgICAgICB0ZXh0IDogZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMub3B0aW9ucy50ZXh0KSxcbiAgICAgICAgdHlwZSA6IHR5cGUsXG4gICAgICAgIHRlcnIgOiB0ZXJyaXRvcnksXG4gICAgICAgIG1heGltdW1SZXNwb25zZXMgOiB0aGlzLm9wdGlvbnMubWF4aW11bVJlc3BvbnNlc1xuICAgIH0pO1xuXG4gICAgKCF0aGlzLnJlcXVlc3QpXG4gICAgICAgID8gZXJyb3IuY2FsbCh0aGlzLCBuZXcgRXJyb3JTZXJ2aWNlKE1SLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFUVVFU1RfQlVJTERcIikpKVxuICAgICAgICA6IHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnJlcXVlc3QpO1xufTtcblxuLyoqXG4gKiAob3ZlcndyaXRlKVxuICogQW5hbHlzZSBkZSBsYSByZXBvbnNlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2sgZGUgc3VjY8OocyBkZSBsJ2FuYWx5c2UgZGUgbGEgcsOpcG9uc2VcbiAqL1xuQXV0b0NvbXBsZXRlLnByb3RvdHlwZS5hbmFseXplUmVzcG9uc2UgPSBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHJlc3BvbnNlIDogdGhpcy5yZXNwb25zZSxcbiAgICAgICAgICAgIHJhd1Jlc3BvbnNlIDogdGhpcy5vcHRpb25zLnJhd1Jlc3BvbnNlLFxuICAgICAgICAgICAgb25TdWNjZXNzIDogc3VjY2VzcyxcbiAgICAgICAgICAgIG9uRXJyb3IgOiBlcnJvcixcbiAgICAgICAgICAgIHNjb3BlIDogdGhpc1xuICAgICAgICB9O1xuXG4gICAgICAgIEF1dG9Db21wbGV0ZVJlc3BvbnNlRmFjdG9yeS5idWlsZChvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvclNlcnZpY2UoTVIuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlcIikpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdXRvQ29tcGxldGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/AutoComplete/AutoComplete.js\n"); + +/***/ }), + +/***/ "./src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js": +/*!***************************************************************************!*\ + !*** ./src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js ***! + \***************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./model/AutoCompleteResponse */ \"./src/Services/AutoComplete/Response/model/AutoCompleteResponse.js\");\n/* harmony import */ var _model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./model/SuggestedLocation */ \"./src/Services/AutoComplete/Response/model/SuggestedLocation.js\");\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AutoCompleteResponseFactory\n * @private\n * @alias Gp.Services.AutoComplete.Response.AutoCompleteResponseFactory\n */\n\n\n\n\n\nvar AutoCompleteResponseFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"AutoCompleteResponseFactory\");\n logger.trace([\"AutoCompleteResponseFactory::build()\"]);\n var data = null;\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la réponse\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.error) {\n // ex. ?\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status: JSONResponse.error.code,\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR\n }));\n return;\n }\n\n // création de l'objet réponse\n data = new _model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n\n // boucle sur les résultats de l'autocomplétion\n if (JSONResponse.results && Array.isArray(JSONResponse.results)) {\n var suggestedLocation = null;\n for (var i = 0; i < JSONResponse.results.length; i++) {\n var result = JSONResponse.results[i];\n suggestedLocation = new _model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n if (result) {\n if (result.country === \"StreetAddress\") {\n suggestedLocation.street = result.street;\n suggestedLocation.type = \"StreetAddress\";\n } else if (result.country === \"PositionOfInterest\") {\n suggestedLocation.poi = result.street;\n suggestedLocation.type = \"PositionOfInterest\";\n suggestedLocation.poiType = result.poiType;\n }\n if (suggestedLocation.position) {\n suggestedLocation.position.x = result.x;\n suggestedLocation.position.y = result.y;\n }\n suggestedLocation.kind = result.kind;\n suggestedLocation.commune = result.city;\n suggestedLocation.fullText = result.fulltext;\n suggestedLocation.postalCode = result.zipcode;\n suggestedLocation.classification = result.classification;\n }\n // Ajout du résultat au tableau reverseGeocodedLocations de geocodedLocation\n data.suggestedLocations.push(suggestedLocation);\n }\n } else {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n if (!data.suggestedLocations.length) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n }\n if (!data) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_UNKERR,\n status: -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR,\n status: 200\n }));\n return;\n }\n }\n } else {\n // si la réponse (xmlString) est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AutoCompleteResponseFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BdXRvQ29tcGxldGUvUmVzcG9uc2UvQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5LmpzPzdhZTMiXSwibmFtZXMiOlsiQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJkYXRhIiwicmVzcG9uc2UiLCJyYXdSZXNwb25zZSIsIkpTT05SZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsImVycm9yIiwib25FcnJvciIsImNhbGwiLCJzY29wZSIsIkVycm9yU2VydmljZSIsIm1lc3NhZ2UiLCJNUmVzIiwiZ2V0TWVzc2FnZSIsImRlc2NyaXB0aW9uIiwic3RhdHVzIiwiY29kZSIsInR5cGUiLCJUWVBFX1NSVkVSUiIsIkF1dG9Db21wbGV0ZVJlc3BvbnNlIiwicmVzdWx0cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3RlZExvY2F0aW9uIiwiaSIsImxlbmd0aCIsInJlc3VsdCIsIlN1Z2dlc3RlZExvY2F0aW9uIiwiY291bnRyeSIsInN0cmVldCIsInBvaSIsInBvaVR5cGUiLCJwb3NpdGlvbiIsIngiLCJ5Iiwia2luZCIsImNvbW11bmUiLCJjaXR5IiwiZnVsbFRleHQiLCJmdWxsdGV4dCIsInBvc3RhbENvZGUiLCJ6aXBjb2RlIiwiY2xhc3NpZmljYXRpb24iLCJzdWdnZXN0ZWRMb2NhdGlvbnMiLCJwdXNoIiwiVFlQRV9VTktFUlIiLCJleGNlcHRpb25SZXBvcnQiLCJvblN1Y2Nlc3MiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDb0Q7QUFDQTtBQUNRO0FBQ0k7QUFDTjtBQUUxRCxJQUFJQSwyQkFBMkIsR0FBRztFQUU5QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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SUFBSWYsSUFBSSxDQUFDOEMsZUFBZSxFQUFFO1VBQ3RCbkQsT0FBTyxDQUFDWSxPQUFPLENBQUNDLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUUsSUFBSUMsZ0VBQVksQ0FBQztZQUNqREMsT0FBTyxFQUFHQyxnRUFBSSxDQUFDQyxVQUFVLENBQUMsNEJBQTRCLEVBQUViLElBQUksQ0FBQzhDLGVBQWUsQ0FBQztZQUM3RTdCLElBQUksRUFBR1AsZ0VBQVksQ0FBQ1EsV0FBVztZQUMvQkgsTUFBTSxFQUFHO1VBQ2IsQ0FBQyxDQUFDLENBQUM7VUFDSDtRQUNKO01BQ0o7SUFDSixDQUFDLE1BQU07TUFDSDtNQUNBcEIsT0FBTyxDQUFDWSxPQUFPLENBQUNDLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUUsSUFBSUMsZ0VBQVksQ0FBQ0UsZ0VBQUksQ0FBQ0MsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztNQUNoRztJQUNKOztJQUVBO0lBQ0FsQixPQUFPLENBQUNvRCxTQUFTLENBQUN2QyxJQUFJLENBQUNiLE9BQU8sQ0FBQ2MsS0FBSyxFQUFFVCxJQUFJLENBQUM7RUFDL0M7QUFDSixDQUFDO0FBRWNQLDBGQUEyQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9BdXRvQ29tcGxldGUvUmVzcG9uc2UvQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGYWN0b3J5IHBvdXIgZ8OpbsOpcmVyIHVuZSByZXBvbnNlIEpTT04gw6AgcGFydGlyIGQndW4gWE1MIG91IGQndW4gSlNPTlxuICogKEZhY3RvcnkpXG4gKlxuICogQG1vZHVsZSBBdXRvQ29tcGxldGVSZXNwb25zZUZhY3RvcnlcbiAqIEBwcml2YXRlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuQXV0b0NvbXBsZXRlLlJlc3BvbnNlLkF1dG9Db21wbGV0ZVJlc3BvbnNlRmFjdG9yeVxuICovXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBNUmVzIGZyb20gXCIuLi8uLi8uLi9VdGlscy9NZXNzYWdlc1Jlc291cmNlc1wiO1xuaW1wb3J0IEVycm9yU2VydmljZSBmcm9tIFwiLi4vLi4vLi4vRXhjZXB0aW9ucy9FcnJvclNlcnZpY2VcIjtcbmltcG9ydCBBdXRvQ29tcGxldGVSZXNwb25zZSBmcm9tIFwiLi9tb2RlbC9BdXRvQ29tcGxldGVSZXNwb25zZVwiO1xuaW1wb3J0IFN1Z2dlc3RlZExvY2F0aW9uIGZyb20gXCIuL21vZGVsL1N1Z2dlc3RlZExvY2F0aW9uXCI7XG5cbnZhciBBdXRvQ29tcGxldGVSZXNwb25zZUZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBBbHRpXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICogICAgICByZXNwb25zZSA6XG4gICAgICogICAgICBvdXRwdXRGb3JtYXQgOlxuICAgICAqICAgICAgcmF3UmVzcG9uc2UgOlxuICAgICAqICAgICAgc2NvcGUgOlxuICAgICAqICAgICAgb25TdWNjZXNzIDpcbiAgICAgKiAgICAgIG9uRXJyb3IgOlxuICAgICAqICAgfTtcbiAgICAgKlxuICAgICAqL1xuICAgIGJ1aWxkIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbG9nZ2VyXG4gICAgICAgIHZhciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5XCIpO1xuICAgICAgICBsb2dnZXIudHJhY2UoW1wiQXV0b0NvbXBsZXRlUmVzcG9uc2VGYWN0b3J5OjpidWlsZCgpXCJdKTtcblxuICAgICAgICB2YXIgZGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJhd1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKFwiYW5hbHl6ZSByZXNwb25zZSA6IHJhd1wiKTtcbiAgICAgICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIEpTT05SZXNwb25zZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlc3BvbnNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIEpTT05SZXNwb25zZSA9IEpTT04ucGFyc2Uob3B0aW9ucy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgSlNPTlJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhbmFseXNlIGRlIGxhIHLDqXBvbnNlXG4gICAgICAgICAgICAgICAgaWYgKEpTT05SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsZSBzZXJ2aWNlIHJlbnZvaWUgdCBpbCB1bmUgZXJyZXVyID9cbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05SZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXguID9cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTlwiLCBKU09OUmVzcG9uc2UuZXJyb3IuZGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IEpTT05SZXNwb25zZS5lcnJvci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiBFcnJvclNlcnZpY2UuVFlQRV9TUlZFUlJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyw6lhdGlvbiBkZSBsJ29iamV0IHLDqXBvbnNlXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgQXV0b0NvbXBsZXRlUmVzcG9uc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBib3VjbGUgc3VyIGxlcyByw6lzdWx0YXRzIGRlIGwnYXV0b2NvbXBsw6l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OUmVzcG9uc2UucmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KEpTT05SZXNwb25zZS5yZXN1bHRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1Z2dlc3RlZExvY2F0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBKU09OUmVzcG9uc2UucmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OUmVzcG9uc2UucmVzdWx0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRMb2NhdGlvbiA9IG5ldyBTdWdnZXN0ZWRMb2NhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50cnkgPT09IFwiU3RyZWV0QWRkcmVzc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRMb2NhdGlvbi5zdHJlZXQgPSByZXN1bHQuc3RyZWV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkTG9jYXRpb24udHlwZSA9IFwiU3RyZWV0QWRkcmVzc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5jb3VudHJ5ID09PSBcIlBvc2l0aW9uT2ZJbnRlcmVzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRMb2NhdGlvbi5wb2kgPSByZXN1bHQuc3RyZWV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkTG9jYXRpb24udHlwZSA9IFwiUG9zaXRpb25PZkludGVyZXN0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRMb2NhdGlvbi5wb2lUeXBlID0gcmVzdWx0LnBvaVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGVkTG9jYXRpb24ucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExvY2F0aW9uLnBvc2l0aW9uLnggPSByZXN1bHQueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExvY2F0aW9uLnBvc2l0aW9uLnkgPSByZXN1bHQueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExvY2F0aW9uLmtpbmQgPSByZXN1bHQua2luZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkTG9jYXRpb24uY29tbXVuZSA9IHJlc3VsdC5jaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRMb2NhdGlvbi5mdWxsVGV4dCA9IHJlc3VsdC5mdWxsdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkTG9jYXRpb24ucG9zdGFsQ29kZSA9IHJlc3VsdC56aXBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWRMb2NhdGlvbi5jbGFzc2lmaWNhdGlvbiA9IHJlc3VsdC5jbGFzc2lmaWNhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWpvdXQgZHUgcsOpc3VsdGF0IGF1IHRhYmxlYXUgcmV2ZXJzZUdlb2NvZGVkTG9jYXRpb25zIGRlIGdlb2NvZGVkTG9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN1Z2dlc3RlZExvY2F0aW9ucy5wdXNoKHN1Z2dlc3RlZExvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2UoTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9GT1JNQVRfM1wiKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLnN1Z2dlc3RlZExvY2F0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2UoTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9GT1JNQVRfM1wiKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6IE1SZXMuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfQU5BTFlTRV8yXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA6IEVycm9yU2VydmljZS5UWVBFX1VOS0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNpIGxhIHLDqXBvbnNlIGNvbnRlbmFpdCB1bmUgZXhjZXB0aW9uIHJlbnZvecOpZSBwYXIgbGUgc2VydmljZVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmV4Y2VwdGlvblJlcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTlwiLCBkYXRhLmV4Y2VwdGlvblJlcG9ydCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogRXJyb3JTZXJ2aWNlLlRZUEVfU1JWRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIDogMjAwXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNpIGxhIHLDqXBvbnNlICh4bWxTdHJpbmcpIGVzdCB2aWRlLCBvbiBhcHBlbGxlIGxlIGNhbGxiYWNrIGQnZXJyZXVyXG4gICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKE1SZXMuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlcIikpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNpIHRvdXQgcydlc3QgYmllbiBwYXNzw6ksIG9uIGFwcGVsbGUgbGUgY2FsbGJhY2sgZGUgc3VjY8Ooc1xuICAgICAgICBvcHRpb25zLm9uU3VjY2Vzcy5jYWxsKG9wdGlvbnMuc2NvcGUsIGRhdGEpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF1dG9Db21wbGV0ZVJlc3BvbnNlRmFjdG9yeTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/AutoComplete/Response/model/AutoCompleteResponse.js": +/*!**************************************************************************!*\ + !*** ./src/Services/AutoComplete/Response/model/AutoCompleteResponse.js ***! + \**************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Response object for {@link module:Services~autoComplete Gp.Services.autoComplete ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} suggestedLocations - SuggestedLocations array.\n *\n * @namespace\n * @alias Gp.Services.AutoCompleteResponse\n */\nfunction AutoCompleteResponse() {\n if (!(this instanceof AutoCompleteResponse)) {\n throw new TypeError(\"AutoCompleteResponse constructor cannot be called as a function.\");\n }\n this.suggestedLocations = [];\n}\nAutoCompleteResponse.prototype = {\n constructor: AutoCompleteResponse\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (AutoCompleteResponse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BdXRvQ29tcGxldGUvUmVzcG9uc2UvbW9kZWwvQXV0b0NvbXBsZXRlUmVzcG9uc2UuanM/NjViOSJdLCJuYW1lcyI6WyJBdXRvQ29tcGxldGVSZXNwb25zZSIsIlR5cGVFcnJvciIsInN1Z2dlc3RlZExvY2F0aW9ucyIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxvQkFBb0JBLENBQUEsRUFBSTtFQUM3QixJQUFJLEVBQUUsSUFBSSxZQUFZQSxvQkFBb0IsQ0FBQyxFQUFFO0lBQ3pDLE1BQU0sSUFBSUMsU0FBUyxDQUFDLGtFQUFrRSxDQUFDO0VBQzNGO0VBRUEsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxFQUFFO0FBQ2hDO0FBRUFGLG9CQUFvQixDQUFDRyxTQUFTLEdBQUc7RUFFN0JDLFdBQVcsRUFBR0o7QUFFbEIsQ0FBQztBQUVjQSxtRkFBb0IiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvQXV0b0NvbXBsZXRlL1Jlc3BvbnNlL21vZGVsL0F1dG9Db21wbGV0ZVJlc3BvbnNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNwb25zZSBvYmplY3QgZm9yIHtAbGluayBtb2R1bGU6U2VydmljZXN+YXV0b0NvbXBsZXRlIEdwLlNlcnZpY2VzLmF1dG9Db21wbGV0ZSAoKX0gaW52b2NhdGlvbiB3aGVuIHN1Y2Nlc3NmdWwuIFJlY2VpdmVkIGFzIHRoZSBhcmd1bWVudCBvZiBvblN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogQHByb3BlcnR5IHtBcnJheS48R3AuU2VydmljZXMuQXV0b0NvbXBsZXRlLlN1Z2dlc3RlZExvY2F0aW9uPn0gc3VnZ2VzdGVkTG9jYXRpb25zIC0gU3VnZ2VzdGVkTG9jYXRpb25zIGFycmF5LlxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5BdXRvQ29tcGxldGVSZXNwb25zZVxuICovXG5mdW5jdGlvbiBBdXRvQ29tcGxldGVSZXNwb25zZSAoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVJlc3BvbnNlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXV0b0NvbXBsZXRlUmVzcG9uc2UgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnN1Z2dlc3RlZExvY2F0aW9ucyA9IFtdO1xufVxuXG5BdXRvQ29tcGxldGVSZXNwb25zZS5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvciA6IEF1dG9Db21wbGV0ZVJlc3BvbnNlXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF1dG9Db21wbGV0ZVJlc3BvbnNlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/AutoComplete/Response/model/AutoCompleteResponse.js\n"); + +/***/ }), + +/***/ "./src/Services/AutoComplete/Response/model/SuggestedLocation.js": +/*!***********************************************************************!*\ + !*** ./src/Services/AutoComplete/Response/model/SuggestedLocation.js ***! + \***********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Single SuggestedLocation Object returned by underlying web service.\n * Each suggested location represents a street address (\"StreetAddress\") or a place name (\"PositionOfInterest\").\n *\n * @property {String} type - Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @property {Gp.Point} position - Position of the suggested location given in requested coordinates system.\n * @property {String} commune - Suggested municipality\n * @property {String} fullText - Full text representation of the suggested location.\n * @property {String} postalCode - Suggested location postcode\n * @property {Integer} classification - Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @property {String} street - Street name of the suggested location (\"StreetAddress\" only).\n * @property {String} kind - Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n *\n * @namespace\n * @alias Gp.Services.AutoComplete.SuggestedLocation\n */\nfunction SuggestedLocation() {\n if (!(this instanceof SuggestedLocation)) {\n throw new TypeError(\"SuggestedLocation constructor cannot be called as a function.\");\n }\n\n /* REPONSE :\n {\n \"status\" : \"OK\",\n \"results\" : [\n {\n \"country\":\"PositionOfInterest\",\n \"x\":-1.559185,\n \"y\":47.952603,\n \"city\":\"Brie\",\n \"zipcode\":\"35150\",\n \"street\":\"corbe\",\n \"kind\":\"Lieu-dit habité\",\n \"fulltext\":\"corbe, 35150 Brie\",\n \"classification\":6\n },\n {\n \"country\":\"StreetAddress\",\n \"x\":1.538295,\n \"y\":43.19646,\n \"city\":\"Brie\",\n \"zipcode\":\"09700\",\n \"street\":\"courreste\",\n \"kind\":\"\",\n \"fulltext\":\"courreste, 09700 Brie\",\n \"classification\":7\n }\n ]\n }\n */\n\n /* REPONSE EN ERREUR\n {\n status : \"ERROR\",\n results : [ ]\n }\n */\n\n /**\n * Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @type {String}\n */\n this.type = null;\n\n /**\n * Position of the suggested location given in requested coordinates system.\n * @type {Gp.Point}\n */\n this.position = {\n x: null,\n y: null\n };\n\n /**\n * Suggested municipality\n * @type {String}\n */\n this.commune = null;\n\n /**\n * Full text representation of the suggested location.\n * @type {String}\n */\n this.fullText = null;\n\n /**\n * Suggested location postcode\n * @type {Number}\n */\n this.postalCode = null;\n\n /**\n * Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @type {Integer}\n */\n this.classification = null;\n\n /**\n * Street name of the suggested location (\"StreetAddress\" only).\n * @type {String}\n */\n this.street = null;\n\n /**\n * Place name of the suggested location (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.poi = null;\n\n /**\n * Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.kind = null;\n}\nSuggestedLocation.prototype = {\n constructor: SuggestedLocation\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (SuggestedLocation);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9BdXRvQ29tcGxldGUvUmVzcG9uc2UvbW9kZWwvU3VnZ2VzdGVkTG9jYXRpb24uanM/ODM1YyJdLCJuYW1lcyI6WyJTdWdnZXN0ZWRMb2NhdGlvbiIsIlR5cGVFcnJvciIsInR5cGUiLCJwb3NpdGlvbiIsIngiLCJ5IiwiY29tbXVuZSIsImZ1bGxUZXh0IiwicG9zdGFsQ29kZSIsImNsYXNzaWZpY2F0aW9uIiwic3RyZWV0IiwicG9pIiwia2luZCIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsaUJBQWlCQSxDQUFBLEVBQUk7RUFDMUIsSUFBSSxFQUFFLElBQUksWUFBWUEsaUJBQWlCLENBQUMsRUFBRTtJQUN0QyxNQUFNLElBQUlDLFNBQVMsQ0FBQywrREFBK0QsQ0FBQztFQUN4Rjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFSTtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsSUFBSSxHQUFHLElBQUk7O0VBRWhCO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxRQUFRLEdBQUc7SUFDWkMsQ0FBQyxFQUFHLElBQUk7SUFDUkMsQ0FBQyxFQUFHO0VBQ1IsQ0FBQzs7RUFFRDtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUk7O0VBRW5CO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSTs7RUFFcEI7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFVBQVUsR0FBRyxJQUFJOztFQUV0QjtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsY0FBYyxHQUFHLElBQUk7O0VBRTFCO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxNQUFNLEdBQUcsSUFBSTs7RUFFbEI7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJLENBQUNDLEdBQUcsR0FBRyxJQUFJOztFQUVmO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSSxDQUFDQyxJQUFJLEdBQUcsSUFBSTtBQUNwQjtBQUVBWixpQkFBaUIsQ0FBQ2EsU0FBUyxHQUFHO0VBRTFCQyxXQUFXLEVBQUdkO0FBQ2xCLENBQUM7QUFFY0EsZ0ZBQWlCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0F1dG9Db21wbGV0ZS9SZXNwb25zZS9tb2RlbC9TdWdnZXN0ZWRMb2NhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBTaW5nbGUgU3VnZ2VzdGVkTG9jYXRpb24gT2JqZWN0IHJldHVybmVkIGJ5IHVuZGVybHlpbmcgd2ViIHNlcnZpY2UuXG4gKiBFYWNoIHN1Z2dlc3RlZCBsb2NhdGlvbiByZXByZXNlbnRzIGEgc3RyZWV0IGFkZHJlc3MgKFwiU3RyZWV0QWRkcmVzc1wiKSBvciBhIHBsYWNlIG5hbWUgKFwiUG9zaXRpb25PZkludGVyZXN0XCIpLlxuICpcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0eXBlIC0gU3VnZ2VzdGVkIGxvY2F0aW9uIHR5cGUgOiBcIlN0cmVldEFkZHJlc3NcIiBvdSBcIlBvc2l0aW9uT2ZJbnRlcmVzdFwiXG4gKiBAcHJvcGVydHkge0dwLlBvaW50fSBwb3NpdGlvbiAtIFBvc2l0aW9uIG9mIHRoZSBzdWdnZXN0ZWQgbG9jYXRpb24gZ2l2ZW4gaW4gcmVxdWVzdGVkIGNvb3JkaW5hdGVzIHN5c3RlbS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBjb21tdW5lIC0gU3VnZ2VzdGVkIG11bmljaXBhbGl0eVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGZ1bGxUZXh0IC0gRnVsbCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWdnZXN0ZWQgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcG9zdGFsQ29kZSAtIFN1Z2dlc3RlZCBsb2NhdGlvbiBwb3N0Y29kZVxuICogQHByb3BlcnR5IHtJbnRlZ2VyfSBjbGFzc2lmaWNhdGlvbiAtIE51bWJlciB1c2VkIHRvIGNsYXNzaWZ5IHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBwbGFjZSB3aGVyZSBpcyB0aGUgc3VnZ2VzdGVkIGxvY2F0aW9uIGZyb20gMSAobW9zdCBpbXBvcnRhbnQpIHRvIDcgKGxlc3MgaW1wb3J0YW50KS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdHJlZXQgLSBTdHJlZXQgbmFtZSBvZiB0aGUgc3VnZ2VzdGVkIGxvY2F0aW9uIChcIlN0cmVldEFkZHJlc3NcIiBvbmx5KS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBraW5kIC0gTmF0dXJlIG9mIHRoZSBzdWdnZXN0ZWQgbG9jYXRpb24gOiBcInByZWZlY3R1cmVcIiwgXCJtb251bWVudFwiLCBcImNvbW11bmVcIiwgLi4uIGZvciBpbnN0YW5jZSAoXCJQb3NpdGlvbk9mSW50ZXJlc3RcIiBvbmx5KS5cbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuQXV0b0NvbXBsZXRlLlN1Z2dlc3RlZExvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIFN1Z2dlc3RlZExvY2F0aW9uICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3VnZ2VzdGVkTG9jYXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdWdnZXN0ZWRMb2NhdGlvbiBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgIH1cblxuICAgIC8qIFJFUE9OU0UgOlxuICAgICAgICB7XG4gICAgICAgICAgIFwic3RhdHVzXCIgOiBcIk9LXCIsXG4gICAgICAgICAgIFwicmVzdWx0c1wiIDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOlwiUG9zaXRpb25PZkludGVyZXN0XCIsXG4gICAgICAgICAgICAgICAgIFwieFwiOi0xLjU1OTE4NSxcbiAgICAgICAgICAgICAgICAgXCJ5XCI6NDcuOTUyNjAzLFxuICAgICAgICAgICAgICAgICBcImNpdHlcIjpcIkJyaWVcIixcbiAgICAgICAgICAgICAgICAgXCJ6aXBjb2RlXCI6XCIzNTE1MFwiLFxuICAgICAgICAgICAgICAgICBcInN0cmVldFwiOlwiY29yYmVcIixcbiAgICAgICAgICAgICAgICAgXCJraW5kXCI6XCJMaWV1LWRpdCBoYWJpdMOpXCIsXG4gICAgICAgICAgICAgICAgIFwiZnVsbHRleHRcIjpcImNvcmJlLCAzNTE1MCBCcmllXCIsXG4gICAgICAgICAgICAgICAgIFwiY2xhc3NpZmljYXRpb25cIjo2XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6XCJTdHJlZXRBZGRyZXNzXCIsXG4gICAgICAgICAgICAgICAgIFwieFwiOjEuNTM4Mjk1LFxuICAgICAgICAgICAgICAgICBcInlcIjo0My4xOTY0NixcbiAgICAgICAgICAgICAgICAgXCJjaXR5XCI6XCJCcmllXCIsXG4gICAgICAgICAgICAgICAgIFwiemlwY29kZVwiOlwiMDk3MDBcIixcbiAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjpcImNvdXJyZXN0ZVwiLFxuICAgICAgICAgICAgICAgICBcImtpbmRcIjpcIlwiLFxuICAgICAgICAgICAgICAgICBcImZ1bGx0ZXh0XCI6XCJjb3VycmVzdGUsIDA5NzAwIEJyaWVcIixcbiAgICAgICAgICAgICAgICAgXCJjbGFzc2lmaWNhdGlvblwiOjdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAqL1xuXG4gICAgLyogUkVQT05TRSBFTiBFUlJFVVJcbiAgICAgICAge1xuICAgICAgICAgICAgc3RhdHVzIDogXCJFUlJPUlwiLFxuICAgICAgICAgICAgcmVzdWx0cyA6IFsgXVxuICAgICAgICB9XG4gICAgKi9cblxuICAgIC8qKlxuICAgICAqIFN1Z2dlc3RlZCBsb2NhdGlvbiB0eXBlIDogXCJTdHJlZXRBZGRyZXNzXCIgb3UgXCJQb3NpdGlvbk9mSW50ZXJlc3RcIlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSBzdWdnZXN0ZWQgbG9jYXRpb24gZ2l2ZW4gaW4gcmVxdWVzdGVkIGNvb3JkaW5hdGVzIHN5c3RlbS5cbiAgICAgKiBAdHlwZSB7R3AuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IHtcbiAgICAgICAgeCA6IG51bGwsXG4gICAgICAgIHkgOiBudWxsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFN1Z2dlc3RlZCBtdW5pY2lwYWxpdHlcbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY29tbXVuZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBGdWxsIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1Z2dlc3RlZCBsb2NhdGlvbi5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnVsbFRleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU3VnZ2VzdGVkIGxvY2F0aW9uIHBvc3Rjb2RlXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBvc3RhbENvZGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIHVzZWQgdG8gY2xhc3NpZnkgdGhlIGltcG9ydGFuY2Ugb2YgdGhlIHBsYWNlIHdoZXJlIGlzIHRoZSBzdWdnZXN0ZWQgbG9jYXRpb24gZnJvbSAxIChtb3N0IGltcG9ydGFudCkgdG8gNyAobGVzcyBpbXBvcnRhbnQpLlxuICAgICAqIEB0eXBlIHtJbnRlZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuY2xhc3NpZmljYXRpb24gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU3RyZWV0IG5hbWUgb2YgdGhlIHN1Z2dlc3RlZCBsb2NhdGlvbiAoXCJTdHJlZXRBZGRyZXNzXCIgb25seSkuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnN0cmVldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZSBuYW1lIG9mIHRoZSBzdWdnZXN0ZWQgbG9jYXRpb24gKFwiUG9zaXRpb25PZkludGVyZXN0XCIgb25seSkuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnBvaSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBOYXR1cmUgb2YgdGhlIHN1Z2dlc3RlZCBsb2NhdGlvbiA6IFwicHJlZmVjdHVyZVwiLCBcIm1vbnVtZW50XCIsIFwiY29tbXVuZVwiLCAuLi4gZm9yIGluc3RhbmNlIChcIlBvc2l0aW9uT2ZJbnRlcmVzdFwiIG9ubHkpLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5raW5kID0gbnVsbDtcbn1cblxuU3VnZ2VzdGVkTG9jYXRpb24ucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3IgOiBTdWdnZXN0ZWRMb2NhdGlvblxufTtcblxuZXhwb3J0IGRlZmF1bHQgU3VnZ2VzdGVkTG9jYXRpb247XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/AutoComplete/Response/model/SuggestedLocation.js\n"); + +/***/ }), + +/***/ "./src/Services/CommonService.js": +/*!***************************************!*\ + !*** ./src/Services/CommonService.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/Helper */ \"./src/Utils/Helper.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Protocols_Protocol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Protocols/Protocol */ \"./src/Protocols/Protocol.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../package.json */ \"./package.json\");\nvar _package_json__WEBPACK_IMPORTED_MODULE_5___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../../package.json */ \"./package.json\", 1);\n\n\n\n\n\n// import DefaultUrlService from \"./DefaultUrlService\";\n// package.json (extract version)\n\n\n/**\n * @classdesc\n * Composant Service\n *\n * @constructor\n * @alias Gp.Services.CommonService\n * @param {Object} options - options communes à tous les services\n *\n * @param {String} [options.serverUrl] - URL d'accès au service. Par défaut \"https://data.geopf.fr/SERVICE/\".\n * Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès.\n * Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré.\n *\n * @param {String} [options.protocol] - Le protocole à utiliser pour récupérer les informations du service :\n * peut valoir 'JSONP' ou 'XHR'.\n * Par défaut, c'est le protocole XHR qui sera utilisé.\n * Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR).\n *\n * @param {Boolean} [options.ssl] - Indique si l'on souhaite intérroger les services en https.\n * Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS).\n * Sur un navigateur, le protocole est automatiquement extrait de l'url du site...\n * Par défaut, on utilise le protocole http (ssl=false).\n *\n * @param {String} [options.proxyURL] - Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR.\n * Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP.\n *\n * @param {String} [options.callbackSuffix] - Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP.\n * Par défaut, la fonction de callback portera un nom du type \"callback\"+ID, où ID est soit un identifiant unique généré à chaque requête,\n * soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix=\"_2\", la fonction sera \"callback_2 ()\".\n * Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu\n * Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'.\n *\n * @param {String} [options.httpMethod] - La méthode HTTP\n * à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'.\n * Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET.\n * Par défaut, c'est la méthode GET qui est utilisée.\n *\n * @param {String} [options.contentType] - Content-Type de la requete\n * à utiliser dans le cas d'une requête XHR en mode POST.\n * Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET.\n * Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type.\n *\n * @param {Number} [options.timeOut] - Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête).\n * Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0).\n *\n * @param {Boolean} [options.rawResponse] - Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée.\n * (Cf. paramètre « onSuccess » pour plus de détails).\n *\n * @param {Function} [options.onSuccess] - Fonction appelée lorsque le service répond correctement à la requête\n * (code HTTP 200, sans message d'erreur).\n * Cette fonction prend en paramètre la réponse du service,\n * soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ;\n * soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ».\n *\n * @param {Function} [options.onFailure] - Fonction appelée lorsque le service ne répond pas correctement\n * (code HTTP de retour différent de 200 ou pas de réponse).\n *\n * @param {Function} [options.onBeforeParse] - Fonction appelée avant le parsing de la réponse\n * Permet de modifier la réponse avant parsing et la fonction doit retourner une String.\n * Cette fonction prend en paramètre la réponse telle que renvoyée par le service\n * (cad au format json ou xml).\n * Pour le JSONP, si le paramètre \"rawResponse\" a été précisé avec la valeur \"true\",\n * la fonction prend en paramètre un Object JavaScript contenant la réponse XML.\n *\n * @example\n * var options = {\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * ssl : false,\n * proxyURL : null,\n * callbackName : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * onBeforeParse : function (rawResponse) {}\n * };\n */\nfunction CommonService(options) {\n if (!(this instanceof CommonService)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\"));\n }\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"CommonService\");\n this.logger.trace(\"[Constructeur CommonService (options)]\");\n\n // #####################\n // récupération des options par défaut pour les paramètres optionnels\n // #####################\n\n /**\n * Options du service\n * @type {Object}\n */\n this.options = {\n // protocol : \"JSONP\",\n protocol: \"XHR\",\n ssl: true,\n proxyURL: \"\",\n // callbackName : \"\",\n callbackSuffix: null,\n httpMethod: \"GET\",\n timeOut: 0,\n rawResponse: false,\n scope: this,\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n onSuccess: function onSuccess(response) {\n console.log(\"onSuccess - la reponse est la suivante : \", response);\n },\n /**\n * callback par defaut pour les erreurs\n * @param {Object} error - error\n * @private\n */\n onFailure: function onFailure(error) {\n if (error.status === 200 || !error.status) {\n console.log(\"onFailure : \", error.message);\n } else {\n console.log(\"onFailure - Erreur (\", error.status, \") : \", error.message);\n }\n }\n };\n\n // et on ajoute les options en paramètre aux options par défaut\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this.options[opt] = options[opt];\n }\n }\n\n // #####################\n // analyse des options\n // #####################\n\n // modification de la fonction de callback onSuccess dans le cas où la réponse brute est demandée\n if (this.options.rawResponse && !this.options.onSuccess) {\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n this.options.onSuccess = function (response) {\n console.log(\"onSuccess - la réponse brute du service est la suivante : \", response);\n };\n }\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(this.options.onSuccess !== null && typeof this.options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n\n // gestion de la methode HTTP\n this.options.httpMethod = typeof options.httpMethod === \"string\" ? options.httpMethod.toUpperCase() : \"GET\";\n switch (this.options.httpMethod) {\n case \"POST\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"DELETE\":\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getMessage(\"PARAM_NOT_SUPPORT\", \"httpMethod\"));\n default:\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getMessage(\"PARAM_UNKNOWN\", \"httpMethod\"));\n }\n\n // gestion du protocole\n // this.options.protocol = (typeof options.protocol === \"string\" ) ? options.protocol.toUpperCase() : \"JSONP\";\n this.options.protocol = typeof options.protocol === \"string\" ? options.protocol.toUpperCase() : \"XHR\";\n switch (this.options.protocol) {\n case \"JSONP\":\n case \"XHR\":\n break;\n default:\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getMessage(\"PARAM_UNKNOWN\", \"protocol\"));\n }\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on lance une exception sur l'utilisation du protocole JSONP pour nodeJS...\n if (typeof window === \"undefined\" && this.options.protocol === \"JSONP\") {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getMessage(\"PARAM_NOT_SUPPORT_NODEJS\", \"protocol=JSONP (instead use XHR)\"));\n }\n\n // le protocole JSONP ne fonctionne qu'en GET.\n if (this.options.protocol === \"JSONP\") {\n this.options.httpMethod = \"GET\";\n }\n\n // gestion du cache\n this.options.nocache = options.nocache || false;\n\n // #####################\n // attributs d'instances\n // #####################\n\n /**\n * Format de réponse du service\n */\n this.options.outputFormat = null;\n /**\n * Requête envoyée au service\n */\n this.request = null;\n /**\n * Reponse du service\n */\n this.response = null;\n}\n\n/**\n * @lends module:CommonService\n */\nCommonService.prototype = {\n /*\n * Constructeur (alias)\n */\n constructor: CommonService,\n /**\n * Appel du service Géoportail\n */\n call: function call() {\n /* jshint validthis : true */\n this.logger.trace(\"CommonService::call ()\");\n var context = this;\n /** fonction d'execution */\n function run() {\n this.logger.trace(\"CommonService::run ()\");\n this.buildRequest.call(context, onError, onBuildRequest);\n }\n run.call(context);\n\n // callback de fin de construction de la requête\n function onBuildRequest(result) {\n this.logger.trace(\"CommonService::onBuildRequest : \", result);\n this.callService.call(context, onError, onCallService);\n }\n\n // callback de fin d'appel au service\n function onCallService(result) {\n this.logger.trace(\"CommonService::onCallService : \", result);\n this.analyzeResponse.call(context, onError, onAnalyzeResponse);\n }\n\n // callback de fin de lecture de la reponse\n function onAnalyzeResponse(result) {\n this.logger.trace(\"CommonService::onAnalyzeResponse : \", result);\n if (result) {\n this.options.onSuccess.call(this, result);\n } else {\n return onError.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\"Analyse de la reponse en échec !?\"));\n }\n }\n\n // callback de gestion des erreurs : renvoit un objet de type ErrorService\n function onError(error) {\n this.logger.trace(\"CommonService::onError()\");\n // error : l'objet est du type ErrorService ou Error\n var e = error;\n if (!(e instanceof _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"])) {\n e = new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"](error.message);\n }\n this.options.onFailure.call(this, e);\n }\n },\n /**\n * Création de la requête\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n buildRequest: function buildRequest(error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet 'this.request'\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n },\n /**\n * Appel du service\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n callService: function callService(error, success) {\n // INFO\n // retourne l'objet 'this.response'\n\n // NOTES\n // Pour le mode XHR, on recupère une reponse sous forme d'un json ou xml (#document).\n // Pour le mode JSONP, on a toujours un objet JSON mais sous 2 formes :\n // - natif\n // - XML encapsulé :\n // {http : {status:200, error:null},xml :'réponse du service'}\n // {http : {status:400, error:'reponse du service'},xml :null}\n // En XHR, la reponse est directement sauvegardée dans 'this.response'.\n // Par contre, en JSONP, on doit analyser la reponse (status ou non vide),\n // et ne renvoyer que le contenu (xml ou l'objet)\n\n // gestion de la proxification du service\n var strUrlProxified = null;\n var strData = this.request;\n\n // a t on mis en place un proxy ?\n // la proxyfication est valable uniquement en mode XHR !\n var bUrlProxified = !!(this.options.proxyURL && this.options.protocol === \"XHR\");\n\n // rajout de l'option gpbibaccess\n // INFO : acces au numero de version de package.conf aprés compilation !\n var requestMetaOptions = {\n \"gp-access-lib\": _package_json__WEBPACK_IMPORTED_MODULE_5__.version\n };\n if (this.options.apiKey) {\n requestMetaOptions.apiKey = this.options.apiKey;\n }\n this.options.serverUrl = _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].normalyzeUrl(this.options.serverUrl, requestMetaOptions, false);\n\n // si le proxy est renseigné, on proxifie l'url du service\n if (bUrlProxified) {\n if (this.options.httpMethod === \"GET\") {\n strUrlProxified = this.options.proxyURL + _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].normalyzeUrl(this.options.serverUrl, this.request, true);\n strData = null;\n }\n if (this.options.httpMethod === \"POST\") {\n strUrlProxified = this.options.proxyURL + _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__[\"default\"].normalyzeUrl(this.options.serverUrl, null, true);\n strData = this.request;\n }\n }\n\n // contexte du composant spécifique !\n var self = this;\n var options = {\n url: strUrlProxified || this.options.serverUrl,\n method: this.options.httpMethod,\n protocol: this.options.protocol,\n timeOut: this.options.timeOut || 0,\n format: this.options.outputFormat,\n // ceci declenche le parsing de la reponse du service, mais on souhaite toujours une reponse brute (string) !\n nocache: this.options.nocache || false,\n // ceci permet d'ajouter un timestamp dans la requête\n wrap: this.options.protocol !== \"XHR\",\n // ceci declenche l'encapsulation de la reponse XML du service dans du JSON, mais pas en mode XHR !\n callbackSuffix: this.options.callbackSuffix,\n // callbackName : this.options.callbackName || null,\n data: strData,\n headers: null,\n // TODO...\n content: this.options.contentType || \"application/xml\",\n scope: this.options.scope || this,\n // callback de reponse\n onResponse: function onResponse(response) {\n self.logger.trace(\"callService::onResponse()\");\n\n // le contenu de la reponse à renvoyer !\n var content = null;\n\n // XHR : on renvoie toujours la reponse brute du service (json ou xml)\n // au parser du composant...\n if (self.options.protocol === \"XHR\") {\n self.logger.trace(\"Response XHR\", response);\n content = response; // par defaut, la reponse du service !\n }\n\n // JSONP : on pre-analyse la reponse brute du service (encapsuler ou pas)\n // avant de l'envoyer au parser du composant...\n if (self.options.protocol === \"JSONP\") {\n self.logger.trace(\"Response JSON\", response);\n if (response) {\n if (response.http) {\n // reponse encapsulée :\n // ex. reponse du service en xml\n // > {http : {status:200, error:null},xml :'réponse du service'}\n if (response.http.status !== 200) {\n error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n status: response.http.status,\n message: response.http.error,\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].TYPE_SRVERR\n }));\n return;\n } else {\n content = response.xml; // par defaut !\n if (self.options.rawResponse) {\n content = response;\n }\n }\n } else {\n // reponse non encapsulée :\n // ex. reponse du service en json ou xml\n content = response;\n }\n } else {\n error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\"Le contenu de la reponse est vide !?\"));\n return;\n }\n }\n\n // si on souhaite parser la reponse du service\n if (typeof self.options.onBeforeParse === \"function\") {\n var newResponse = self.options.onBeforeParse(content);\n if (typeof newResponse === \"string\") {\n // la reponse parsée par l'utilisateur est retournée sous\n // forme de string !\n content = newResponse;\n }\n }\n // sauvegarde de la reponse dans l'objet parent (CommonService)\n self.response = content;\n // on renvoie la reponse...\n success.call(self, content);\n },\n // callback des erreurs\n onFailure: function onFailure(e) {\n self.logger.trace(\"callService::onFailure()\");\n // on est forcement sur une erreur levée par un service !\n e.type = _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].TYPE_SRVERR;\n error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"](e));\n },\n // callback de timeOut\n onTimeOut: function onTimeOut() {\n self.logger.trace(\"callService::onTimeOut()\");\n error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\"TimeOut!\"));\n }\n };\n _Protocols_Protocol__WEBPACK_IMPORTED_MODULE_3__[\"default\"].send(options);\n },\n /**\n * Analyse de la réponse\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n analyzeResponse: function analyzeResponse(error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet spécifique au type de composant (json)\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (CommonService);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Db21tb25TZXJ2aWNlLmpzP2ZkNTciXSwibmFtZXMiOlsiQ29tbW9uU2VydmljZSIsIm9wdGlvbnMiLCJUeXBlRXJyb3IiLCJfIiwiZ2V0TWVzc2FnZSIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwicHJvdG9jb2wiLCJzc2wiLCJwcm94eVVSTCIsImNhbGxiYWNrU3VmZml4IiwiaHR0cE1ldGhvZCIsInRpbWVPdXQiLCJyYXdSZXNwb25zZSIsInNjb3BlIiwib25TdWNjZXNzIiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwib25GYWlsdXJlIiwiZXJyb3IiLCJzdGF0dXMiLCJtZXNzYWdlIiwib3B0IiwiaGFzT3duUHJvcGVydHkiLCJiT25TdWNjZXNzIiwiRXJyb3IiLCJ0b1VwcGVyQ2FzZSIsIndpbmRvdyIsIm5vY2FjaGUiLCJvdXRwdXRGb3JtYXQiLCJyZXF1ZXN0IiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJjYWxsIiwiY29udGV4dCIsInJ1biIsImJ1aWxkUmVxdWVzdCIsIm9uRXJyb3IiLCJvbkJ1aWxkUmVxdWVzdCIsInJlc3VsdCIsImNhbGxTZXJ2aWNlIiwib25DYWxsU2VydmljZSIsImFuYWx5emVSZXNwb25zZSIsIm9uQW5hbHl6ZVJlc3BvbnNlIiwiRXJyb3JTZXJ2aWNlIiwiZSIsInN1Y2Nlc3MiLCJzdHJVcmxQcm94aWZpZWQiLCJzdHJEYXRhIiwiYlVybFByb3hpZmllZCIsInJlcXVlc3RNZXRhT3B0aW9ucyIsIlBrZyIsInZlcnNpb24iLCJhcGlLZXkiLCJzZXJ2ZXJVcmwiLCJIZWxwZXIiLCJub3JtYWx5emVVcmwiLCJzZWxmIiwidXJsIiwibWV0aG9kIiwiZm9ybWF0Iiwid3JhcCIsImRhdGEiLCJoZWFkZXJzIiwiY29udGVudCIsImNvbnRlbnRUeXBlIiwib25SZXNwb25zZSIsImh0dHAiLCJ0eXBlIiwiVFlQRV9TUlZFUlIiLCJ4bWwiLCJv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QUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsbUNBQW1DLENBQUM7RUFDM0Q7QUFFSixDQUFDO0FBRWNwQyw0RUFBYSIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Db21tb25TZXJ2aWNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgSGVscGVyIGZyb20gXCIuLi9VdGlscy9IZWxwZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuLi9VdGlscy9NZXNzYWdlc1Jlc291cmNlc1wiO1xuaW1wb3J0IFByb3RvY29sIGZyb20gXCIuLi9Qcm90b2NvbHMvUHJvdG9jb2xcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG4vLyBpbXBvcnQgRGVmYXVsdFVybFNlcnZpY2UgZnJvbSBcIi4vRGVmYXVsdFVybFNlcnZpY2VcIjtcbi8vIHBhY2thZ2UuanNvbiAoZXh0cmFjdCB2ZXJzaW9uKVxuaW1wb3J0IFBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICogQ29tcG9zYW50IFNlcnZpY2VcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5Db21tb25TZXJ2aWNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgY29tbXVuZXMgw6AgdG91cyBsZXMgc2VydmljZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc2VydmVyVXJsXSAtIFVSTCBkJ2FjY8OocyBhdSBzZXJ2aWNlLiBQYXIgZMOpZmF1dCBcImh0dHBzOi8vZGF0YS5nZW9wZi5mci9TRVJWSUNFL1wiLlxuICogICAgICBQZXJtZXQgZGUgZm9yY2VyIGwndXRpbGlzYXRpb24gZCd1biBzZXJ2aWNlIMOpcXVpdmFsZW50IGTDqXBsb3nDqSBkZXJyacOocmUgdW5lIMOpdmVudHVlbGxlIGF1dHJlIFVSTCBkJ2FjY8Oocy5cbiAqICAgICAgU2kgY2UgcGFyYW3DqHRyZSBlc3QgcmVuc2VpZ27DqSBhbG9ycywgbGUgcGFyYW3DqHRyZSBwYXIgZMOpZmF1dCBlc3QgaWdub3LDqS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucHJvdG9jb2xdIC0gTGUgcHJvdG9jb2xlIMOgIHV0aWxpc2VyIHBvdXIgcsOpY3Vww6lyZXIgbGVzIGluZm9ybWF0aW9ucyBkdSBzZXJ2aWNlIDpcbiAqICAgICAgcGV1dCB2YWxvaXIgJ0pTT05QJyBvdSAnWEhSJy5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGMnZXN0IGxlIHByb3RvY29sZSBYSFIgcXVpIHNlcmEgdXRpbGlzw6kuXG4gKiAgICAgIEF0dGVudGlvbiwgbGUgcHJvdG9jb2xlIEpTT05QIG4nZXN0IHBhcyB2YWxpZGUgZGFucyB1biBlbnZpcm9ubmVtZW50IE5vZGVKUyAoVXRpbGlzYXRpb24gZHUgbW9kZSBYSFIpLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3NsXSAtIEluZGlxdWUgc2kgbCdvbiBzb3VoYWl0ZSBpbnTDqXJyb2dlciBsZXMgc2VydmljZXMgZW4gaHR0cHMuXG4gKiAgICAgIENlIHBhcmFtw6h0cmUgbmUgZm9uY3Rpb25uZSBxdWUgcG91ciB1bmUgdXRpbGlzYXRpb24gaG9ycyBuYXZpZ2F0ZXVyIChleC4gTm9kZUpTKS5cbiAqICAgICAgU3VyIHVuIG5hdmlnYXRldXIsIGxlIHByb3RvY29sZSBlc3QgYXV0b21hdGlxdWVtZW50IGV4dHJhaXQgZGUgbCd1cmwgZHUgc2l0ZS4uLlxuICogICAgICBQYXIgZMOpZmF1dCwgb24gdXRpbGlzZSBsZSBwcm90b2NvbGUgaHR0cCAoc3NsPWZhbHNlKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucHJveHlVUkxdIC0gTGUgcHJveHkgw6AgdXRpbGlzZXIgcG91ciBwYWxsaWVyIGF1IHByb2Jsw6htZSBkZSBjcm9zcy1kb21haW4gZGFucyBsZSBjYXMgZCd1bmUgcmVxdcOqdGUgWEhSLlxuICogICAgICBVdGlsZSBzaSBsZSBwYXJhbcOodHJlICdwcm90b2NvbCcgdmF1dCAnWEhSJywgaWwgbmUgc2VyYSBwYXMgcHJpcyBlbiBjb21wdGUgc2kgcHJvdG9jb2wgdmF1dCBKU09OUC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY2FsbGJhY2tTdWZmaXhdIC0gU3VmZml4ZSBkZSBsYSBmb25jdGlvbiBkZSBjYWxsYmFjayDDoCB1dGlsaXNlciwgZGFucyBsZSBjYXMgZHUgcHJvdG9jb2xlIEpTT05QLlxuICogICAgICBQYXIgZMOpZmF1dCwgbGEgZm9uY3Rpb24gZGUgY2FsbGJhY2sgcG9ydGVyYSB1biBub20gZHUgdHlwZSBcImNhbGxiYWNrXCIrSUQsIG/DuSBJRCBlc3Qgc29pdCB1biBpZGVudGlmaWFudCB1bmlxdWUgZ8OpbsOpcsOpIMOgIGNoYXF1ZSByZXF1w6p0ZSxcbiAqICAgICAgc29pdCBsZSBwYXJhbcOodHJlIGNhbGxiYWNrU3VmZml4IHMnaWwgZXN0IHNww6ljaWZpw6kuIFBhciBleGVtcGxlLCBzaSBjYWxsYmFja1N1ZmZpeD1cIl8yXCIsIGxhIGZvbmN0aW9uIHNlcmEgXCJjYWxsYmFja18yICgpXCIuXG4gKiAgICAgIFV0aWxlIHBvdXIgdXRpbGlzZXIgdW5lIHLDqXBvbnNlIGTDqWrDoCBlbmNhcHN1bMOpZSBkYW5zIHVuZSBmb25jdGlvbiBkZSBjYWxsYmFjaywgZG9udCBsZSBub20gZXN0IGNvbm51XG4gKiAgICAgIFV0aWxlIHNldWxlbWVudCBzaSBsZSBwYXJhbcOodHJlICdwcm90b2NvbCcgdmF1dCAnSlNPTlAnLCBpbCBuZSBzZXJhIHBhcyBwcmlzIGVuIGNvbXB0ZSBzaSBwcm90b2NvbCB2YXV0ICdYSFInLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5odHRwTWV0aG9kXSAtIExhIG3DqXRob2RlIEhUVFBcbiAqICAgICAgw6AgdXRpbGlzZXIgZGFucyBsZSBjYXMgZCd1bmUgcmVxdcOqdGUgWEhSIDogcGV1dCB2YWxvaXIgJ0dFVCcgb3UgJ1BPU1QnLlxuICogICAgICBOb24gcHJpcyBlbiBjb21wdGUgc2kgJ3Byb3RvY29sJyB2YXV0IEpTT05QIHF1aSBmb25jdGlvbm5lIG9ibGlnYXRvaXJlbWVudCBlbiBHRVQuXG4gKiAgICAgIFBhciBkw6lmYXV0LCBjJ2VzdCBsYSBtw6l0aG9kZSBHRVQgcXVpIGVzdCB1dGlsaXPDqWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbnRlbnRUeXBlXSAtIENvbnRlbnQtVHlwZSBkZSBsYSByZXF1ZXRlXG4gKiAgICAgIMOgIHV0aWxpc2VyIGRhbnMgbGUgY2FzIGQndW5lIHJlcXXDqnRlIFhIUiBlbiBtb2RlIFBPU1QuXG4gKiAgICAgIE5vbiBwcmlzIGVuIGNvbXB0ZSBzaSAncHJvdG9jb2wnIHZhdXQgSlNPTlAgZXQvb3UgbGEgbcOpdGhvZGUgSFRUUCB2YXV0IEdFVC5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGMnZXN0IGxhIG3DqXRob2RlIEdFVCBxdWkgZXN0IHV0aWxpc8OpZSBkb25jIG9uIG4ndXRpbGlzZSBwYXMgZGUgQ29udGVudC1UeXBlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy50aW1lT3V0XSAtIETDqWxhaSBkJ2F0dGVudGUgbWF4aW1hbCAoZW4gbXMpIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgKMOgIHBhcnRpciBkZSBsJ2Vudm9pIGRlIGxhIHJlcXXDqnRlKS5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGF1Y3VuIHRpbWVPdXQgbidlc3QgcHJpcyBlbiBjb21wdGUgKHRpbWVvdXREZWxheT0gMCkuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yYXdSZXNwb25zZV0gLSBJbmRpcXVlIHNpIGwnb24gc291aGFpdGUgcXVlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgbmUgc29pdCBwYXMgcGFyc8OpZSBwYXIgbCdBUEkgYXZhbnQgZCfDqnRyZSByZXN0aXR1w6llLlxuICogICAgICAoQ2YuIHBhcmFtw6h0cmUgwqsgb25TdWNjZXNzIMK7IHBvdXIgcGx1cyBkZSBkw6l0YWlscykuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25TdWNjZXNzXSAtIEZvbmN0aW9uIGFwcGVsw6llIGxvcnNxdWUgbGUgc2VydmljZSByw6lwb25kIGNvcnJlY3RlbWVudCDDoCBsYSByZXF1w6p0ZVxuICogICAgICAoY29kZSBIVFRQIDIwMCwgc2FucyBtZXNzYWdlIGQnZXJyZXVyKS5cbiAqICAgICAgQ2V0dGUgZm9uY3Rpb24gcHJlbmQgZW4gcGFyYW3DqHRyZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlLFxuICogICAgICBzb2l0IHNvdXMgbGEgZm9ybWUgZCd1biBPYmplY3QgSmF2YXNjcmlwdCBmb3JtYXTDqSBwYXIgbGUgcGFyc2V1ciBkw6lkacOpIMOgIGxhIHN5bnRheGUgZHUgc2VydmljZSAoY29tcG9ydGVtZW50IHBhciBkw6lmYXV0KSA7XG4gKiAgICAgIHNvaXQgYnJ1dGUgYXUgZm9ybWF0IFN0cmluZyBub24gcHLDqXRyYWl0w6kgc2kgbGUgcGFyYW3DqHRyZSDCqyByYXdSZXNwb25zZSDCuyBhIMOpdMOpIHByw6ljaXPDqSBhdmVjIGxhIHZhbGV1ciDCqyB0cnVlIMK7LlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmFpbHVyZV0gLSBGb25jdGlvbiBhcHBlbMOpZSBsb3JzcXVlIGxlIHNlcnZpY2UgbmUgcsOpcG9uZCBwYXMgY29ycmVjdGVtZW50XG4gKiAgICAgIChjb2RlIEhUVFAgZGUgcmV0b3VyIGRpZmbDqXJlbnQgZGUgMjAwIG91IHBhcyBkZSByw6lwb25zZSkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25CZWZvcmVQYXJzZV0gLSBGb25jdGlvbiBhcHBlbMOpZSBhdmFudCBsZSBwYXJzaW5nIGRlIGxhIHLDqXBvbnNlXG4gKiAgICAgIFBlcm1ldCBkZSBtb2RpZmllciBsYSByw6lwb25zZSBhdmFudCBwYXJzaW5nIGV0IGxhIGZvbmN0aW9uIGRvaXQgcmV0b3VybmVyIHVuZSBTdHJpbmcuXG4gKiAgICAgIENldHRlIGZvbmN0aW9uIHByZW5kIGVuIHBhcmFtw6h0cmUgbGEgcsOpcG9uc2UgdGVsbGUgcXVlIHJlbnZvecOpZSBwYXIgbGUgc2VydmljZVxuICogICAgICAoY2FkIGF1IGZvcm1hdCBqc29uIG91IHhtbCkuXG4gKiAgICAgIFBvdXIgbGUgSlNPTlAsIHNpIGxlIHBhcmFtw6h0cmUgXCJyYXdSZXNwb25zZVwiIGEgw6l0w6kgcHLDqWNpc8OpIGF2ZWMgbGEgdmFsZXVyIFwidHJ1ZVwiLFxuICogICAgICBsYSBmb25jdGlvbiBwcmVuZCBlbiBwYXJhbcOodHJlIHVuIE9iamVjdCBKYXZhU2NyaXB0IGNvbnRlbmFudCBsYSByw6lwb25zZSBYTUwuXG4gKlxuICogQGV4YW1wbGVcbiAqICAgdmFyIG9wdGlvbnMgPSB7XG4gKiAgICAgIHNlcnZlclVybCA6ICdodHRwOi8vbG9jYWxob3N0L3NlcnZpY2UvJyxcbiAqICAgICAgcHJvdG9jb2wgOiAnSlNPTlAnLCAvLyBKU09OUHxYSFJcbiAqICAgICAgc3NsIDogZmFsc2UsXG4gKiAgICAgIHByb3h5VVJMIDogbnVsbCxcbiAqICAgICAgY2FsbGJhY2tOYW1lIDogbnVsbCxcbiAqICAgICAgaHR0cE1ldGhvZCA6ICdHRVQnLCAvLyBHRVR8UE9TVFxuICogICAgICB0aW1lT3V0IDogMTAwMDAsIC8vIG1zXG4gKiAgICAgIHJhd1Jlc3BvbnNlIDogZmFsc2UsIC8vIHRydWV8ZmFsc2VcbiAqICAgICAgc2NvcGUgOiBudWxsLCAvLyB0aGlzXG4gKiAgICAgIG9uU3VjY2VzcyA6IGZ1bmN0aW9uIChyZXNwb25zZSkge30sXG4gKiAgICAgIG9uRmFpbHVyZSA6IGZ1bmN0aW9uIChlcnJvcikge30sXG4gKiAgICAgIG9uQmVmb3JlUGFyc2UgOiBmdW5jdGlvbiAocmF3UmVzcG9uc2UpIHt9XG4gKiAgIH07XG4gKi9cbmZ1bmN0aW9uIENvbW1vblNlcnZpY2UgKG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tbW9uU2VydmljZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfLmdldE1lc3NhZ2UoXCJDTEFTU19DT05TVFJVQ1RPUlwiKSk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiQ29tbW9uU2VydmljZVwiKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShcIltDb25zdHJ1Y3RldXIgQ29tbW9uU2VydmljZSAob3B0aW9ucyldXCIpO1xuXG4gICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gICAgLy8gcsOpY3Vww6lyYXRpb24gZGVzIG9wdGlvbnMgcGFyIGTDqWZhdXQgcG91ciBsZXMgcGFyYW3DqHRyZXMgb3B0aW9ubmVsc1xuICAgIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBkdSBzZXJ2aWNlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIC8vIHByb3RvY29sIDogXCJKU09OUFwiLFxuICAgICAgICBwcm90b2NvbCA6IFwiWEhSXCIsXG4gICAgICAgIHNzbCA6IHRydWUsXG4gICAgICAgIHByb3h5VVJMIDogXCJcIixcbiAgICAgICAgLy8gY2FsbGJhY2tOYW1lIDogXCJcIixcbiAgICAgICAgY2FsbGJhY2tTdWZmaXggOiBudWxsLFxuICAgICAgICBodHRwTWV0aG9kIDogXCJHRVRcIixcbiAgICAgICAgdGltZU91dCA6IDAsXG4gICAgICAgIHJhd1Jlc3BvbnNlIDogZmFsc2UsXG4gICAgICAgIHNjb3BlIDogdGhpcyxcbiAgICAgICAgLyoqXG4gICAgICAgICogY2FsbGJhY2sgcGFyIGRlZmF1dCBwb3VyIGxhIHJlcG9uc2VcbiAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgLSByZXNwb25zZVxuICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICovXG4gICAgICAgIG9uU3VjY2VzcyA6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblN1Y2Nlc3MgLSBsYSByZXBvbnNlIGVzdCBsYSBzdWl2YW50ZSA6IFwiLCByZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAqIGNhbGxiYWNrIHBhciBkZWZhdXQgcG91ciBsZXMgZXJyZXVyc1xuICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlcnJvciAtIGVycm9yXG4gICAgICAgICogQHByaXZhdGVcbiAgICAgICAgKi9cbiAgICAgICAgb25GYWlsdXJlIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSAyMDAgfHwgIWVycm9yLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25GYWlsdXJlIDogXCIsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uRmFpbHVyZSAtIEVycmV1ciAoXCIsIGVycm9yLnN0YXR1cywgXCIpIDogXCIsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGV0IG9uIGFqb3V0ZSBsZXMgb3B0aW9ucyBlbiBwYXJhbcOodHJlIGF1eCBvcHRpb25zIHBhciBkw6lmYXV0XG4gICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0KSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW29wdF0gPSBvcHRpb25zW29wdF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgICAvLyBhbmFseXNlIGRlcyBvcHRpb25zXG4gICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgICAvLyBtb2RpZmljYXRpb24gZGUgbGEgZm9uY3Rpb24gZGUgY2FsbGJhY2sgb25TdWNjZXNzIGRhbnMgbGUgY2FzIG/DuSBsYSByw6lwb25zZSBicnV0ZSBlc3QgZGVtYW5kw6llXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yYXdSZXNwb25zZSAmJiAhdGhpcy5vcHRpb25zLm9uU3VjY2Vzcykge1xuICAgICAgICAvKipcbiAgICAgICAgKiBjYWxsYmFjayBwYXIgZGVmYXV0IHBvdXIgbGEgcmVwb25zZVxuICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSAtIHJlc3BvbnNlXG4gICAgICAgICogQHByaXZhdGVcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblN1Y2Nlc3MgLSBsYSByw6lwb25zZSBicnV0ZSBkdSBzZXJ2aWNlIGVzdCBsYSBzdWl2YW50ZSA6IFwiLCByZXNwb25zZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZ2VzdGlvbiBkdSBjYWxsYmFjayBvblN1Y2Nlc3NcbiAgICB2YXIgYk9uU3VjY2VzcyA9ICEhKHRoaXMub3B0aW9ucy5vblN1Y2Nlc3MgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5vblN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIik7XG4gICAgaWYgKCFiT25TdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwib25TdWNjZXNzKClcIikpO1xuICAgIH1cblxuICAgIC8vIGdlc3Rpb24gZGUgbGEgbWV0aG9kZSBIVFRQXG4gICAgdGhpcy5vcHRpb25zLmh0dHBNZXRob2QgPSAodHlwZW9mIG9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJzdHJpbmdcIikgPyBvcHRpb25zLmh0dHBNZXRob2QudG9VcHBlckNhc2UoKSA6IFwiR0VUXCI7XG5cbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5odHRwTWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJQT1NUXCI6XG4gICAgICAgIGNhc2UgXCJHRVRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiUFVUXCI6XG4gICAgICAgIGNhc2UgXCJERUxFVEVcIjpcbiAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgY2FzZSBcIk9QVElPTlNcIjpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9OT1RfU1VQUE9SVFwiLCBcImh0dHBNZXRob2RcIikpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX1VOS05PV05cIiwgXCJodHRwTWV0aG9kXCIpKTtcbiAgICB9XG5cbiAgICAvLyBnZXN0aW9uIGR1IHByb3RvY29sZVxuICAgIC8vIHRoaXMub3B0aW9ucy5wcm90b2NvbCA9ICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gXCJzdHJpbmdcIiApID8gb3B0aW9ucy5wcm90b2NvbC50b1VwcGVyQ2FzZSgpIDogXCJKU09OUFwiO1xuICAgIHRoaXMub3B0aW9ucy5wcm90b2NvbCA9ICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gXCJzdHJpbmdcIikgPyBvcHRpb25zLnByb3RvY29sLnRvVXBwZXJDYXNlKCkgOiBcIlhIUlwiO1xuXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSBcIkpTT05QXCI6XG4gICAgICAgIGNhc2UgXCJYSFJcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX1VOS05PV05cIiwgXCJwcm90b2NvbFwiKSk7XG4gICAgfVxuXG4gICAgLy8gb24gZGV0ZXJtaW5lIGwnZW52aXJvbm5lbWVudCBkJ2V4ZWN1dGlvbiA6IGJyb3dzZXIgb3Ugbm9uID9cbiAgICAvLyBldCBvbiBsYW5jZSB1bmUgZXhjZXB0aW9uIHN1ciBsJ3V0aWxpc2F0aW9uIGR1IHByb3RvY29sZSBKU09OUCBwb3VyIG5vZGVKUy4uLlxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiICYmIHRoaXMub3B0aW9ucy5wcm90b2NvbCA9PT0gXCJKU09OUFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9OT1RfU1VQUE9SVF9OT0RFSlNcIiwgXCJwcm90b2NvbD1KU09OUCAoaW5zdGVhZCB1c2UgWEhSKVwiKSk7XG4gICAgfVxuXG4gICAgLy8gbGUgcHJvdG9jb2xlIEpTT05QIG5lIGZvbmN0aW9ubmUgcXUnZW4gR0VULlxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJvdG9jb2wgPT09IFwiSlNPTlBcIikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuaHR0cE1ldGhvZCA9IFwiR0VUXCI7XG4gICAgfVxuXG4gICAgLy8gZ2VzdGlvbiBkdSBjYWNoZVxuICAgIHRoaXMub3B0aW9ucy5ub2NhY2hlID0gb3B0aW9ucy5ub2NhY2hlIHx8IGZhbHNlO1xuXG4gICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gICAgLy8gYXR0cmlidXRzIGQnaW5zdGFuY2VzXG4gICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgZGUgcsOpcG9uc2UgZHUgc2VydmljZVxuICAgICAqL1xuICAgIHRoaXMub3B0aW9ucy5vdXRwdXRGb3JtYXQgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIFJlcXXDqnRlIGVudm95w6llIGF1IHNlcnZpY2VcbiAgICAgKi9cbiAgICB0aGlzLnJlcXVlc3QgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIFJlcG9uc2UgZHUgc2VydmljZVxuICAgICAqL1xuICAgIHRoaXMucmVzcG9uc2UgPSBudWxsO1xufVxuXG4vKipcbiAqIEBsZW5kcyBtb2R1bGU6Q29tbW9uU2VydmljZVxuICovXG5Db21tb25TZXJ2aWNlLnByb3RvdHlwZSA9IHtcblxuICAgIC8qXG4gICAgICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciA6IENvbW1vblNlcnZpY2UsXG5cbiAgICAvKipcbiAgICAgKiBBcHBlbCBkdSBzZXJ2aWNlIEfDqW9wb3J0YWlsXG4gICAgICovXG4gICAgY2FsbCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyoganNoaW50IHZhbGlkdGhpcyA6IHRydWUgKi9cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJDb21tb25TZXJ2aWNlOjpjYWxsICgpXCIpO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgICAgLyoqIGZvbmN0aW9uIGQnZXhlY3V0aW9uICovXG4gICAgICAgIGZ1bmN0aW9uIHJ1biAoKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkNvbW1vblNlcnZpY2U6OnJ1biAoKVwiKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRSZXF1ZXN0LmNhbGwoY29udGV4dCwgb25FcnJvciwgb25CdWlsZFJlcXVlc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuLmNhbGwoY29udGV4dCk7XG5cbiAgICAgICAgLy8gY2FsbGJhY2sgZGUgZmluIGRlIGNvbnN0cnVjdGlvbiBkZSBsYSByZXF1w6p0ZVxuICAgICAgICBmdW5jdGlvbiBvbkJ1aWxkUmVxdWVzdCAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkNvbW1vblNlcnZpY2U6Om9uQnVpbGRSZXF1ZXN0IDogXCIsIHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNhbGxTZXJ2aWNlLmNhbGwoY29udGV4dCwgb25FcnJvciwgb25DYWxsU2VydmljZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjYWxsYmFjayBkZSBmaW4gZCdhcHBlbCBhdSBzZXJ2aWNlXG4gICAgICAgIGZ1bmN0aW9uIG9uQ2FsbFNlcnZpY2UgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJDb21tb25TZXJ2aWNlOjpvbkNhbGxTZXJ2aWNlIDogXCIsIHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmFuYWx5emVSZXNwb25zZS5jYWxsKGNvbnRleHQsIG9uRXJyb3IsIG9uQW5hbHl6ZVJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGxiYWNrIGRlIGZpbiBkZSBsZWN0dXJlIGRlIGxhIHJlcG9uc2VcbiAgICAgICAgZnVuY3Rpb24gb25BbmFseXplUmVzcG9uc2UgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJDb21tb25TZXJ2aWNlOjpvbkFuYWx5emVSZXNwb25zZSA6IFwiLCByZXN1bHQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vblN1Y2Nlc3MuY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvclNlcnZpY2UoXCJBbmFseXNlIGRlIGxhIHJlcG9uc2UgZW4gw6ljaGVjICE/XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGxiYWNrIGRlIGdlc3Rpb24gZGVzIGVycmV1cnMgOiByZW52b2l0IHVuIG9iamV0IGRlIHR5cGUgRXJyb3JTZXJ2aWNlXG4gICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkNvbW1vblNlcnZpY2U6Om9uRXJyb3IoKVwiKTtcbiAgICAgICAgICAgIC8vIGVycm9yIDogbCdvYmpldCBlc3QgZHUgdHlwZSBFcnJvclNlcnZpY2Ugb3UgRXJyb3JcbiAgICAgICAgICAgIHZhciBlID0gZXJyb3I7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRXJyb3JTZXJ2aWNlKSkge1xuICAgICAgICAgICAgICAgIGUgPSBuZXcgRXJyb3JTZXJ2aWNlKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uRmFpbHVyZS5jYWxsKHRoaXMsIGUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyw6lhdGlvbiBkZSBsYSByZXF1w6p0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycm9yIC0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBidWlsZFJlcXVlc3QgOiBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICAgICAgLy8gSU5GT1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIm92ZXJ3cml0dGVuIG1ldGhvZCAhXCIpO1xuICAgICAgICAvLyByZXRvdXJuZSBsJ29iamV0ICd0aGlzLnJlcXVlc3QnXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IuY2FsbCh0aGlzLCBcIlRoaXMgbWV0aG9kIG11c3QgYmUgb3ZlcndyaXR0ZW4gIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzLmNhbGwodGhpcywgXCJUaGlzIG1ldGhvZCBtdXN0IGJlIG92ZXJ3cml0dGVuICFcIik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFwcGVsIGR1IHNlcnZpY2VcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvciAtIGNhbGxiYWNrXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3VjY2VzcyAtIGNhbGxiYWNrXG4gICAgICovXG4gICAgY2FsbFNlcnZpY2UgOiBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICAgICAgLy8gSU5GT1xuICAgICAgICAvLyByZXRvdXJuZSBsJ29iamV0ICd0aGlzLnJlc3BvbnNlJ1xuXG4gICAgICAgIC8vIE5PVEVTXG4gICAgICAgIC8vICBQb3VyIGxlIG1vZGUgWEhSLCBvbiByZWN1cMOocmUgdW5lIHJlcG9uc2Ugc291cyBmb3JtZSBkJ3VuIGpzb24gb3UgeG1sICgjZG9jdW1lbnQpLlxuICAgICAgICAvLyAgUG91ciBsZSBtb2RlIEpTT05QLCBvbiBhIHRvdWpvdXJzIHVuIG9iamV0IEpTT04gbWFpcyBzb3VzIDIgZm9ybWVzIDpcbiAgICAgICAgLy8gICAgICAtIG5hdGlmXG4gICAgICAgIC8vICAgICAgLSBYTUwgZW5jYXBzdWzDqSA6XG4gICAgICAgIC8vICAgICAgICAgIHtodHRwIDoge3N0YXR1czoyMDAsIGVycm9yOm51bGx9LHhtbCA6J3LDqXBvbnNlIGR1IHNlcnZpY2UnfVxuICAgICAgICAvLyAgICAgICAgICB7aHR0cCA6IHtzdGF0dXM6NDAwLCBlcnJvcjoncmVwb25zZSBkdSBzZXJ2aWNlJ30seG1sIDpudWxsfVxuICAgICAgICAvLyAgRW4gWEhSLCBsYSByZXBvbnNlIGVzdCBkaXJlY3RlbWVudCBzYXV2ZWdhcmTDqWUgZGFucyAndGhpcy5yZXNwb25zZScuXG4gICAgICAgIC8vICBQYXIgY29udHJlLCBlbiBKU09OUCwgb24gZG9pdCBhbmFseXNlciBsYSByZXBvbnNlIChzdGF0dXMgb3Ugbm9uIHZpZGUpLFxuICAgICAgICAvLyAgZXQgbmUgcmVudm95ZXIgcXVlIGxlIGNvbnRlbnUgKHhtbCBvdSBsJ29iamV0KVxuXG4gICAgICAgIC8vIGdlc3Rpb24gZGUgbGEgcHJveGlmaWNhdGlvbiBkdSBzZXJ2aWNlXG4gICAgICAgIHZhciBzdHJVcmxQcm94aWZpZWQgPSBudWxsO1xuICAgICAgICB2YXIgc3RyRGF0YSA9IHRoaXMucmVxdWVzdDtcblxuICAgICAgICAvLyBhIHQgb24gbWlzIGVuIHBsYWNlIHVuIHByb3h5ID9cbiAgICAgICAgLy8gbGEgcHJveHlmaWNhdGlvbiBlc3QgdmFsYWJsZSB1bmlxdWVtZW50IGVuIG1vZGUgWEhSICFcbiAgICAgICAgdmFyIGJVcmxQcm94aWZpZWQgPSAhISh0aGlzLm9wdGlvbnMucHJveHlVUkwgJiYgdGhpcy5vcHRpb25zLnByb3RvY29sID09PSBcIlhIUlwiKTtcblxuICAgICAgICAvLyByYWpvdXQgZGUgbCdvcHRpb24gZ3BiaWJhY2Nlc3NcbiAgICAgICAgLy8gSU5GTyA6IGFjY2VzIGF1IG51bWVybyBkZSB2ZXJzaW9uIGRlIHBhY2thZ2UuY29uZiBhcHLDqXMgY29tcGlsYXRpb24gIVxuICAgICAgICB2YXIgcmVxdWVzdE1ldGFPcHRpb25zID0ge1xuICAgICAgICAgICAgXCJncC1hY2Nlc3MtbGliXCIgOiBQa2cudmVyc2lvblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpS2V5KSB7XG4gICAgICAgICAgICByZXF1ZXN0TWV0YU9wdGlvbnMuYXBpS2V5ID0gdGhpcy5vcHRpb25zLmFwaUtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwgPSBIZWxwZXIubm9ybWFseXplVXJsKHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwsIHJlcXVlc3RNZXRhT3B0aW9ucywgZmFsc2UpO1xuXG4gICAgICAgIC8vIHNpIGxlIHByb3h5IGVzdCByZW5zZWlnbsOpLCBvbiBwcm94aWZpZSBsJ3VybCBkdSBzZXJ2aWNlXG4gICAgICAgIGlmIChiVXJsUHJveGlmaWVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmh0dHBNZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAgICAgICBzdHJVcmxQcm94aWZpZWQgPSB0aGlzLm9wdGlvbnMucHJveHlVUkwgKyBIZWxwZXIubm9ybWFseXplVXJsKHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwsIHRoaXMucmVxdWVzdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3RyRGF0YSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJQT1NUXCIpIHtcbiAgICAgICAgICAgICAgICBzdHJVcmxQcm94aWZpZWQgPSB0aGlzLm9wdGlvbnMucHJveHlVUkwgKyBIZWxwZXIubm9ybWFseXplVXJsKHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwsIG51bGwsIHRydWUpO1xuICAgICAgICAgICAgICAgIHN0ckRhdGEgPSB0aGlzLnJlcXVlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb250ZXh0ZSBkdSBjb21wb3NhbnQgc3DDqWNpZmlxdWUgIVxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICB1cmwgOiBzdHJVcmxQcm94aWZpZWQgfHwgdGhpcy5vcHRpb25zLnNlcnZlclVybCxcbiAgICAgICAgICAgIG1ldGhvZCA6IHRoaXMub3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgcHJvdG9jb2wgOiB0aGlzLm9wdGlvbnMucHJvdG9jb2wsXG4gICAgICAgICAgICB0aW1lT3V0IDogdGhpcy5vcHRpb25zLnRpbWVPdXQgfHwgMCxcbiAgICAgICAgICAgIGZvcm1hdCA6IHRoaXMub3B0aW9ucy5vdXRwdXRGb3JtYXQsIC8vIGNlY2kgZGVjbGVuY2hlIGxlIHBhcnNpbmcgZGUgbGEgcmVwb25zZSBkdSBzZXJ2aWNlLCBtYWlzIG9uIHNvdWhhaXRlIHRvdWpvdXJzIHVuZSByZXBvbnNlIGJydXRlIChzdHJpbmcpICFcbiAgICAgICAgICAgIG5vY2FjaGUgOiB0aGlzLm9wdGlvbnMubm9jYWNoZSB8fCBmYWxzZSwgLy8gY2VjaSBwZXJtZXQgZCdham91dGVyIHVuIHRpbWVzdGFtcCBkYW5zIGxhIHJlcXXDqnRlXG4gICAgICAgICAgICB3cmFwIDogdGhpcy5vcHRpb25zLnByb3RvY29sICE9PSBcIlhIUlwiLCAvLyBjZWNpIGRlY2xlbmNoZSBsJ2VuY2Fwc3VsYXRpb24gZGUgbGEgcmVwb25zZSBYTUwgZHUgc2VydmljZSBkYW5zIGR1IEpTT04sIG1haXMgcGFzIGVuIG1vZGUgWEhSICFcbiAgICAgICAgICAgIGNhbGxiYWNrU3VmZml4IDogdGhpcy5vcHRpb25zLmNhbGxiYWNrU3VmZml4LFxuICAgICAgICAgICAgLy8gY2FsbGJhY2tOYW1lIDogdGhpcy5vcHRpb25zLmNhbGxiYWNrTmFtZSB8fCBudWxsLFxuICAgICAgICAgICAgZGF0YSA6IHN0ckRhdGEsXG4gICAgICAgICAgICBoZWFkZXJzIDogbnVsbCwgLy8gVE9ETy4uLlxuICAgICAgICAgICAgY29udGVudCA6IHRoaXMub3B0aW9ucy5jb250ZW50VHlwZSB8fCBcImFwcGxpY2F0aW9uL3htbFwiLFxuICAgICAgICAgICAgc2NvcGUgOiB0aGlzLm9wdGlvbnMuc2NvcGUgfHwgdGhpcyxcbiAgICAgICAgICAgIC8vIGNhbGxiYWNrIGRlIHJlcG9uc2VcbiAgICAgICAgICAgIG9uUmVzcG9uc2UgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZShcImNhbGxTZXJ2aWNlOjpvblJlc3BvbnNlKClcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBsZSBjb250ZW51IGRlIGxhIHJlcG9uc2Ugw6AgcmVudm95ZXIgIVxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIFhIUiA6IG9uIHJlbnZvaWUgdG91am91cnMgbGEgcmVwb25zZSBicnV0ZSBkdSBzZXJ2aWNlIChqc29uIG91IHhtbClcbiAgICAgICAgICAgICAgICAvLyBhdSBwYXJzZXIgZHUgY29tcG9zYW50Li4uXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5wcm90b2NvbCA9PT0gXCJYSFJcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZShcIlJlc3BvbnNlIFhIUlwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSByZXNwb25zZTsgLy8gcGFyIGRlZmF1dCwgbGEgcmVwb25zZSBkdSBzZXJ2aWNlICAhXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSlNPTlAgOiBvbiBwcmUtYW5hbHlzZSBsYSByZXBvbnNlIGJydXRlIGR1IHNlcnZpY2UgKGVuY2Fwc3VsZXIgb3UgcGFzKVxuICAgICAgICAgICAgICAgIC8vIGF2YW50IGRlIGwnZW52b3llciBhdSBwYXJzZXIgZHUgY29tcG9zYW50Li4uXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5wcm90b2NvbCA9PT0gXCJKU09OUFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLnRyYWNlKFwiUmVzcG9uc2UgSlNPTlwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXBvbnNlIGVuY2Fwc3Vsw6llIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleC4gcmVwb25zZSBkdSBzZXJ2aWNlIGVuIHhtbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID4ge2h0dHAgOiB7c3RhdHVzOjIwMCwgZXJyb3I6bnVsbH0seG1sIDoncsOpcG9uc2UgZHUgc2VydmljZSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmh0dHAuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuY2FsbChzZWxmLCBuZXcgRXJyb3JTZXJ2aWNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IHJlc3BvbnNlLmh0dHAuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6IHJlc3BvbnNlLmh0dHAuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogRXJyb3JTZXJ2aWNlLlRZUEVfU1JWRVJSXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSByZXNwb25zZS54bWw7IC8vIHBhciBkZWZhdXQgIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLnJhd1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcG9uc2Ugbm9uIGVuY2Fwc3Vsw6llIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleC4gcmVwb25zZSBkdSBzZXJ2aWNlIGVuIGpzb24gb3UgeG1sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuY2FsbChzZWxmLCBuZXcgRXJyb3JTZXJ2aWNlKFwiTGUgY29udGVudSBkZSBsYSByZXBvbnNlIGVzdCB2aWRlICE/XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHNpIG9uIHNvdWhhaXRlIHBhcnNlciBsYSByZXBvbnNlIGR1IHNlcnZpY2VcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNlbGYub3B0aW9ucy5vbkJlZm9yZVBhcnNlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1Jlc3BvbnNlID0gc2VsZi5vcHRpb25zLm9uQmVmb3JlUGFyc2UoY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3UmVzcG9uc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhIHJlcG9uc2UgcGFyc8OpZSBwYXIgbCd1dGlsaXNhdGV1ciBlc3QgcmV0b3VybsOpZSBzb3VzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtZSBkZSBzdHJpbmcgIVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IG5ld1Jlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNhdXZlZ2FyZGUgZGUgbGEgcmVwb25zZSBkYW5zIGwnb2JqZXQgcGFyZW50IChDb21tb25TZXJ2aWNlKVxuICAgICAgICAgICAgICAgIHNlbGYucmVzcG9uc2UgPSBjb250ZW50O1xuICAgICAgICAgICAgICAgIC8vIG9uIHJlbnZvaWUgbGEgcmVwb25zZS4uLlxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbChzZWxmLCBjb250ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBjYWxsYmFjayBkZXMgZXJyZXVyc1xuICAgICAgICAgICAgb25GYWlsdXJlIDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZShcImNhbGxTZXJ2aWNlOjpvbkZhaWx1cmUoKVwiKTtcbiAgICAgICAgICAgICAgICAvLyBvbiBlc3QgZm9yY2VtZW50IHN1ciB1bmUgZXJyZXVyIGxldsOpZSBwYXIgdW4gc2VydmljZSAhXG4gICAgICAgICAgICAgICAgZS50eXBlID0gRXJyb3JTZXJ2aWNlLlRZUEVfU1JWRVJSO1xuICAgICAgICAgICAgICAgIGVycm9yLmNhbGwoc2VsZiwgbmV3IEVycm9yU2VydmljZShlKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gY2FsbGJhY2sgZGUgdGltZU91dFxuICAgICAgICAgICAgb25UaW1lT3V0IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLnRyYWNlKFwiY2FsbFNlcnZpY2U6Om9uVGltZU91dCgpXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmNhbGwoc2VsZiwgbmV3IEVycm9yU2VydmljZShcIlRpbWVPdXQhXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBQcm90b2NvbC5zZW5kKG9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbmFseXNlIGRlIGxhIHLDqXBvbnNlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgLSBjYWxsYmFja1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgLSBjYWxsYmFja1xuICAgICAqL1xuICAgIGFuYWx5emVSZXNwb25zZSA6IGZ1bmN0aW9uIChlcnJvciwgc3VjY2Vzcykge1xuICAgICAgICAvLyBJTkZPXG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwib3ZlcndyaXR0ZW4gbWV0aG9kICFcIik7XG4gICAgICAgIC8vIHJldG91cm5lIGwnb2JqZXQgc3DDqWNpZmlxdWUgYXUgdHlwZSBkZSBjb21wb3NhbnQgKGpzb24pXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IuY2FsbCh0aGlzLCBcIlRoaXMgbWV0aG9kIG11c3QgYmUgb3ZlcndyaXR0ZW4gIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzLmNhbGwodGhpcywgXCJUaGlzIG1ldGhvZCBtdXN0IGJlIG92ZXJ3cml0dGVuICFcIik7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25TZXJ2aWNlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/CommonService.js\n"); + +/***/ }), + +/***/ "./src/Services/Config/Config.js": +/*!***************************************!*\ + !*** ./src/Services/Config/Config.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _ConfigInterface__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ConfigInterface */ \"./src/Services/Config/ConfigInterface.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\n\n\n/**\n * @classdesc\n *\n * Recupération de la configuration de clés Géoportail sous forme de JSON\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Config\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n * @param {Sting} options.apiKey - clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule\n * @param {Boolean} [options.sync=false] - force le mode synchrone\n * @param {String} options.customConfigFile - chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey.\n * @see Gp.Services.GetConfigInterface\n *\n * @example\n * var options = {\n * apiKey : \"cartes,ortho\",\n * sync : false,\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * };\n *\n */\nfunction Config(options) {\n if (!(this instanceof Config)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"Config\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Config\";\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"Gp.Config\");\n this.logger.trace(\"[Constructeur Config (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n if (!options.apiKey && !options.customConfigFile) {\n // si pas de thème spécifié, on récupère toutes les ressources possibles dans l'objet Config\n options.apiKey = \"full\";\n }\n this.options = {};\n this.options.onSuccess = options.onSuccess;\n this.options.onFailure = options.onFailure;\n\n // mode sync\n this.options.sync = options.sync || false;\n\n // gestion d'un tableau d'url des fichiers de configuration\n this.options.listConfigUrls = options.customConfigFile ? [options.customConfigFile] : !Array.isArray(options.apiKey) ? _DefaultUrlService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Config.url(options.apiKey.split(\",\")) : _DefaultUrlService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Config.url(options.apiKey);\n}\n\n/**\n * @lends module:Config#\n */\nConfig.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nConfig.prototype.constructor = Config;\n\n/**\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.buildRequest = function (error, success) {\n // liste des urls des fichiers de configuration en JSON\n this.listConfigUrls = this.options.listConfigUrls;\n if (!this.listConfigUrls) {\n error.call(this, new Error(\"url by default not found !\"));\n return;\n }\n\n // INFO :\n // il n'y a pas de construction de requête,\n // on passe directement à l'appel des requêtes\n success.call(this, this.listConfigUrls);\n};\n\n/**\n * Récupération des configuration\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.callService = function (error, success) {\n if (this.options.sync) {\n __callServiceSync.call(this, error, success);\n } else {\n __callService.call(this, error, success);\n }\n};\n\n/**\n * Requêtes en mode asynchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callService = function __callService(error, success) {\n var _this = this;\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // test on env. nodejs or browser\n var Fetch = null;\n if (typeof window === \"undefined\") {\n var nodefetch = __webpack_require__(/*! node-fetch */ \"node-fetch\");\n Fetch = nodefetch;\n } else {\n Fetch = window.fetch;\n }\n\n // the factory of fetch !\n var fetchFactory = function fetchFactory(url) {\n return Fetch(url, {\n credentials: \"same-origin\"\n }).then(function (response) {\n if (response.ok) {\n return response.json().then(function (json) {\n // TODO :\n // tester le contenu !\n return json;\n })[\"catch\"](function (error) {\n throw new Error(\"Exception Json : \" + error);\n });\n } else {\n throw new Error(\"Exception HTTP : \" + response.status + \" (status code) !\");\n }\n })[\"catch\"](function (error) {\n return new Promise(function (resolve, reject) {\n // eslint-disable-line no-unused-vars\n reject(error);\n });\n });\n };\n\n // construction des promises fetch\n var promises = [];\n for (var index = 0; index < this.listConfigUrls.length; index++) {\n var url = this.listConfigUrls[index];\n promises.push(fetchFactory(url));\n }\n Promise.all(promises).then(function (results) {\n if (!results) {\n throw new Error(\"results config empty !?\");\n }\n results.forEach(function (result) {\n // TODO :\n // verification des resultats\n _this.listConfigResults.push(result);\n });\n }).then(function () {\n success.call(_this, _this.listConfigResults);\n })[\"catch\"](function (e) {\n // TODO :\n // construction d'un message\n error.call(_this, e);\n });\n};\n\n/**\n * Requêtes en mode synchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callServiceSync = function __callServiceSync(error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // FIXME :\n // boucle synchrone !\n for (var i = 0; i < this.listConfigUrls.length; i++) {\n var url = this.listConfigUrls[i];\n // TODO :\n // prévoir le CORS, headers, ...\n var request = new XMLHttpRequest();\n request.open(\"GET\", url, false);\n request.send(null);\n if (request.status === 200) {\n // TODO :\n // tester la reponse !\n var response = JSON.parse(request.responseText);\n this.listConfigResults.push(response);\n }\n }\n // callback\n if (this.listConfigResults.length !== 0) {\n success.call(this, this.listConfigResults);\n } else {\n error.call(this, new Error(\"...\"));\n }\n};\n\n/**\n * Analyse et mise en forme de la réponse en fusionnant les configurations\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.analyzeResponse = function (error, success) {\n // fonction de merge des objects JSON\n var mergeConfig = function mergeConfig(objects) {\n // objet fusion des couches\n var allLayersConfig = {};\n // objet fusion des clés\n var allKeysConfig = {};\n // objet fusion des TMS\n var allTMSConfig = {};\n\n // on fusionne les résultat\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i].generalOptions || !objects[i].layers) {\n return;\n }\n allKeysConfig = _objectSpread(_objectSpread({}, allKeysConfig), objects[i].generalOptions.apiKeys);\n allLayersConfig = _objectSpread(_objectSpread({}, allLayersConfig), objects[i].layers);\n allTMSConfig = _objectSpread(_objectSpread({}, allTMSConfig), objects[i].tileMatrixSets);\n }\n var mergedConfig = {\n generalOptions: {\n apiKeys: allKeysConfig\n },\n layers: allLayersConfig,\n tileMatrixSets: allTMSConfig\n };\n return mergedConfig;\n };\n\n // fusion des configurations JSON\n var ConfigJSON = mergeConfig(this.listConfigResults);\n if (!ConfigJSON) {\n error.call(this, new Error(\"configuration structure not conforme !\"));\n return;\n }\n\n // creation des interfaces\n var IConfig = new _ConfigInterface__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n // ajout des interfaces avec la configuration JSON\n Object.assign(IConfig, ConfigJSON);\n\n // définition de la variable globale Gp.Config\n var scope = typeof window !== \"undefined\" ? window : {};\n if (!scope.Gp) {\n scope.Gp = {};\n }\n\n // enregistrement\n if (scope.Gp.Config) {\n Object.assign(scope.Gp.Config, IConfig);\n // dans le doute..., ceinture et bretelles !\n for (var property in IConfig) {\n scope.Gp.Config[property] = IConfig[property];\n }\n } else {\n scope.Gp.Config = IConfig;\n }\n\n // INFO :\n // il n'y a pas d'analyse des résultats,\n // on passe directement à l'appel de la callback utilisateur\n success.call(this, scope.Gp.Config);\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Config);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Db25maWcvQ29uZmlnLmpzP2FjMjIiXSwibmFtZXMiOlsiQ29uZmlnIiwib3B0aW9ucyIsIlR5cGVFcnJvciIsIl8iLCJnZXRNZXNzYWdlIiwiQ0xBU1NOQU1FIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJiT25TdWNjZXNzIiwib25TdWNjZXNzIiwiRXJyb3IiLCJhcGlLZXkiLCJjdXN0b21Db25maWdGaWxlIiwib25GYWlsdXJlIiwic3luYyIsImxpc3RDb25maWdVcmxzIiwiQXJyYXkiLCJpc0FycmF5IiwiRGVmYXVsdFVybFNlcnZpY2UiLCJ1cmwiLCJzcGxpdCIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsIkNvbW1vblNlcnZpY2UiLCJjb25zdHJ1Y3RvciIsImJ1aWxkUmVxdWVzdCIsImVycm9yIiwic3VjY2VzcyIsImNhbGwiLCJjYWxsU2VydmljZSIsIl9fY2FsbFNlcnZpY2VTeW5jIiwiX19jYWxsU2VydmljZSIsIl90aGlzIiwibGlzdENvbmZpZ1Jlc3VsdHMiLCJGZXRjaCIsIndpbmRvdyIsIm5vZGVmZXRjaCIsInJlcXVpcmUiLCJmZXRjaCIsImZldGNoRmFjdG9yeSIsImNyZWRlbnRpYWxzIiwidGhlbiIsInJlc3BvbnNlIiwib2siLCJqc29uIiwic3RhdHVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlcyIsImluZGV4IiwibGVuZ3RoIiwicHVzaCIsImFsbCIsInJlc3VsdHMiLCJmb3JFYWNoIiwicmVzdWx0IiwiZSIsImkiLCJyZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2VuZCIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImFuYWx5emVSZXNwb25zZSIsIm1lcmdlQ29uZmlnIiwib2JqZWN0cyIsImFsbExheWVyc0NvbmZpZyIsImFsbEtleXNDb25maWciLCJhbGxUTVNDb25maWciLCJnZW5lcmFsT3B0aW9ucyIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJhcGlLZXlzIiwidGlsZU1hdHJpeFNldHMiLCJtZXJnZWRDb25maWciLCJDb25maWdKU09OIiwiSUNvbmZpZyIsIkNvbmZpZ0ludGVyZmFjZSIsImFzc2lnbiIsInNjb3BlIiwiR3AiLCJwcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQWlEO0FBQ0g7QUFDRDtBQUNRO0FBQ0w7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxNQUFNQSxDQUFFQyxPQUFPLEVBQUU7RUFDdEIsSUFBSSxFQUFFLElBQUksWUFBWUQsTUFBTSxDQUFDLEVBQUU7SUFDM0IsTUFBTSxJQUFJRSxTQUFTLENBQUNDLGdFQUFDLENBQUNDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztFQUNwRTs7RUFFQTtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxRQUFRO0VBRXpCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsV0FBVyxDQUFDO0VBQzNDLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxLQUFLLENBQUMsaUNBQWlDLENBQUM7O0VBRXBEO0VBQ0E7RUFDQTs7RUFFQTtFQUNBLElBQUlDLFVBQVUsR0FBRyxDQUFDLEVBQUVULE9BQU8sQ0FBQ1UsU0FBUyxLQUFLLElBQUksSUFBSSxPQUFPVixPQUFPLENBQUNVLFNBQVMsS0FBSyxVQUFVLENBQUM7RUFDMUYsSUFBSSxDQUFDRCxVQUFVLEVBQUU7SUFDYixNQUFNLElBQUlFLEtBQUssQ0FBQ1QsZ0VBQUMsQ0FBQ0MsVUFBVSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztFQUNqRTtFQUNBLElBQUksQ0FBQ0gsT0FBTyxDQUFDWSxNQUFNLElBQUksQ0FBQ1osT0FBTyxDQUFDYSxnQkFBZ0IsRUFBRTtJQUM5QztJQUNBYixPQUFPLENBQUNZLE1BQU0sR0FBRyxNQUFNO0VBQzNCO0VBQ0EsSUFBSSxDQUFDWixPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQ2pCLElBQUksQ0FBQ0EsT0FBTyxDQUFDVSxTQUFTLEdBQUdWLE9BQU8sQ0FBQ1UsU0FBUztFQUMxQyxJQUFJLENBQUNWLE9BQU8sQ0FBQ2MsU0FBUyxHQUFHZCxPQUFPLENBQUNjLFNBQVM7O0VBRTFDO0VBQ0EsSUFBSSxDQUFDZCxPQUFPLENBQUNlLElBQUksR0FBR2YsT0FBTyxDQUFDZSxJQUFJLElBQUksS0FBSzs7RUFFekM7RUFDQSxJQUFJLENBQUNmLE9BQU8sQ0FBQ2dCLGNBQWMsR0FBSWhCLE9BQU8sQ0FBQ2EsZ0JBQWdCLEdBQ2pELENBQUNiLE9BQU8sQ0FBQ2EsZ0JBQWdCLENBQUMsR0FDMUIsQ0FBQ0ksS0FBSyxDQUFDQyxPQUFPLENBQUNsQixPQUFPLENBQUNZLE1BQU0sQ0FBQyxHQUMxQk8sMERBQWlCLENBQUNwQixNQUFNLENBQUNxQixHQUFHLENBQUNwQixPQUFPLENBQUNZLE1BQU0sQ0FBQ1MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3ZERiwwREFBaUIsQ0FBQ3BCLE1BQU0sQ0FBQ3FCLEdBQUcsQ0FBQ3BCLE9BQU8sQ0FBQ1ksTUFBTSxDQUFDO0FBQzFEOztBQUVBO0FBQ0E7QUFDQTtBQUNBYixNQUFNLENBQUN1QixTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDQyxzREFBYSxDQUFDSCxTQUFTLEVBQUU7RUFDdEQ7RUFDQTtBQUFBLENBQ0gsQ0FBQzs7QUFFRjtBQUNBO0FBQ0E7QUFDQXZCLE1BQU0sQ0FBQ3VCLFNBQVMsQ0FBQ0ksV0FBVyxHQUFHM0IsTUFBTTs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDdUIsU0FBUyxDQUFDSyxZQUFZLEdBQUcsVUFBVUMsS0FBSyxFQUFFQyxPQUFPLEVBQUU7RUFDdEQ7RUFDQSxJQUFJLENBQUNiLGNBQWMsR0FBRyxJQUFJLENBQUNoQixPQUFPLENBQUNnQixjQUFjO0VBRWpELElBQUksQ0FBQyxJQUFJLENBQUNBLGNBQWMsRUFBRTtJQUN0QlksS0FBSyxDQUFDRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUluQixLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN6RDtFQUNKOztFQUVBO0VBQ0E7RUFDQTtFQUNBa0IsT0FBTyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQ2QsY0FBYyxDQUFDO0FBQzNDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQWpCLE1BQU0sQ0FBQ3VCLFNBQVMsQ0FBQ1MsV0FBVyxHQUFHLFVBQVVILEtBQUssRUFBRUMsT0FBTyxFQUFFO0VBQ3JELElBQUksSUFBSSxDQUFDN0IsT0FBTyxDQUFDZSxJQUFJLEVBQUU7SUFDbkJpQixpQkFBaUIsQ0FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRUYsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDaEQsQ0FBQyxNQUFNO0lBQ0hJLGFBQWEsQ0FBQ0gsSUFBSSxDQUFDLElBQUksRUFBRUYsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDNUM7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUksYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFhTCxLQUFLLEVBQUVDLE9BQU8sRUFBRTtFQUFBLElBQUFLLEtBQUE7RUFDMUM7RUFDQSxJQUFJLENBQUNDLGlCQUFpQixHQUFHLEVBQUU7O0VBRTNCO0VBQ0EsSUFBSUMsS0FBSyxHQUFHLElBQUk7RUFDaEIsSUFBSSxPQUFPQyxNQUFNLEtBQUssV0FBVyxFQUFFO0lBQy9CLElBQUlDLFNBQVMsR0FBR0MsbUJBQU8sQ0FBQyw4QkFBWSxDQUFDO0lBQ3JDSCxLQUFLLEdBQUdFLFNBQVM7RUFDckIsQ0FBQyxNQUFNO0lBQ0hGLEtBQUssR0FBR0MsTUFBTSxDQUFDRyxLQUFLO0VBQ3hCOztFQUVBO0VBQ0EsSUFBSUMsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUlyQixHQUFHLEVBQUs7SUFDeEIsT0FBT2dCLEtBQUssQ0FBQ2hCLEdBQUcsRUFBRTtNQUFFc0IsV0FBVyxFQUFHO0lBQWMsQ0FBQyxDQUFDLENBQzdDQyxJQUFJLENBQUMsVUFBQ0MsUUFBUSxFQUFLO01BQ2hCLElBQUlBLFFBQVEsQ0FBQ0MsRUFBRSxFQUFFO1FBQ2IsT0FBT0QsUUFBUSxDQUFDRSxJQUFJLENBQUMsQ0FBQyxDQUNqQkgsSUFBSSxDQUFDLFVBQUNHLElBQUksRUFBSztVQUNaO1VBQ0E7VUFDQSxPQUFPQSxJQUFJO1FBQ2YsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFDbEIsS0FBSyxFQUFLO1VBQ2QsTUFBTSxJQUFJakIsS0FBSyxDQUFDLG1CQUFtQixHQUFHaUIsS0FBSyxDQUFDO1FBQ2hELENBQUMsQ0FBQztNQUNWLENBQUMsTUFBTTtRQUNILE1BQU0sSUFBSWpCLEtBQUssQ0FBQyxtQkFBbUIsR0FBR2lDLFFBQVEsQ0FBQ0csTUFBTSxHQUFHLGtCQUFrQixDQUFDO01BQy9FO0lBQ0osQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFDbkIsS0FBSyxFQUFLO01BQ2QsT0FBTyxJQUFJb0IsT0FBTyxDQUFDLFVBQUNDLE9BQU8sRUFBRUMsTUFBTSxFQUFLO1FBQ3BDO1FBQ0FBLE1BQU0sQ0FBQ3RCLEtBQUssQ0FBQztNQUNqQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDVixDQUFDOztFQUVEO0VBQ0EsSUFBSXVCLFFBQVEsR0FBRyxFQUFFO0VBQ2pCLEtBQUssSUFBSUMsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHLElBQUksQ0FBQ3BDLGNBQWMsQ0FBQ3FDLE1BQU0sRUFBRUQsS0FBSyxFQUFFLEVBQUU7SUFDN0QsSUFBTWhDLEdBQUcsR0FBRyxJQUFJLENBQUNKLGNBQWMsQ0FBQ29DLEtBQUssQ0FBQztJQUN0Q0QsUUFBUSxDQUFDRyxJQUFJLENBQUNiLFlBQVksQ0FBQ3JCLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDO0VBRUE0QixPQUFPLENBQUNPLEdBQUcsQ0FBQ0osUUFBUSxDQUFDLENBQ2hCUixJQUFJLENBQUMsVUFBQ2EsT0FBTyxFQUFLO0lBQ2YsSUFBSSxDQUFDQSxPQUFPLEVBQUU7TUFDVixNQUFNLElBQUk3QyxLQUFLLENBQUMseUJBQXlCLENBQUM7SUFDOUM7SUFDQTZDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLFVBQUNDLE1BQU0sRUFBSztNQUN4QjtNQUNBO01BQ0F4QixLQUFJLENBQUNDLGlCQUFpQixDQUFDbUIsSUFBSSxDQUFDSSxNQUFNLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDLENBQ0RmLElBQUksQ0FBQyxZQUFNO0lBQ1JkLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDSSxLQUFJLEVBQUVBLEtBQUksQ0FBQ0MsaUJBQWlCLENBQUM7RUFDOUMsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFDd0IsQ0FBQyxFQUFLO0lBQ1Y7SUFDQTtJQUNBL0IsS0FBSyxDQUFDRSxJQUFJLENBQUNJLEtBQUksRUFBRXlCLENBQUMsQ0FBQztFQUN2QixDQUFDLENBQUM7QUFDVixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTNCLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQWFKLEtBQUssRUFBRUMsT0FBTyxFQUFFO0VBQzlDO0VBQ0EsSUFBSSxDQUFDTSxpQkFBaUIsR0FBRyxFQUFFOztFQUUzQjtFQUNBO0VBQ0EsS0FBSyxJQUFJeUIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksQ0FBQzVDLGNBQWMsQ0FBQ3FDLE1BQU0sRUFBRU8sQ0FBQyxFQUFFLEVBQUU7SUFDakQsSUFBTXhDLEdBQUcsR0FBRyxJQUFJLENBQUNKLGNBQWMsQ0FBQzRDLENBQUMsQ0FBQztJQUNsQztJQUNBO0lBQ0EsSUFBTUMsT0FBTyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BDRCxPQUFPLENBQUNFLElBQUksQ0FBQyxLQUFLLEVBQUUzQyxHQUFHLEVBQUUsS0FBSyxDQUFDO0lBQy9CeUMsT0FBTyxDQUFDRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xCLElBQUlILE9BQU8sQ0FBQ2QsTUFBTSxLQUFLLEdBQUcsRUFBRTtNQUN4QjtNQUNBO01BQ0EsSUFBSUgsUUFBUSxHQUFHcUIsSUFBSSxDQUFDQyxLQUFLLENBQUNMLE9BQU8sQ0FBQ00sWUFBWSxDQUFDO01BQy9DLElBQUksQ0FBQ2hDLGlCQUFpQixDQUFDbUIsSUFBSSxDQUFDVixRQUFRLENBQUM7SUFDekM7RUFDSjtFQUNBO0VBQ0EsSUFBSSxJQUFJLENBQUNULGlCQUFpQixDQUFDa0IsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUNyQ3hCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUNLLGlCQUFpQixDQUFDO0VBQzlDLENBQUMsTUFBTTtJQUNIUCxLQUFLLENBQUNFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSW5CLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN0QztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQVosTUFBTSxDQUFDdUIsU0FBUyxDQUFDOEMsZUFBZSxHQUFHLFVBQVV4QyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtFQUN6RDtFQUNBLElBQUl3QyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBYUMsT0FBTyxFQUFFO0lBQ2pDO0lBQ0EsSUFBSUMsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUN4QjtJQUNBLElBQUlDLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdEI7SUFDQSxJQUFJQyxZQUFZLEdBQUcsQ0FBQyxDQUFDOztJQUVyQjtJQUNBLEtBQUssSUFBSWIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHVSxPQUFPLENBQUNqQixNQUFNLEVBQUVPLENBQUMsRUFBRSxFQUFFO01BQ3JDLElBQUksQ0FBQ1UsT0FBTyxDQUFDVixDQUFDLENBQUMsQ0FBQ2MsY0FBYyxJQUFJLENBQUNKLE9BQU8sQ0FBQ1YsQ0FBQyxDQUFDLENBQUNlLE1BQU0sRUFBRTtRQUNsRDtNQUNKO01BQ0FILGFBQWEsR0FBQUksYUFBQSxDQUFBQSxhQUFBLEtBQ05KLGFBQWEsR0FDYkYsT0FBTyxDQUFDVixDQUFDLENBQUMsQ0FBQ2MsY0FBYyxDQUFDRyxPQUFPLENBQ3ZDO01BQ0ROLGVBQWUsR0FBQUssYUFBQSxDQUFBQSxhQUFBLEtBQ1JMLGVBQWUsR0FDZkQsT0FBTyxDQUFDVixDQUFDLENBQUMsQ0FBQ2UsTUFBTSxDQUN2QjtNQUNERixZQUFZLEdBQUFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNMSCxZQUFZLEdBQ1pILE9BQU8sQ0FBQ1YsQ0FBQyxDQUFDLENBQUNrQixjQUFjLENBQy9CO0lBQ0w7SUFFQSxJQUFJQyxZQUFZLEdBQUc7TUFDZkwsY0FBYyxFQUFHO1FBQ2JHLE9BQU8sRUFBR0w7TUFDZCxDQUFDO01BQ0RHLE1BQU0sRUFBR0osZUFBZTtNQUN4Qk8sY0FBYyxFQUFHTDtJQUNyQixDQUFDO0lBQ0QsT0FBT00sWUFBWTtFQUN2QixDQUFDOztFQUVEO0VBQ0EsSUFBSUMsVUFBVSxHQUFHWCxXQUFXLENBQUMsSUFBSSxDQUFDbEMsaUJBQWlCLENBQUM7RUFDcEQsSUFBSSxDQUFDNkMsVUFBVSxFQUFFO0lBQ2JwRCxLQUFLLENBQUNFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSW5CLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQ3JFO0VBQ0o7O0VBRUE7RUFDQSxJQUFJc0UsT0FBTyxHQUFHLElBQUlDLHdEQUFlLENBQUMsQ0FBQztFQUNuQztFQUNBM0QsTUFBTSxDQUFDNEQsTUFBTSxDQUFDRixPQUFPLEVBQUVELFVBQVUsQ0FBQzs7RUFFbEM7RUFDQSxJQUFJSSxLQUFLLEdBQUcsT0FBTy9DLE1BQU0sS0FBSyxXQUFXLEdBQUdBLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDdkQsSUFBSSxDQUFDK0MsS0FBSyxDQUFDQyxFQUFFLEVBQUU7SUFDWEQsS0FBSyxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ2pCOztFQUVBO0VBQ0EsSUFBSUQsS0FBSyxDQUFDQyxFQUFFLENBQUN0RixNQUFNLEVBQUU7SUFDakJ3QixNQUFNLENBQUM0RCxNQUFNLENBQUNDLEtBQUssQ0FBQ0MsRUFBRSxDQUFDdEYsTUFBTSxFQUFFa0YsT0FBTyxDQUFDO0lBQ3ZDO0lBQ0EsS0FBSyxJQUFJSyxRQUFRLElBQUlMLE9BQU8sRUFBRTtNQUMxQkcsS0FBSyxDQUFDQyxFQUFFLENBQUN0RixNQUFNLENBQUN1RixRQUFRLENBQUMsR0FBR0wsT0FBTyxDQUFDSyxRQUFRLENBQUM7SUFDakQ7RUFDSixDQUFDLE1BQU07SUFDSEYsS0FBSyxDQUFDQyxFQUFFLENBQUN0RixNQUFNLEdBQUdrRixPQUFPO0VBQzdCOztFQUVBO0VBQ0E7RUFDQTtFQUNBcEQsT0FBTyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFc0QsS0FBSyxDQUFDQyxFQUFFLENBQUN0RixNQUFNLENBQUM7QUFDdkMsQ0FBQztBQUVjQSxxRUFBTSIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Db25maWcvQ29uZmlnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBDb21tb25TZXJ2aWNlIGZyb20gXCIuLi9Db21tb25TZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdFVybFNlcnZpY2UgZnJvbSBcIi4uL0RlZmF1bHRVcmxTZXJ2aWNlXCI7XG5pbXBvcnQgQ29uZmlnSW50ZXJmYWNlIGZyb20gXCIuL0NvbmZpZ0ludGVyZmFjZVwiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiBSZWN1cMOpcmF0aW9uIGRlIGxhIGNvbmZpZ3VyYXRpb24gZGUgY2zDqXMgR8Opb3BvcnRhaWwgc291cyBmb3JtZSBkZSBKU09OXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyB7R3AuU2VydmljZXMuQ29tbW9uU2VydmljZX1cbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5Db25maWdcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBzcMOpY2lmaXF1ZXMgYXUgc2VydmljZSAoKyBsZXMgb3B0aW9ucyBoZXJpdMOpZXMpXG4gKiBAcGFyYW0ge1N0aW5nfSBvcHRpb25zLmFwaUtleSAtIGNsw6kocykgZG9udCBvbiB2ZXV0IG9idGVuaXIgbGEgY29uZmlndXJhdGlvbi4gU2kgcGx1c2lldXJzIGNsw6lzLCBzw6lwYXJlciBjaGFjdW5lIHBhciB1bmUgdmlyZ3VsZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zeW5jPWZhbHNlXSAtIGZvcmNlIGxlIG1vZGUgc3luY2hyb25lXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5jdXN0b21Db25maWdGaWxlIC0gY2hlbWluIHZlcnMgdW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBlcnNvbm5hbGlzw6kuIFN1cmNoYXJnZSBsZSBwYXJhbcOodHJlIGFwaUtleS5cbiAqIEBzZWUgR3AuU2VydmljZXMuR2V0Q29uZmlnSW50ZXJmYWNlXG4gKlxuICogQGV4YW1wbGVcbiAqICAgdmFyIG9wdGlvbnMgPSB7XG4gKiAgICAgIGFwaUtleSA6IFwiY2FydGVzLG9ydGhvXCIsXG4gKiAgICAgIHN5bmMgOiBmYWxzZSxcbiAqICAgICAgb25TdWNjZXNzIDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7fSxcbiAqICAgICAgb25GYWlsdXJlIDogZnVuY3Rpb24gKGVycm9yKSB7fSxcbiAqICAgfTtcbiAqXG4gKi9cbmZ1bmN0aW9uIENvbmZpZyAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb25maWcpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXy5nZXRNZXNzYWdlKFwiQ0xBU1NfQ09OU1RSVUNUT1JcIiwgXCJDb25maWdcIikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vbSBkZSBsYSBjbGFzc2UgKGhlcml0YWdlKVxuICAgICAqL1xuICAgIHRoaXMuQ0xBU1NOQU1FID0gXCJDb25maWdcIjtcblxuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIkdwLkNvbmZpZ1wiKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShcIltDb25zdHJ1Y3RldXIgQ29uZmlnIChvcHRpb25zKV1cIik7XG5cbiAgICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgICAvLyBhbmFseXNlIGRlcyBvcHRpb25zXG4gICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbiAgICAvLyBnZXN0aW9uIGR1IGNhbGxiYWNrIG9uU3VjY2Vzc1xuICAgIHZhciBiT25TdWNjZXNzID0gISEob3B0aW9ucy5vblN1Y2Nlc3MgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMub25TdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpO1xuICAgIGlmICghYk9uU3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fTUlTU0lOR1wiLCBcIm9uU3VjY2VzcygpXCIpKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmFwaUtleSAmJiAhb3B0aW9ucy5jdXN0b21Db25maWdGaWxlKSB7XG4gICAgICAgIC8vIHNpIHBhcyBkZSB0aMOobWUgc3DDqWNpZmnDqSwgb24gcsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHJlc3NvdXJjZXMgcG9zc2libGVzIGRhbnMgbCdvYmpldCBDb25maWdcbiAgICAgICAgb3B0aW9ucy5hcGlLZXkgPSBcImZ1bGxcIjtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9IG9wdGlvbnMub25TdWNjZXNzO1xuICAgIHRoaXMub3B0aW9ucy5vbkZhaWx1cmUgPSBvcHRpb25zLm9uRmFpbHVyZTtcblxuICAgIC8vIG1vZGUgc3luY1xuICAgIHRoaXMub3B0aW9ucy5zeW5jID0gb3B0aW9ucy5zeW5jIHx8IGZhbHNlO1xuXG4gICAgLy8gZ2VzdGlvbiBkJ3VuIHRhYmxlYXUgZCd1cmwgZGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLm9wdGlvbnMubGlzdENvbmZpZ1VybHMgPSAob3B0aW9ucy5jdXN0b21Db25maWdGaWxlKVxuICAgICAgICA/IFtvcHRpb25zLmN1c3RvbUNvbmZpZ0ZpbGVdXG4gICAgICAgIDogIUFycmF5LmlzQXJyYXkob3B0aW9ucy5hcGlLZXkpXG4gICAgICAgICAgICA/IERlZmF1bHRVcmxTZXJ2aWNlLkNvbmZpZy51cmwob3B0aW9ucy5hcGlLZXkuc3BsaXQoXCIsXCIpKVxuICAgICAgICAgICAgOiBEZWZhdWx0VXJsU2VydmljZS5Db25maWcudXJsKG9wdGlvbnMuYXBpS2V5KTtcbn1cblxuLyoqXG4gKiBAbGVuZHMgbW9kdWxlOkNvbmZpZyNcbiAqL1xuQ29uZmlnLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29tbW9uU2VydmljZS5wcm90b3R5cGUsIHtcbiAgICAvLyB0b2RvXG4gICAgLy8gZ2V0dGVyL3NldHRlclxufSk7XG5cbi8qKlxuICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAqL1xuQ29uZmlnLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbmZpZztcblxuLyoqXG4gKiBDcsOpYXRpb24gZGUgbGEgcmVxdcOqdGVcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvciAgIC0gY2FsbGJhY2sgZGVzIGVycmV1cnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgLSBjYWxsYmFja1xuICogQG92ZXJsb2FkXG4gKi9cbkNvbmZpZy5wcm90b3R5cGUuYnVpbGRSZXF1ZXN0ID0gZnVuY3Rpb24gKGVycm9yLCBzdWNjZXNzKSB7XG4gICAgLy8gbGlzdGUgZGVzIHVybHMgZGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24gZW4gSlNPTlxuICAgIHRoaXMubGlzdENvbmZpZ1VybHMgPSB0aGlzLm9wdGlvbnMubGlzdENvbmZpZ1VybHM7XG5cbiAgICBpZiAoIXRoaXMubGlzdENvbmZpZ1VybHMpIHtcbiAgICAgICAgZXJyb3IuY2FsbCh0aGlzLCBuZXcgRXJyb3IoXCJ1cmwgYnkgZGVmYXVsdCBub3QgZm91bmQgIVwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJTkZPIDpcbiAgICAvLyBpbCBuJ3kgYSBwYXMgZGUgY29uc3RydWN0aW9uIGRlIHJlcXXDqnRlLFxuICAgIC8vIG9uIHBhc3NlIGRpcmVjdGVtZW50IMOgIGwnYXBwZWwgZGVzIHJlcXXDqnRlc1xuICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLmxpc3RDb25maWdVcmxzKTtcbn07XG5cbi8qKlxuICogUsOpY3Vww6lyYXRpb24gZGVzIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvciAgIC0gY2FsbGJhY2sgZGVzIGVycmV1cnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgLSBjYWxsYmFja1xuICogQG92ZXJsb2FkXG4gKi9cbkNvbmZpZy5wcm90b3R5cGUuY2FsbFNlcnZpY2UgPSBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnN5bmMpIHtcbiAgICAgICAgX19jYWxsU2VydmljZVN5bmMuY2FsbCh0aGlzLCBlcnJvciwgc3VjY2Vzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX19jYWxsU2VydmljZS5jYWxsKHRoaXMsIGVycm9yLCBzdWNjZXNzKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlcXXDqnRlcyBlbiBtb2RlIGFzeW5jaHJvbmVcbiAqXG4gKiBAcGFyYW0geyp9IGVycm9yXG4gKiBAcGFyYW0geyp9IHN1Y2Nlc3NcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBfX2NhbGxTZXJ2aWNlID0gZnVuY3Rpb24gKGVycm9yLCBzdWNjZXNzKSB7XG4gICAgLy8gbGlzdGUgZGVzIHJlc3VsdGF0cyBhdSBmb3JtYXQgSlNPTlxuICAgIHRoaXMubGlzdENvbmZpZ1Jlc3VsdHMgPSBbXTtcblxuICAgIC8vIHRlc3Qgb24gZW52LiBub2RlanMgb3IgYnJvd3NlclxuICAgIGxldCBGZXRjaCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdmFyIG5vZGVmZXRjaCA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpO1xuICAgICAgICBGZXRjaCA9IG5vZGVmZXRjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBGZXRjaCA9IHdpbmRvdy5mZXRjaDtcbiAgICB9XG5cbiAgICAvLyB0aGUgZmFjdG9yeSBvZiBmZXRjaCAhXG4gICAgdmFyIGZldGNoRmFjdG9yeSA9ICh1cmwpID0+IHtcbiAgICAgICAgcmV0dXJuIEZldGNoKHVybCwgeyBjcmVkZW50aWFscyA6IFwic2FtZS1vcmlnaW5cIiB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVzdGVyIGxlIGNvbnRlbnUgIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeGNlcHRpb24gSnNvbiA6IFwiICsgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhjZXB0aW9uIEhUVFAgOiBcIiArIHJlc3BvbnNlLnN0YXR1cyArIFwiIChzdGF0dXMgY29kZSkgIVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBjb25zdHJ1Y3Rpb24gZGVzIHByb21pc2VzIGZldGNoXG4gICAgdmFyIHByb21pc2VzID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlzdENvbmZpZ1VybHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubGlzdENvbmZpZ1VybHNbaW5kZXhdO1xuICAgICAgICBwcm9taXNlcy5wdXNoKGZldGNoRmFjdG9yeSh1cmwpKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3VsdHMgY29uZmlnIGVtcHR5ICE/XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIDpcbiAgICAgICAgICAgICAgICAvLyB2ZXJpZmljYXRpb24gZGVzIHJlc3VsdGF0c1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbmZpZ1Jlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLmxpc3RDb25maWdSZXN1bHRzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPIDpcbiAgICAgICAgICAgIC8vIGNvbnN0cnVjdGlvbiBkJ3VuIG1lc3NhZ2VcbiAgICAgICAgICAgIGVycm9yLmNhbGwodGhpcywgZSk7XG4gICAgICAgIH0pO1xufTtcblxuLyoqXG4gKiBSZXF1w6p0ZXMgZW4gbW9kZSBzeW5jaHJvbmVcbiAqXG4gKiBAcGFyYW0geyp9IGVycm9yXG4gKiBAcGFyYW0geyp9IHN1Y2Nlc3NcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBfX2NhbGxTZXJ2aWNlU3luYyA9IGZ1bmN0aW9uIChlcnJvciwgc3VjY2Vzcykge1xuICAgIC8vIGxpc3RlIGRlcyByZXN1bHRhdHMgYXUgZm9ybWF0IEpTT05cbiAgICB0aGlzLmxpc3RDb25maWdSZXN1bHRzID0gW107XG5cbiAgICAvLyBGSVhNRSA6XG4gICAgLy8gYm91Y2xlIHN5bmNocm9uZSAhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpc3RDb25maWdVcmxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubGlzdENvbmZpZ1VybHNbaV07XG4gICAgICAgIC8vIFRPRE8gOlxuICAgICAgICAvLyBwcsOpdm9pciBsZSBDT1JTLCBoZWFkZXJzLCAuLi5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgdXJsLCBmYWxzZSk7XG4gICAgICAgIHJlcXVlc3Quc2VuZChudWxsKTtcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIC8vIFRPRE8gOlxuICAgICAgICAgICAgLy8gdGVzdGVyIGxhIHJlcG9uc2UgIVxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RDb25maWdSZXN1bHRzLnB1c2gocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNhbGxiYWNrXG4gICAgaWYgKHRoaXMubGlzdENvbmZpZ1Jlc3VsdHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLmxpc3RDb25maWdSZXN1bHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvcihcIi4uLlwiKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBBbmFseXNlIGV0IG1pc2UgZW4gZm9ybWUgZGUgbGEgcsOpcG9uc2UgZW4gZnVzaW9ubmFudCBsZXMgY29uZmlndXJhdGlvbnNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvciAgIC0gY2FsbGJhY2sgZGVzIGVycmV1cnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN1Y2Nlc3MgLSBjYWxsYmFja1xuICogQG92ZXJsb2FkXG4gKi9cbkNvbmZpZy5wcm90b3R5cGUuYW5hbHl6ZVJlc3BvbnNlID0gZnVuY3Rpb24gKGVycm9yLCBzdWNjZXNzKSB7XG4gICAgLy8gZm9uY3Rpb24gZGUgbWVyZ2UgZGVzIG9iamVjdHMgSlNPTlxuICAgIHZhciBtZXJnZUNvbmZpZyA9IGZ1bmN0aW9uIChvYmplY3RzKSB7XG4gICAgICAgIC8vIG9iamV0IGZ1c2lvbiBkZXMgY291Y2hlc1xuICAgICAgICB2YXIgYWxsTGF5ZXJzQ29uZmlnID0ge307XG4gICAgICAgIC8vIG9iamV0IGZ1c2lvbiBkZXMgY2zDqXNcbiAgICAgICAgdmFyIGFsbEtleXNDb25maWcgPSB7fTtcbiAgICAgICAgLy8gb2JqZXQgZnVzaW9uIGRlcyBUTVNcbiAgICAgICAgdmFyIGFsbFRNU0NvbmZpZyA9IHt9O1xuXG4gICAgICAgIC8vIG9uIGZ1c2lvbm5lIGxlcyByw6lzdWx0YXRcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIW9iamVjdHNbaV0uZ2VuZXJhbE9wdGlvbnMgfHwgIW9iamVjdHNbaV0ubGF5ZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxsS2V5c0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAuLi5hbGxLZXlzQ29uZmlnLFxuICAgICAgICAgICAgICAgIC4uLm9iamVjdHNbaV0uZ2VuZXJhbE9wdGlvbnMuYXBpS2V5c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFsbExheWVyc0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAuLi5hbGxMYXllcnNDb25maWcsXG4gICAgICAgICAgICAgICAgLi4ub2JqZWN0c1tpXS5sYXllcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhbGxUTVNDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgLi4uYWxsVE1TQ29uZmlnLFxuICAgICAgICAgICAgICAgIC4uLm9iamVjdHNbaV0udGlsZU1hdHJpeFNldHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWVyZ2VkQ29uZmlnID0ge1xuICAgICAgICAgICAgZ2VuZXJhbE9wdGlvbnMgOiB7XG4gICAgICAgICAgICAgICAgYXBpS2V5cyA6IGFsbEtleXNDb25maWdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXllcnMgOiBhbGxMYXllcnNDb25maWcsXG4gICAgICAgICAgICB0aWxlTWF0cml4U2V0cyA6IGFsbFRNU0NvbmZpZ1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWVyZ2VkQ29uZmlnO1xuICAgIH07XG5cbiAgICAvLyBmdXNpb24gZGVzIGNvbmZpZ3VyYXRpb25zIEpTT05cbiAgICB2YXIgQ29uZmlnSlNPTiA9IG1lcmdlQ29uZmlnKHRoaXMubGlzdENvbmZpZ1Jlc3VsdHMpO1xuICAgIGlmICghQ29uZmlnSlNPTikge1xuICAgICAgICBlcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvcihcImNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG5vdCBjb25mb3JtZSAhXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNyZWF0aW9uIGRlcyBpbnRlcmZhY2VzXG4gICAgdmFyIElDb25maWcgPSBuZXcgQ29uZmlnSW50ZXJmYWNlKCk7XG4gICAgLy8gYWpvdXQgZGVzIGludGVyZmFjZXMgYXZlYyBsYSBjb25maWd1cmF0aW9uIEpTT05cbiAgICBPYmplY3QuYXNzaWduKElDb25maWcsIENvbmZpZ0pTT04pO1xuXG4gICAgLy8gZMOpZmluaXRpb24gZGUgbGEgdmFyaWFibGUgZ2xvYmFsZSBHcC5Db25maWdcbiAgICB2YXIgc2NvcGUgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge307XG4gICAgaWYgKCFzY29wZS5HcCkge1xuICAgICAgICBzY29wZS5HcCA9IHt9O1xuICAgIH1cblxuICAgIC8vIGVucmVnaXN0cmVtZW50XG4gICAgaWYgKHNjb3BlLkdwLkNvbmZpZykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHNjb3BlLkdwLkNvbmZpZywgSUNvbmZpZyk7XG4gICAgICAgIC8vIGRhbnMgbGUgZG91dGUuLi4sIGNlaW50dXJlIGV0IGJyZXRlbGxlcyAhXG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIElDb25maWcpIHtcbiAgICAgICAgICAgIHNjb3BlLkdwLkNvbmZpZ1twcm9wZXJ0eV0gPSBJQ29uZmlnW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLkdwLkNvbmZpZyA9IElDb25maWc7XG4gICAgfVxuXG4gICAgLy8gSU5GTyA6XG4gICAgLy8gaWwgbid5IGEgcGFzIGQnYW5hbHlzZSBkZXMgcsOpc3VsdGF0cyxcbiAgICAvLyBvbiBwYXNzZSBkaXJlY3RlbWVudCDDoCBsJ2FwcGVsIGRlIGxhIGNhbGxiYWNrIHV0aWxpc2F0ZXVyXG4gICAgc3VjY2Vzcy5jYWxsKHRoaXMsIHNjb3BlLkdwLkNvbmZpZyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb25maWc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Config/Config.js\n"); + +/***/ }), + +/***/ "./src/Services/Config/ConfigInterface.js": +/*!************************************************!*\ + !*** ./src/Services/Config/ConfigInterface.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Response object for {@link module:Services~getConfig Gp.Services.getConfig ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Object} generalOptions - General properties for default map configuration resources.\n * @property {Object} generalOptions.apiKeys - Object that associates apiKey (s) with an array of resources IDs availables with that key.\n * @property {String} generalOptions.title - Underlying web service Title.\n * @property {String} generalOptions.defaultGMLGFIStyle - XSL URL used by default to translate an XML GetFeatureInfo response into an HTML array.\n * @property {String} generalOptions.theme - default theme (FIXME : for what ?)\n * @property {Array.} generalOptions.wgs84Resolutions - geographical resolutions Array for each [zoom level of the Geoportal platform]{@link http://api.ign.fr/tech-docs-js/webmaster/layers.html#Geoportal_resolutions} from 0 to 21. Expressed in degrees/pixel.\n * @property {Object} layers - Associative array mapping resources availables IDs (keys) with their properties (values given as {@link Gp.Services.Config.Layer}).\n * @property {Object} tileMatrixSets - Associative Array mapping TileMatrixSets IDs (keys) availables with their properties (values given as {@link Gp.Services.Config.TileMatrixSet}).\n *\n * @namespace\n * @alias Gp.Services.GetConfigInterface\n */\nfunction ConfigInterface() {\n if (!(this instanceof ConfigInterface)) {\n throw new TypeError(\"ConfigInterface constructor cannot be called as a function.\");\n }\n this.generalOptions = {\n apiKeys: {},\n title: null,\n defaultGMLGFIStyle: null,\n theme: null,\n wgs84Resolutions: []\n };\n this.layers = {};\n this.tileMatrixSets = {};\n}\nConfigInterface.prototype = {\n /*\n * Constructor (alias)\n */\n constructor: ConfigInterface,\n /**\n * Check if config is loaded for a given key\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Boolean} isKeyConfLoaded - true if config of the key is already loaded, false otherwise\n */\n isKeyConfLoaded: function isKeyConfLoaded(apiKey) {\n if (!apiKey) {\n return;\n }\n if (this.generalOptions.apiKeys[apiKey]) {\n return true;\n }\n return false;\n },\n /**\n * Returns an array of Geoportal layers identifiers, corresponding to an API contract key.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Array} apiKeys - Array of geoportal layers identifiers\n */\n getLayersId: function getLayersId(apiKey) {\n return this.generalOptions.apiKeys[apiKey];\n },\n /**\n * Returns the id of a Geoportal layer with its name and its service.\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @returns {String} Id of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\")\n */\n getLayerId: function getLayerId(layerName, service) {\n if (!layerName || !service) {\n return;\n }\n var layerId = null;\n\n // layer\n // key : [layerName]$[contexte]:OGC:[service]\n // ex : \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"\n\n // service\n // key : [layerName]$[contexte];[service]\n // ex : PositionOfInterest$OGC:OPENLS;ReverseGeocode\n\n if (this.layers) {\n var layers = this.layers;\n for (var key in layers) {\n if (layers.hasOwnProperty(key)) {\n var parts = key.split(\"$\");\n if (layerName === parts[0]) {\n if (parts[1]) {\n var servicePartsLayer = parts[1].split(\":\");\n var servicePartsService = parts[1].split(\";\");\n if (servicePartsService[1] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n if (servicePartsLayer[2] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n }\n }\n }\n }\n }\n if (!layerId) {\n return;\n }\n return layerId;\n },\n /**\n * Returns an associative array of Geoportal layers configurations, corresponding to an API contract key.\n * If no key is specified, all layers from configuration are returned.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Object} layers - Object which properties are layers identifiers.\n */\n getLayersConf: function getLayersConf(apiKey) {\n var layers = {};\n var layersIdArray = this.getLayersId(apiKey);\n if (layersIdArray) {\n for (var i = 0; i < layersIdArray.length; i++) {\n var lyrId = layersIdArray[i];\n layers[lyrId] = this.layers[lyrId];\n }\n }\n return layers;\n },\n /**\n * Returns a geoportal layer configuration, given its identifier\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Object} layer - Layer configuration\n * @see Gp.Services.Config.Layer\n */\n getLayerConf: function getLayerConf(layerId) {\n if (!this.layers) {\n return;\n }\n return this.layers[layerId];\n },\n /**\n * Get all parameters needed to display a WMS or WMTS layer given its name, its service and its key\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @param {String} [apiKey] - Contract API key\n * @returns {Object} params - params of the service (WMS or WMTS) for the given layer\n * @returns {String} params.url - Url of the service to reach to display the layer\n * @returns {String} params.version - Version of the service\n * @returns {String} params.styles - Default style of the layer\n * @returns {String} params.format - Default format of the layer\n * @returns {String} params.projection - Default projection of the layer\n * @returns {Number} params.minScale - Min scale denominator of the layer\n * @returns {Number} params.maxScale - Max scale denominator of the layer\n * @returns {Gp.BBox} params.extent - Extent of the layer, in the projection of the layer\n * @returns {Array} params.legends - Array of legends associated to the layer\n * @returns {Array} params.title - Name of the layer, readable by a human\n * @returns {Array} params.description - Description of the layer\n * @returns {String} params.[TMSLink] - Id of the Tile Matrix Set (TMS), in the case of WMTS layer\n * @returns {Gp.Point} params.[matrixOrigin] - Originof the tile matrix (top left corner), in the case of WMTS layer\n * @returns {Array} params.[nativeResolutions] - Array with the resolution of each level of the tile matrix set, in the case of WMTS layer\n * @returns {Array} params.[matrixIds] - Array with the ID of each level of the tile matrix set, in the case of WMTS layer\n */\n getLayerParams: function getLayerParams(layerName, service) {\n var params = {};\n if ((service === \"WMS\" || Object.keys(this.tileMatrixSets).length !== 0) && Object.keys(this.layers).length !== 0) {\n // get the layerId of the layer\n var layerId = this.getLayerId(layerName, service);\n if (layerId) {\n // get the layer Conf Object\n var layerConf = this.getLayerConf(layerId);\n var keys = this.getLayerKey(layerId);\n if (keys.length === 0) {\n return;\n }\n\n // get services params\n for (var i = 0; i < keys.length; i++) {\n // only one serverUrl is saved in Gp.Config : with multiKeys, we have to retrieve the key used in the serverUrl property\n if (layerConf.serviceParams.serverUrl[keys[i]]) {\n params.url = layerConf.serviceParams.serverUrl[keys[i]];\n }\n }\n var wmsTypeRegex = /\\/v\\//;\n // WMS vector style always empty (not in getCap)\n if (wmsTypeRegex.test(params.url)) {\n params.styles = \" \";\n } else {\n // WMS raster style is defined in getCap\n params.styles = layerConf.styles[0].name;\n }\n params.version = layerConf.serviceParams.version;\n params.format = layerConf.formats[0].name;\n params.projection = layerConf.defaultProjection;\n\n // get layer info and constraints\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n params.legends = layerConf.legends;\n params.title = layerConf.title;\n params.description = layerConf.description;\n if (service === \"WMS\") {\n params.metadata = layerConf.metadata;\n }\n\n // Informations non disponibles avec les getCap\n // params.metadata = layerConf.getMetadata();\n // params.originators = layerConf.getOriginators();\n // params.quicklookUrl = layerConf.getQuicklookUrl();\n\n // WMTS : get the tileMatrixSetLimits\n if (layerConf.wmtsOptions) {\n params.tileMatrixSetLimits = layerConf.wmtsOptions.tileMatrixSetLimits;\n var TMSLink = layerConf.wmtsOptions.tileMatrixSetLink;\n if (TMSLink) {\n params.TMSLink = TMSLink;\n var tmsConf = this.getTMSConf(TMSLink);\n // Get matrix origin : Gp.Point = Object{x:Float, y:Float}\n // params.matrixOrigin = tmsConf.getTopLeftCorner();\n params.matrixIds = Object.keys(tmsConf.tileMatrices);\n params.tileMatrices = tmsConf.tileMatrices;\n // by default, pseudo mercator resolutions\n params.nativeResolutions = tmsConf.nativeResolutions || this.getTMSConf(\"PM\").nativeResolutions;\n }\n }\n }\n }\n return params;\n },\n /**\n * Get the contract key(s) associated to a given layer.\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Array} layerKey - array of key(s) associated to the given layer\n */\n getLayerKey: function getLayerKey(layerId) {\n var layerKey = [];\n if (this.generalOptions && this.generalOptions.apiKeys && Object.keys(this.generalOptions.apiKeys).length !== 0) {\n var resourcesByKey = this.generalOptions.apiKeys;\n for (var key in resourcesByKey) {\n var resourcesArray = resourcesByKey[key];\n resourcesArray.forEach(function (arrayLayerId) {\n if (arrayLayerId === layerId) {\n layerKey.push(key);\n }\n });\n }\n }\n return layerKey;\n },\n /**\n * Returns an associative array of Tile Matrix Sets configurations.\n *\n * @return {Object} tileMatrixSets - Object which properties are TMS identifiers\n *\n */\n getTileMatrixSets: function getTileMatrixSets() {\n return this.tileMatrixSets;\n },\n /**\n * Returns a Tile Matrix Sets configuration, given its identifier.\n *\n * @param {String} tmsID - Tile Matrix Set identifier (e.g. : \"PM\")\n * @return {Object} tileMatrixSet - Tile Matrix Set configuration\n * @see Gp.Services.Config.TileMatrixSet\n */\n getTMSConf: function getTMSConf(tmsID) {\n if (!this.tileMatrixSets) {\n return;\n }\n return this.tileMatrixSets[tmsID];\n },\n /**\n * Get global constraints for a given Layer : extent, minScale, maxScale, projection\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @returns {Object} params - layer constraints\n * @returns {String} params.projection - default layer projection\n * @returns {Number} params.minScale - layer min scale denominator\n * @returns {Number} params.maxScale - layer max scale denominator\n * @returns {Gp.BBox} params.extent - layer extent expressed in the layer projection\n */\n getGlobalConstraints: function getGlobalConstraints(layerId) {\n var params = {};\n if (layerId) {\n // get layer configuration object\n var layerConf = this.getLayerConf(layerId);\n params.projection = layerConf.defaultProjection;\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n }\n return params;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (ConfigInterface);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Db25maWcvQ29uZmlnSW50ZXJmYWNlLmpzPzQyYjQiXSwibmFtZXMiOlsiQ29uZmlnSW50ZXJmYWNlIiwiVHlwZUVycm9yIiwiZ2VuZXJhbE9wdGlvbnMiLCJhcGlLZXlzIiwidGl0bGUiLCJkZWZhdWx0R01MR0ZJU3R5bGUiLCJ0aGVtZSIsIndnczg0UmVzb2x1dGlvbnMiLCJsYXllcnMiLCJ0aWxlTWF0cml4U2V0cyIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwiaXNLZXlDb25mTG9hZGVkIiwiYXBpS2V5IiwiZ2V0TGF5ZXJzSWQiLCJnZXRMYXllcklkIiwibGF5ZXJOYW1lIiwic2VydmljZSIsImxheWVySWQiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsInBhcnRzIiwic3BsaXQiLCJzZXJ2aWNlUGFydHNMYXllciIsInNlcnZpY2VQYXJ0c1NlcnZpY2UiLCJ0b1VwcGVyQ2FzZSIsImdldExheWVyc0NvbmYiLCJsYXllcnNJZEFycmF5IiwiaSIsImxlbmd0aCIsImx5cklkIiwiZ2V0TGF5ZXJDb25mIiwiZ2V0TGF5ZXJQYXJhbXMiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwibGF5ZXJDb25mIiwiZ2V0TGF5ZXJLZXkiLCJzZXJ2aWNlUGFyYW1zIiwic2VydmVyVXJsIiwidXJsIiwid21zVHlwZVJlZ2V4IiwidGVzdCIsInN0eWxlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwiZm9ybWF0IiwiZm9ybWF0cyIsInByb2plY3Rpb24iLCJkZWZhdWx0UHJvamVjdGlvbiIsIm1pblNjYWxlIiwiZ2xvYmFsQ29uc3RyYWludCIsIm1pblNjYWxlRGVub21pbmF0b3IiLCJtYXhTY2FsZSIsIm1heFNjYWxlRGVub21pbmF0b3IiLCJleHRlbnQiLCJiYm94IiwibGVnZW5kcyIsImRlc2NyaXB0aW9uIiwibWV0YWRhdGEiLCJ3bXRzT3B0aW9ucyIsInRpbGVNYXRyaXhTZXRMaW1pdHMiLCJUTVNMaW5rIiwidGlsZU1hdHJpeFNldExpbmsiLCJ0bXNDb25mIiwiZ2V0VE1TQ29uZiIsIm1hdHJpeElkcyIsInRpbGVNYXRyaWNlcyIsIm5hdGl2ZVJlc29sdXRpb25zIiwibGF5ZXJLZXkiLCJyZXNvdXJjZXNCeUtleSIsInJlc291cmNlc0FycmF5IiwiZm9yRWFjaCIsImFycmF5TGF5ZXJJZCIsInB1c2giLCJnZXRUaWxlTWF0cml4U2V0cyIsInRtc0lEIiwiZ2V0R2xvYmFsQ29uc3RyYWludHMiXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsZUFBZUEsQ0FBQSxFQUFJO0VBQ3hCLElBQUksRUFBRSxJQUFJLFlBQVlBLGVBQWUsQ0FBQyxFQUFFO0lBQ3BDLE1BQU0sSUFBSUMsU0FBUyxDQUFDLDZEQUE2RCxDQUFDO0VBQ3RGO0VBRUEsSUFBSSxDQUFDQyxjQUFjLEdBQUc7SUFDbEJDLE9BQU8sRUFBRyxDQUFDLENBQUM7SUFDWkMsS0FBSyxFQUFHLElBQUk7SUFDWkMsa0JBQWtCLEVBQUcsSUFBSTtJQUN6QkMsS0FBSyxFQUFHLElBQUk7SUFDWkMsZ0JBQWdCLEVBQUc7RUFDdkIsQ0FBQztFQUVELElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUVoQixJQUFJLENBQUNDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFFQVQsZUFBZSxDQUFDVSxTQUFTLEdBQUc7RUFFeEI7QUFDSjtBQUNBO0VBQ0lDLFdBQVcsRUFBR1gsZUFBZTtFQUU3QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSVksZUFBZSxFQUFHLFNBQWxCQSxlQUFlQSxDQUFhQyxNQUFNLEVBQUU7SUFDaEMsSUFBSSxDQUFDQSxNQUFNLEVBQUU7TUFDVDtJQUNKO0lBQ0EsSUFBSSxJQUFJLENBQUNYLGNBQWMsQ0FBQ0MsT0FBTyxDQUFDVSxNQUFNLENBQUMsRUFBRTtNQUNyQyxPQUFPLElBQUk7SUFD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ZXJ2aWNlcy9Db25maWcvQ29uZmlnSW50ZXJmYWNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFJlc3BvbnNlIG9iamVjdCBmb3Ige0BsaW5rIG1vZHVsZTpTZXJ2aWNlc35nZXRDb25maWcgR3AuU2VydmljZXMuZ2V0Q29uZmlnICgpfSBpbnZvY2F0aW9uIHdoZW4gc3VjY2Vzc2Z1bC4gUmVjZWl2ZWQgYXMgdGhlIGFyZ3VtZW50IG9mIG9uU3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gZ2VuZXJhbE9wdGlvbnMgLSBHZW5lcmFsIHByb3BlcnRpZXMgZm9yIGRlZmF1bHQgbWFwIGNvbmZpZ3VyYXRpb24gcmVzb3VyY2VzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGdlbmVyYWxPcHRpb25zLmFwaUtleXMgLSBPYmplY3QgdGhhdCBhc3NvY2lhdGVzIGFwaUtleSAocykgd2l0aCBhbiBhcnJheSBvZiByZXNvdXJjZXMgSURzIGF2YWlsYWJsZXMgd2l0aCB0aGF0IGtleS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBnZW5lcmFsT3B0aW9ucy50aXRsZSAtIFVuZGVybHlpbmcgd2ViIHNlcnZpY2UgVGl0bGUuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZ2VuZXJhbE9wdGlvbnMuZGVmYXVsdEdNTEdGSVN0eWxlIC0gWFNMIFVSTCB1c2VkIGJ5IGRlZmF1bHQgdG8gdHJhbnNsYXRlIGFuIFhNTCBHZXRGZWF0dXJlSW5mbyByZXNwb25zZSBpbnRvIGFuIEhUTUwgYXJyYXkuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZ2VuZXJhbE9wdGlvbnMudGhlbWUgLSBkZWZhdWx0IHRoZW1lIChGSVhNRSA6IGZvciB3aGF0ID8pXG4gKiBAcHJvcGVydHkge0FycmF5LjxGbG9hdD59IGdlbmVyYWxPcHRpb25zLndnczg0UmVzb2x1dGlvbnMgLSBnZW9ncmFwaGljYWwgcmVzb2x1dGlvbnMgQXJyYXkgZm9yIGVhY2ggW3pvb20gbGV2ZWwgb2YgdGhlIEdlb3BvcnRhbCBwbGF0Zm9ybV17QGxpbmsgaHR0cDovL2FwaS5pZ24uZnIvdGVjaC1kb2NzLWpzL3dlYm1hc3Rlci9sYXllcnMuaHRtbCNHZW9wb3J0YWxfcmVzb2x1dGlvbnN9IGZyb20gMCB0byAyMS4gRXhwcmVzc2VkIGluIGRlZ3JlZXMvcGl4ZWwuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbGF5ZXJzIC0gQXNzb2NpYXRpdmUgYXJyYXkgbWFwcGluZyByZXNvdXJjZXMgYXZhaWxhYmxlcyBJRHMgKGtleXMpIHdpdGggdGhlaXIgcHJvcGVydGllcyAodmFsdWVzIGdpdmVuIGFzIHtAbGluayBHcC5TZXJ2aWNlcy5Db25maWcuTGF5ZXJ9KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aWxlTWF0cml4U2V0cyAtIEFzc29jaWF0aXZlIEFycmF5IG1hcHBpbmcgVGlsZU1hdHJpeFNldHMgSURzIChrZXlzKSBhdmFpbGFibGVzIHdpdGggdGhlaXIgcHJvcGVydGllcyAodmFsdWVzIGdpdmVuIGFzIHtAbGluayBHcC5TZXJ2aWNlcy5Db25maWcuVGlsZU1hdHJpeFNldH0pLlxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5HZXRDb25maWdJbnRlcmZhY2VcbiAqL1xuZnVuY3Rpb24gQ29uZmlnSW50ZXJmYWNlICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uZmlnSW50ZXJmYWNlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29uZmlnSW50ZXJmYWNlIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5nZW5lcmFsT3B0aW9ucyA9IHtcbiAgICAgICAgYXBpS2V5cyA6IHt9LFxuICAgICAgICB0aXRsZSA6IG51bGwsXG4gICAgICAgIGRlZmF1bHRHTUxHRklTdHlsZSA6IG51bGwsXG4gICAgICAgIHRoZW1lIDogbnVsbCxcbiAgICAgICAgd2dzODRSZXNvbHV0aW9ucyA6IFtdXG4gICAgfTtcblxuICAgIHRoaXMubGF5ZXJzID0ge307XG5cbiAgICB0aGlzLnRpbGVNYXRyaXhTZXRzID0ge307XG59XG5cbkNvbmZpZ0ludGVyZmFjZS5wcm90b3R5cGUgPSB7XG5cbiAgICAvKlxuICAgICAqIENvbnN0cnVjdG9yIChhbGlhcylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciA6IENvbmZpZ0ludGVyZmFjZSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNvbmZpZyBpcyBsb2FkZWQgZm9yIGEgZ2l2ZW4ga2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXBpS2V5IC0gQWNjZXNzIGtleSB0byBHZW9wb3J0YWwgcGxhdGZvcm1cbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNLZXlDb25mTG9hZGVkIC0gdHJ1ZSBpZiBjb25maWcgb2YgdGhlIGtleSBpcyBhbHJlYWR5IGxvYWRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgaXNLZXlDb25mTG9hZGVkIDogZnVuY3Rpb24gKGFwaUtleSkge1xuICAgICAgICBpZiAoIWFwaUtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdlbmVyYWxPcHRpb25zLmFwaUtleXNbYXBpS2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIEdlb3BvcnRhbCBsYXllcnMgaWRlbnRpZmllcnMsIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVBJIGNvbnRyYWN0IGtleS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhcGlLZXkgLSBBY2Nlc3Mga2V5IHRvIEdlb3BvcnRhbCBwbGF0Zm9ybVxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gYXBpS2V5cyAtIEFycmF5IG9mIGdlb3BvcnRhbCBsYXllcnMgaWRlbnRpZmllcnNcbiAgICAgKi9cbiAgICBnZXRMYXllcnNJZCA6IGZ1bmN0aW9uIChhcGlLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhbE9wdGlvbnMuYXBpS2V5c1thcGlLZXldO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpZCBvZiBhIEdlb3BvcnRhbCBsYXllciB3aXRoIGl0cyBuYW1lIGFuZCBpdHMgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYXllck5hbWUgLSBuYW1lIG9mIHRoZSBsYXllciAoZXguIFwiT1JUSE9JTUFHRVJZLk9SVEhPUEhPVE9TXCIpXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHNlcnZpY2UgICAtIG5hbWUgb2YgdGhlIHNlcnZpY2UgKGV4LiBcIldNU1wiIG91IFwiV01UU1wiKVxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IElkIG9mIHRoZSBsYXllciAoZXguIFwiT1JUSE9JTUFHRVJZLk9SVEhPUEhPVE9TJEdFT1BPUlRBSUw6T0dDOldNVFNcIilcbiAgICAgKi9cbiAgICBnZXRMYXllcklkIDogZnVuY3Rpb24gKGxheWVyTmFtZSwgc2VydmljZSkge1xuICAgICAgICBpZiAoIWxheWVyTmFtZSB8fCAhc2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsYXllcklkID0gbnVsbDtcblxuICAgICAgICAvLyBsYXllclxuICAgICAgICAvLyBrZXkgOiBbbGF5ZXJOYW1lXSRbY29udGV4dGVdOk9HQzpbc2VydmljZV1cbiAgICAgICAgLy8gZXggOiBcIk9SVEhPSU1BR0VSWS5PUlRIT1BIT1RPUyRHRU9QT1JUQUlMOk9HQzpXTVRTXCJcblxuICAgICAgICAvLyBzZXJ2aWNlXG4gICAgICAgIC8vIGtleSA6IFtsYXllck5hbWVdJFtjb250ZXh0ZV07W3NlcnZpY2VdXG4gICAgICAgIC8vIGV4IDogUG9zaXRpb25PZkludGVyZXN0JE9HQzpPUEVOTFM7UmV2ZXJzZUdlb2NvZGVcblxuICAgICAgICBpZiAodGhpcy5sYXllcnMpIHtcbiAgICAgICAgICAgIHZhciBsYXllcnMgPSB0aGlzLmxheWVycztcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBsYXllcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KFwiJFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyTmFtZSA9PT0gcGFydHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXJ2aWNlUGFydHNMYXllciA9IHBhcnRzWzFdLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VydmljZVBhcnRzU2VydmljZSA9IHBhcnRzWzFdLnNwbGl0KFwiO1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlUGFydHNTZXJ2aWNlWzFdID09PSBzZXJ2aWNlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZCA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlUGFydHNMYXllclsyXSA9PT0gc2VydmljZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVySWQgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxheWVySWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJJZDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBHZW9wb3J0YWwgbGF5ZXJzIGNvbmZpZ3VyYXRpb25zLCBjb3JyZXNwb25kaW5nIHRvIGFuIEFQSSBjb250cmFjdCBrZXkuXG4gICAgICogSWYgbm8ga2V5IGlzIHNwZWNpZmllZCwgYWxsIGxheWVycyBmcm9tIGNvbmZpZ3VyYXRpb24gYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGFwaUtleSAtIEFjY2VzcyBrZXkgdG8gR2VvcG9ydGFsIHBsYXRmb3JtXG4gICAgICogQHJldHVybnMge09iamVjdH0gbGF5ZXJzIC0gT2JqZWN0IHdoaWNoIHByb3BlcnRpZXMgYXJlIGxheWVycyBpZGVudGlmaWVycy5cbiAgICAgKi9cbiAgICBnZXRMYXllcnNDb25mIDogZnVuY3Rpb24gKGFwaUtleSkge1xuICAgICAgICB2YXIgbGF5ZXJzID0ge307XG4gICAgICAgIHZhciBsYXllcnNJZEFycmF5ID0gdGhpcy5nZXRMYXllcnNJZChhcGlLZXkpO1xuICAgICAgICBpZiAobGF5ZXJzSWRBcnJheSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllcnNJZEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGx5cklkID0gbGF5ZXJzSWRBcnJheVtpXTtcbiAgICAgICAgICAgICAgICBsYXllcnNbbHlySWRdID0gdGhpcy5sYXllcnNbbHlySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXllcnM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBnZW9wb3J0YWwgbGF5ZXIgY29uZmlndXJhdGlvbiwgZ2l2ZW4gaXRzIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYXllcklkIC0gR2VvcG9ydGFsIGxheWVyIGlkZW50aWZpZXIgKGUuZy4gXCJHRU9HUkFQSElDQUxHUklEU1lTVEVNUy5NQVBTJEdFT1BPUlRBSUw6T0dDOldNVFNcIilcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGxheWVyIC0gTGF5ZXIgY29uZmlndXJhdGlvblxuICAgICAqIEBzZWUgR3AuU2VydmljZXMuQ29uZmlnLkxheWVyXG4gICAgICovXG4gICAgZ2V0TGF5ZXJDb25mIDogZnVuY3Rpb24gKGxheWVySWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheWVycykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyc1tsYXllcklkXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBwYXJhbWV0ZXJzIG5lZWRlZCB0byBkaXNwbGF5IGEgV01TIG9yIFdNVFMgbGF5ZXIgZ2l2ZW4gaXRzIG5hbWUsIGl0cyBzZXJ2aWNlIGFuZCBpdHMga2V5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbGF5ZXJOYW1lIC0gbmFtZSBvZiB0aGUgbGF5ZXIgKGV4LiBcIk9SVEhPSU1BR0VSWS5PUlRIT1BIT1RPU1wiKVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZXJ2aWNlICAgLSBuYW1lIG9mIHRoZSBzZXJ2aWNlIChleC4gXCJXTVNcIiBvdSBcIldNVFNcIilcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2FwaUtleV0gIC0gQ29udHJhY3QgQVBJIGtleVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHBhcmFtcyAgLSBwYXJhbXMgb2YgdGhlIHNlcnZpY2UgKFdNUyBvciBXTVRTKSBmb3IgdGhlIGdpdmVuIGxheWVyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gcGFyYW1zLnVybCAgICAgICAgLSBVcmwgb2YgdGhlIHNlcnZpY2UgdG8gcmVhY2ggdG8gZGlzcGxheSB0aGUgbGF5ZXJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBwYXJhbXMudmVyc2lvbiAgICAtIFZlcnNpb24gb2YgdGhlIHNlcnZpY2VcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBwYXJhbXMuc3R5bGVzICAgICAtIERlZmF1bHQgc3R5bGUgb2YgdGhlIGxheWVyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gcGFyYW1zLmZvcm1hdCAgICAgLSBEZWZhdWx0IGZvcm1hdCBvZiB0aGUgbGF5ZXJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBwYXJhbXMucHJvamVjdGlvbiAtIERlZmF1bHQgcHJvamVjdGlvbiBvZiB0aGUgbGF5ZXJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBwYXJhbXMubWluU2NhbGUgICAtIE1pbiBzY2FsZSBkZW5vbWluYXRvciBvZiB0aGUgbGF5ZXJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBwYXJhbXMubWF4U2NhbGUgICAtIE1heCBzY2FsZSBkZW5vbWluYXRvciBvZiB0aGUgbGF5ZXJcbiAgICAgKiBAcmV0dXJucyB7R3AuQkJveH0gcGFyYW1zLmV4dGVudCAgICAtIEV4dGVudCBvZiB0aGUgbGF5ZXIsIGluIHRoZSBwcm9qZWN0aW9uIG9mIHRoZSBsYXllclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gcGFyYW1zLmxlZ2VuZHMgICAgIC0gQXJyYXkgb2YgbGVnZW5kcyBhc3NvY2lhdGVkIHRvIHRoZSBsYXllclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gcGFyYW1zLnRpdGxlICAgICAgIC0gTmFtZSBvZiB0aGUgbGF5ZXIsIHJlYWRhYmxlIGJ5IGEgaHVtYW5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IHBhcmFtcy5kZXNjcmlwdGlvbiAtIERlc2NyaXB0aW9uIG9mIHRoZSBsYXllclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHBhcmFtcy5bVE1TTGlua10gICAgICAgICAgLSBJZCBvZiB0aGUgVGlsZSBNYXRyaXggU2V0IChUTVMpLCBpbiB0aGUgY2FzZSBvZiBXTVRTIGxheWVyXG4gICAgICogQHJldHVybnMge0dwLlBvaW50fSBwYXJhbXMuW21hdHJpeE9yaWdpbl0gICAtIE9yaWdpbm9mIHRoZSB0aWxlIG1hdHJpeCAodG9wIGxlZnQgY29ybmVyKSwgaW4gdGhlIGNhc2Ugb2YgV01UUyBsYXllclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gcGFyYW1zLltuYXRpdmVSZXNvbHV0aW9uc10gLSBBcnJheSB3aXRoIHRoZSByZXNvbHV0aW9uIG9mIGVhY2ggbGV2ZWwgb2YgdGhlIHRpbGUgbWF0cml4IHNldCwgaW4gdGhlIGNhc2Ugb2YgV01UUyBsYXllclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gcGFyYW1zLlttYXRyaXhJZHNdICAgICAgICAgLSBBcnJheSB3aXRoIHRoZSBJRCBvZiBlYWNoIGxldmVsIG9mIHRoZSB0aWxlIG1hdHJpeCBzZXQsIGluIHRoZSBjYXNlIG9mIFdNVFMgbGF5ZXJcbiAgICAgKi9cbiAgICBnZXRMYXllclBhcmFtcyA6IGZ1bmN0aW9uIChsYXllck5hbWUsIHNlcnZpY2UpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHt9O1xuXG4gICAgICAgIGlmICgoc2VydmljZSA9PT0gXCJXTVNcIiB8fCBPYmplY3Qua2V5cyh0aGlzLnRpbGVNYXRyaXhTZXRzKS5sZW5ndGggIT09IDApICYmIE9iamVjdC5rZXlzKHRoaXMubGF5ZXJzKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIC8vIGdldCB0aGUgbGF5ZXJJZCBvZiB0aGUgbGF5ZXJcbiAgICAgICAgICAgIHZhciBsYXllcklkID0gdGhpcy5nZXRMYXllcklkKGxheWVyTmFtZSwgc2VydmljZSk7XG5cbiAgICAgICAgICAgIGlmIChsYXllcklkKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBsYXllciBDb25mIE9iamVjdFxuICAgICAgICAgICAgICAgIHZhciBsYXllckNvbmYgPSB0aGlzLmdldExheWVyQ29uZihsYXllcklkKTtcblxuICAgICAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5nZXRMYXllcktleShsYXllcklkKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGdldCBzZXJ2aWNlcyBwYXJhbXNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBvbmUgc2VydmVyVXJsIGlzIHNhdmVkIGluIEdwLkNvbmZpZyA6IHdpdGggbXVsdGlLZXlzLCB3ZSBoYXZlIHRvIHJldHJpZXZlIHRoZSBrZXkgdXNlZCBpbiB0aGUgc2VydmVyVXJsIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckNvbmYuc2VydmljZVBhcmFtcy5zZXJ2ZXJVcmxba2V5c1tpXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51cmwgPSBsYXllckNvbmYuc2VydmljZVBhcmFtcy5zZXJ2ZXJVcmxba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB3bXNUeXBlUmVnZXggPSAvXFwvdlxcLy87XG4gICAgICAgICAgICAgICAgLy8gV01TIHZlY3RvciBzdHlsZSBhbHdheXMgZW1wdHkgKG5vdCBpbiBnZXRDYXApXG4gICAgICAgICAgICAgICAgaWYgKHdtc1R5cGVSZWdleC50ZXN0KHBhcmFtcy51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5zdHlsZXMgPSBcIiBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXTVMgcmFzdGVyIHN0eWxlIGlzIGRlZmluZWQgaW4gZ2V0Q2FwXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5zdHlsZXMgPSBsYXllckNvbmYuc3R5bGVzWzBdLm5hbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyYW1zLnZlcnNpb24gPSBsYXllckNvbmYuc2VydmljZVBhcmFtcy52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5mb3JtYXQgPSBsYXllckNvbmYuZm9ybWF0c1swXS5uYW1lO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wcm9qZWN0aW9uID0gbGF5ZXJDb25mLmRlZmF1bHRQcm9qZWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGxheWVyIGluZm8gYW5kIGNvbnN0cmFpbnRzXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1pblNjYWxlID0gbGF5ZXJDb25mLmdsb2JhbENvbnN0cmFpbnQubWluU2NhbGVEZW5vbWluYXRvcjtcbiAgICAgICAgICAgICAgICBwYXJhbXMubWF4U2NhbGUgPSBsYXllckNvbmYuZ2xvYmFsQ29uc3RyYWludC5tYXhTY2FsZURlbm9taW5hdG9yO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5leHRlbnQgPSBsYXllckNvbmYuZ2xvYmFsQ29uc3RyYWludC5iYm94O1xuICAgICAgICAgICAgICAgIHBhcmFtcy5sZWdlbmRzID0gbGF5ZXJDb25mLmxlZ2VuZHM7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnRpdGxlID0gbGF5ZXJDb25mLnRpdGxlO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5kZXNjcmlwdGlvbiA9IGxheWVyQ29uZi5kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlID09PSBcIldNU1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhZGF0YSA9IGxheWVyQ29uZi5tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJbmZvcm1hdGlvbnMgIG5vbiBkaXNwb25pYmxlcyBhdmVjIGxlcyBnZXRDYXBcbiAgICAgICAgICAgICAgICAvLyBwYXJhbXMubWV0YWRhdGEgPSBsYXllckNvbmYuZ2V0TWV0YWRhdGEoKTtcbiAgICAgICAgICAgICAgICAvLyBwYXJhbXMub3JpZ2luYXRvcnMgPSBsYXllckNvbmYuZ2V0T3JpZ2luYXRvcnMoKTtcbiAgICAgICAgICAgICAgICAvLyBwYXJhbXMucXVpY2tsb29rVXJsID0gbGF5ZXJDb25mLmdldFF1aWNrbG9va1VybCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gV01UUyA6IGdldCB0aGUgdGlsZU1hdHJpeFNldExpbWl0c1xuICAgICAgICAgICAgICAgIGlmIChsYXllckNvbmYud210c09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRpbGVNYXRyaXhTZXRMaW1pdHMgPSBsYXllckNvbmYud210c09wdGlvbnMudGlsZU1hdHJpeFNldExpbWl0cztcbiAgICAgICAgICAgICAgICAgICAgdmFyIFRNU0xpbmsgPSBsYXllckNvbmYud210c09wdGlvbnMudGlsZU1hdHJpeFNldExpbms7XG4gICAgICAgICAgICAgICAgICAgIGlmIChUTVNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuVE1TTGluayA9IFRNU0xpbms7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1zQ29uZiA9IHRoaXMuZ2V0VE1TQ29uZihUTVNMaW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBtYXRyaXggb3JpZ2luIDogR3AuUG9pbnQgPSBPYmplY3R7eDpGbG9hdCwgeTpGbG9hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcmFtcy5tYXRyaXhPcmlnaW4gPSB0bXNDb25mLmdldFRvcExlZnRDb3JuZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5tYXRyaXhJZHMgPSBPYmplY3Qua2V5cyh0bXNDb25mLnRpbGVNYXRyaWNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGlsZU1hdHJpY2VzID0gdG1zQ29uZi50aWxlTWF0cmljZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBkZWZhdWx0LCBwc2V1ZG8gbWVyY2F0b3IgcmVzb2x1dGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5uYXRpdmVSZXNvbHV0aW9ucyA9IHRtc0NvbmYubmF0aXZlUmVzb2x1dGlvbnMgfHwgdGhpcy5nZXRUTVNDb25mKFwiUE1cIikubmF0aXZlUmVzb2x1dGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjb250cmFjdCBrZXkocykgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGxheWVySWQgLSBHZW9wb3J0YWwgbGF5ZXIgaWRlbnRpZmllciAoZS5nLiBcIkdFT0dSQVBISUNBTEdSSURTWVNURU1TLk1BUFMkR0VPUE9SVEFJTDpPR0M6V01UU1wiKVxuICAgICAqIEByZXR1cm4ge0FycmF5fSBsYXllcktleSAtIGFycmF5IG9mIGtleShzKSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBsYXllclxuICAgICAqL1xuICAgIGdldExheWVyS2V5IDogZnVuY3Rpb24gKGxheWVySWQpIHtcbiAgICAgICAgdmFyIGxheWVyS2V5ID0gW107XG4gICAgICAgIGlmICh0aGlzLmdlbmVyYWxPcHRpb25zICYmIHRoaXMuZ2VuZXJhbE9wdGlvbnMuYXBpS2V5cyAmJiBPYmplY3Qua2V5cyh0aGlzLmdlbmVyYWxPcHRpb25zLmFwaUtleXMpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdmFyIHJlc291cmNlc0J5S2V5ID0gdGhpcy5nZW5lcmFsT3B0aW9ucy5hcGlLZXlzO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlc291cmNlc0J5S2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc0FycmF5ID0gcmVzb3VyY2VzQnlLZXlba2V5XTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChhcnJheUxheWVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5TGF5ZXJJZCA9PT0gbGF5ZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJLZXkucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVyS2V5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIFRpbGUgTWF0cml4IFNldHMgY29uZmlndXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHRpbGVNYXRyaXhTZXRzIC0gT2JqZWN0IHdoaWNoIHByb3BlcnRpZXMgYXJlIFRNUyBpZGVudGlmaWVyc1xuICAgICAqXG4gICAgICovXG4gICAgZ2V0VGlsZU1hdHJpeFNldHMgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbGVNYXRyaXhTZXRzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgVGlsZSBNYXRyaXggU2V0cyBjb25maWd1cmF0aW9uLCBnaXZlbiBpdHMgaWRlbnRpZmllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0bXNJRCAtIFRpbGUgTWF0cml4IFNldCBpZGVudGlmaWVyIChlLmcuIDogXCJQTVwiKVxuICAgICAqIEByZXR1cm4ge09iamVjdH0gdGlsZU1hdHJpeFNldCAtIFRpbGUgTWF0cml4IFNldCBjb25maWd1cmF0aW9uXG4gICAgICogQHNlZSBHcC5TZXJ2aWNlcy5Db25maWcuVGlsZU1hdHJpeFNldFxuICAgICAqL1xuICAgIGdldFRNU0NvbmYgOiBmdW5jdGlvbiAodG1zSUQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRpbGVNYXRyaXhTZXRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGlsZU1hdHJpeFNldHNbdG1zSURdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZ2xvYmFsIGNvbnN0cmFpbnRzIGZvciBhIGdpdmVuIExheWVyIDogZXh0ZW50LCBtaW5TY2FsZSwgbWF4U2NhbGUsIHByb2plY3Rpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYXllcklkIC0gR2VvcG9ydGFsIGxheWVyIGlkZW50aWZpZXIgKGUuZy4gXCJHRU9HUkFQSElDQUxHUklEU1lTVEVNUy5NQVBTJEdFT1BPUlRBSUw6T0dDOldNVFNcIilcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBwYXJhbXMgLSBsYXllciBjb25zdHJhaW50c1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHBhcmFtcy5wcm9qZWN0aW9uIC0gZGVmYXVsdCBsYXllciBwcm9qZWN0aW9uXG4gICAgICogQHJldHVybnMge051bWJlcn0gcGFyYW1zLm1pblNjYWxlICAgLSBsYXllciBtaW4gc2NhbGUgZGVub21pbmF0b3JcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBwYXJhbXMubWF4U2NhbGUgICAtIGxheWVyIG1heCBzY2FsZSBkZW5vbWluYXRvclxuICAgICAqIEByZXR1cm5zIHtHcC5CQm94fSBwYXJhbXMuZXh0ZW50ICAgIC0gbGF5ZXIgZXh0ZW50IGV4cHJlc3NlZCBpbiB0aGUgbGF5ZXIgcHJvamVjdGlvblxuICAgICAqL1xuICAgIGdldEdsb2JhbENvbnN0cmFpbnRzIDogZnVuY3Rpb24gKGxheWVySWQpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHt9O1xuXG4gICAgICAgIGlmIChsYXllcklkKSB7XG4gICAgICAgICAgICAvLyBnZXQgbGF5ZXIgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgICAgICAgIHZhciBsYXllckNvbmYgPSB0aGlzLmdldExheWVyQ29uZihsYXllcklkKTtcbiAgICAgICAgICAgIHBhcmFtcy5wcm9qZWN0aW9uID0gbGF5ZXJDb25mLmRlZmF1bHRQcm9qZWN0aW9uO1xuICAgICAgICAgICAgcGFyYW1zLm1pblNjYWxlID0gbGF5ZXJDb25mLmdsb2JhbENvbnN0cmFpbnQubWluU2NhbGVEZW5vbWluYXRvcjtcbiAgICAgICAgICAgIHBhcmFtcy5tYXhTY2FsZSA9IGxheWVyQ29uZi5nbG9iYWxDb25zdHJhaW50Lm1heFNjYWxlRGVub21pbmF0b3I7XG4gICAgICAgICAgICBwYXJhbXMuZXh0ZW50ID0gbGF5ZXJDb25mLmdsb2JhbENvbnN0cmFpbnQuYmJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb25maWdJbnRlcmZhY2U7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Config/ConfigInterface.js\n"); + +/***/ }), + +/***/ "./src/Services/DefaultUrlService.js": +/*!*******************************************!*\ + !*** ./src/Services/DefaultUrlService.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n// cette classe contient les URLs par defaut des services.\n// DefaultUrlService.Alti.url(key)[elevation-json]\n// DefaultUrlService.Alti.url(key)[elevation-xml]\n// DefaultUrlService.Alti.url(key)[profil-json]\n// DefaultUrlService.Alti.url(key)[profil-xml]\n// DefaultUrlService.ProcessIsoCurve.url(key)\n// DefaultUrlService.AutoComplete.url(key)\n// DefaultUrlService.ReverseGeocode.url(key)\n// DefaultUrlService.Geocode.url(key)\n// DefaultUrlService.Route.url(key)\n\n// Example :\n//\n// DefaultUrlService.Alti.url('alti')[elevation-json]\n// output {String} -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n//\n// DefaultUrlService.Alti.url('calcul')\n// output {Object|String}\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.xml\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.xml\n//\n// ssl by default.\n//\n// Force to not do ssl :\n// DefaultUrlService.ssl = false;\n//\n// DefaultUrlService.AutoComplete.url('calcul')\n// output {Object|String}\n// -> https://wxs.ign.fr/calcul/ols/apis/completion\n\n/**\n * Default Geoportal web services URLs access.\n *\n * @namespace\n * @alias Gp.Services.DefaultUrl\n */\nvar DefaultUrlService = {\n /** if set true, require the use of https protocol */\n ssl: true,\n /**\n * base new-url of geoplateforme services (ssl protocol management)\n * @param {String} path - path\n * @returns {String} url\n */\n newUrl: function newUrl(path) {\n var NEW_GPF_HOSTNAME = \"data.geopf.fr\";\n\n // comportement par défaut => https\n // sinon, il est fixé par l'option 'ssl' (false => http)\n var _protocol;\n if (DefaultUrlService.ssl === false) {\n _protocol = \"http://\";\n } else {\n _protocol = \"https://\";\n }\n return _protocol + NEW_GPF_HOSTNAME + path;\n },\n /**\n * Elevation web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns elevation service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"elevation-json\", \"elevation-xml\", \"profil-json\" or \"profil-xml\").\n */\n Alti: {\n new_key: {\n // rest\n \"elevation-json\": \"/altimetrie/1.0/calcul/alti/rest/elevation.json\",\n \"elevation-xml\": \"/altimetrie/1.0/calcul/alti/rest/elevation.xml\",\n \"profil-json\": \"/altimetrie/1.0/calcul/alti/rest/elevationLine.json\",\n \"profil-xml\": \"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml\"\n },\n /**\n * newurl from geoplateforme service\n * @param {String} key - key\n * @returns {String} url\n */\n newUrl: function newUrl() {\n return {\n // rest\n \"elevation-json\": DefaultUrlService.newUrl(this.new_key[\"elevation-json\"]),\n \"elevation-xml\": DefaultUrlService.newUrl(this.new_key[\"elevation-xml\"]),\n \"profil-json\": DefaultUrlService.newUrl(this.new_key[\"profil-json\"]),\n \"profil-xml\": DefaultUrlService.newUrl(this.new_key[\"profil-xml\"])\n };\n }\n },\n /**\n * IsoCurve web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns isocurve service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"iso-json\" or \"iso-xml\").\n */\n ProcessIsoCurve: {\n new_key: \"/navigation/isochrone\",\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl: function newUrl() {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Config web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns config service default urls with or without geoportal access key given as a parameter.\n */\n Config: {\n _key: \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/\",\n /**\n * url\n * @param {String} key - key\n * @returns {String} url\n */\n url: function url(key) {\n // key must be an array of one or several keys\n if (!Array.isArray(key)) {\n key = key.split(\",\");\n }\n // not homogeneous with others geoportal services URLs\n var url = [];\n for (var i = 0; i < key.length; i++) {\n url[i] = this._key + key[i] + \"Config.json\";\n }\n return url;\n }\n },\n /**\n * Autocompletion web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns autocomplete service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n AutoComplete: {\n new_key: \"/geocodage/completion\",\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl: function newUrl() {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Reverse geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns reverse geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n ReverseGeocode: {\n new_key: \"/geocodage/reverse\",\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl: function newUrl() {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n Geocode: {\n new_key: \"/geocodage/search\",\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl: function newUrl() {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Routing web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns routing service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols.\n */\n Route: {\n new_key: \"/navigation/itineraire\",\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl: function newUrl() {\n return DefaultUrlService.newUrl(this.new_key);\n }\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (DefaultUrlService);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9EZWZhdWx0VXJsU2VydmljZS5qcz8zYTBkIl0sIm5hbWVzIjpbIkRlZmF1bHRVcmxTZXJ2aWNlIiwic3NsIiwibmV3VXJsIiwicGF0aCIsIk5FV19HUEZfSE9TVE5BTUUiLCJfcHJvdG9jb2wiLCJBbHRpIiwibmV3X2tleSIsIlByb2Nlc3NJc29DdXJ2ZSIsIkNvbmZpZyIsIl9rZXkiLCJ1cmwiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJzcGxpdCIsImkiLCJsZW5ndGgiLCJBdXRvQ29tcGxldGUiLCJSZXZlcnNlR2VvY29kZSIsIkdlb2NvZGUiLCJSb3V0ZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLGlCQUFpQixHQUFHO0VBRXBCO0VBQ0FDLEdBQUcsRUFBRyxJQUFJO0VBRVY7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxNQUFNLEVBQUcsU0FBVEEsTUFBTUEsQ0FBYUMsSUFBSSxFQUFFO0lBQ3JCLElBQUlDLGdCQUFnQixHQUFHLGVBQWU7O0lBRXRDO0lBQ0E7SUFDQSxJQUFJQyxTQUFTO0lBQ2IsSUFBSUwsaUJBQWlCLENBQUNDLEdBQUcsS0FBSyxLQUFLLEVBQUU7TUFDakNJLFNBQVMsR0FBRyxTQUFTO0lBQ3pCLENBQUMsTUFBTTtNQUNIQSxTQUFTLEdBQUcsVUFBVTtJQUMxQjtJQUVBLE9BQU9BLFNBQVMsR0FBR0QsZ0JBQWdCLEdBQUdELElBQUk7RUFDOUMsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJRyxJQUFJLEVBQUc7SUFDSEMsT0FBTyxFQUFHO01BQ047TUFDQSxnQkFBZ0IsRUFBRyxpREFBaUQ7TUFDcEUsZUFBZSxFQUFHLGdEQUFnRDtNQUNsRSxhQUFhLEVBQUcscURBQXFEO01BQ3JFLFlBQVksRUFBRztJQUNuQixDQUFDO0lBRUQ7QUFDUjtBQUNBO0FBQ0E7QUFDQTtJQUNRTCxNQUFNLEVBQUcsU0FBVEEsTUFBTUEsQ0FBQSxFQUFlO01BQ2pCLE9BQU87UUFDSDtRQUNBLGdCQUFnQixFQUFHRixpQkFBaUIsQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQ0ssT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsZUFBZSxFQUFHUCxpQkFBaUIsQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQ0ssT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLGFBQWEsRUFBR1AsaUJBQWlCLENBQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUNLLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRSxZQUFZLEVBQUdQLGlCQUFpQixDQUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDSyxPQUFPLENBQUMsWUFBWSxDQUFDO01BQ3RFLENBQUM7SUFDTDtFQUNKLENBQUM7RUFDRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsZUFBZSxFQUFHO0lBRWRELE9BQU8sRUFBRyx1QkFBdUI7SUFFakM7QUFDUjtBQUNBO0FBQ0E7SUFDUUwsTUFBTSxFQUFHLFNBQVRBLE1BQU1BLENBQUEsRUFBZTtNQUNqQixPQUFPRixpQkFBaUIsQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQ0ssT0FBTyxDQUFDO0lBQ2pEO0VBQ0osQ0FBQztFQUNEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJRSxNQUFNLEVBQUc7SUFDTEMsSUFBSSxFQUFHLDhFQUE4RTtJQUNyRjtBQUNSO0FBQ0E7QUFDQTtBQUNBO0lBQ1FDLEdBQUcsRUFBRyxTQUFOQSxHQUFHQSxDQUFhQyxHQUFHLEVBQUU7TUFDakI7TUFDQSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixHQUFHLENBQUMsRUFBRTtRQUNyQkEsR0FBRyxHQUFHQSxHQUFHLENBQUNHLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDeEI7TUFDQTtNQUNBLElBQUlKLEdBQUcsR0FBRyxFQUFFO01BQ1osS0FBSyxJQUFJSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdKLEdBQUcsQ0FBQ0ssTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtRQUNqQ0wsR0FBRyxDQUFDSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNOLElBQUksR0FBR0UsR0FBRyxDQUFDSSxDQUFDLENBQUMsR0FBRyxhQUFhO01BQy9DO01BQ0EsT0FBT0wsR0FBRztJQUNkO0VBQ0osQ0FBQztFQUNEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJTyxZQUFZLEVBQUc7SUFDWFgsT0FBTyxFQUFHLHVCQUF1QjtJQUVqQztBQUNSO0FBQ0E7QUFDQTtJQUNRTCxNQUFNLEVBQUcsU0FBVEEsTUFBTUEsQ0FBQSxFQUFlO01BQ2pCLE9BQU9GLGlCQUFpQixDQUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDSyxPQUFPLENBQUM7SUFDakQ7RUFDSixDQUFDO0VBQ0Q7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lZLGNBQWMsRUFBRztJQUNiWixPQUFPLEVBQUcsb0JBQW9CO0lBRTlCO0FBQ1I7QUFDQTtBQUNBO0lBQ1FMLE1BQU0sRUFBRyxTQUFUQSxNQUFNQSxDQUFBLEVBQWU7TUFDakIsT0FBT0YsaUJBQWlCLENBQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUNLLE9BQU8sQ0FBQztJQUNqRDtFQUNKLENBQUM7RUFDRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSWEsT0FBTyxFQUFHO0lBQ05iLE9BQU8sRUFBRyxtQkFBbUI7SUFFN0I7QUFDUjtBQUNBO0FBQ0E7SUFDUUwsTUFBTSxFQUFHLFNBQVRBLE1BQU1BLENBQUEsRUFBZTtNQUNqQixPQUFPRixpQkFBaUIsQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQ0ssT0FBTyxDQUFDO0lBQ2pEO0VBQ0osQ0FBQztFQUNEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJYyxLQUFLLEVBQUc7SUFDSmQsT0FBTyxFQUFHLHdCQUF3QjtJQUVsQztBQUNSO0FBQ0E7QUFDQTtJQUNRTCxNQUFNLEVBQUcsU0FBVEEsTUFBTUEsQ0FBQSxFQUFlO01BQ2pCLE9BQU9GLGlCQUFpQixDQUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDSyxPQUFPLENBQUM7SUFDakQ7RUFDSjtBQUNKLENBQUM7QUFFY1AsZ0ZBQWlCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0RlZmF1bHRVcmxTZXJ2aWNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY2V0dGUgY2xhc3NlIGNvbnRpZW50IGxlcyBVUkxzIHBhciBkZWZhdXQgZGVzIHNlcnZpY2VzLlxuLy8gIERlZmF1bHRVcmxTZXJ2aWNlLkFsdGkudXJsKGtleSlbZWxldmF0aW9uLWpzb25dXG4vLyAgRGVmYXVsdFVybFNlcnZpY2UuQWx0aS51cmwoa2V5KVtlbGV2YXRpb24teG1sXVxuLy8gIERlZmF1bHRVcmxTZXJ2aWNlLkFsdGkudXJsKGtleSlbcHJvZmlsLWpzb25dXG4vLyAgRGVmYXVsdFVybFNlcnZpY2UuQWx0aS51cmwoa2V5KVtwcm9maWwteG1sXVxuLy8gIERlZmF1bHRVcmxTZXJ2aWNlLlByb2Nlc3NJc29DdXJ2ZS51cmwoa2V5KVxuLy8gIERlZmF1bHRVcmxTZXJ2aWNlLkF1dG9Db21wbGV0ZS51cmwoa2V5KVxuLy8gIERlZmF1bHRVcmxTZXJ2aWNlLlJldmVyc2VHZW9jb2RlLnVybChrZXkpXG4vLyAgRGVmYXVsdFVybFNlcnZpY2UuR2VvY29kZS51cmwoa2V5KVxuLy8gIERlZmF1bHRVcmxTZXJ2aWNlLlJvdXRlLnVybChrZXkpXG5cbi8vIEV4YW1wbGUgOlxuLy9cbi8vIERlZmF1bHRVcmxTZXJ2aWNlLkFsdGkudXJsKCdhbHRpJylbZWxldmF0aW9uLWpzb25dXG4vLyAgb3V0cHV0IHtTdHJpbmd9IC0+IGh0dHA6Ly93eHMuaWduLmZyL2NhbGN1bC9hbHRpL3Jlc3QvZWxldmF0aW9uLmpzb25cbi8vXG4vLyBEZWZhdWx0VXJsU2VydmljZS5BbHRpLnVybCgnY2FsY3VsJylcbi8vIG91dHB1dCB7T2JqZWN0fFN0cmluZ31cbi8vIC0+IGh0dHA6Ly93eHMuaWduLmZyL2NhbGN1bC9hbHRpL3Jlc3QvZWxldmF0aW9uLmpzb25cbi8vIC0+IGh0dHA6Ly93eHMuaWduLmZyL2NhbGN1bC9hbHRpL3Jlc3QvZWxldmF0aW9uLnhtbFxuLy8gLT4gaHR0cDovL3d4cy5pZ24uZnIvY2FsY3VsL2FsdGkvcmVzdC9lbGV2YXRpb25MaW5lLmpzb25cbi8vIC0+IGh0dHA6Ly93eHMuaWduLmZyL2NhbGN1bC9hbHRpL3Jlc3QvZWxldmF0aW9uTGluZS54bWxcbi8vXG4vLyBzc2wgYnkgZGVmYXVsdC5cbi8vXG4vLyBGb3JjZSB0byBub3QgZG8gc3NsIDpcbi8vIERlZmF1bHRVcmxTZXJ2aWNlLnNzbCA9IGZhbHNlO1xuLy9cbi8vIERlZmF1bHRVcmxTZXJ2aWNlLkF1dG9Db21wbGV0ZS51cmwoJ2NhbGN1bCcpXG4vLyBvdXRwdXQge09iamVjdHxTdHJpbmd9XG4vLyAtPiBodHRwczovL3d4cy5pZ24uZnIvY2FsY3VsL29scy9hcGlzL2NvbXBsZXRpb25cblxuLyoqXG4gKiBEZWZhdWx0IEdlb3BvcnRhbCB3ZWIgc2VydmljZXMgVVJMcyBhY2Nlc3MuXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkRlZmF1bHRVcmxcbiAqL1xudmFyIERlZmF1bHRVcmxTZXJ2aWNlID0ge1xuXG4gICAgLyoqIGlmIHNldCB0cnVlLCByZXF1aXJlIHRoZSB1c2Ugb2YgaHR0cHMgcHJvdG9jb2wgKi9cbiAgICBzc2wgOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgKiBiYXNlIG5ldy11cmwgb2YgZ2VvcGxhdGVmb3JtZSBzZXJ2aWNlcyAoc3NsIHByb3RvY29sIG1hbmFnZW1lbnQpXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCAtIHBhdGhcbiAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHVybFxuICAgICovXG4gICAgbmV3VXJsIDogZnVuY3Rpb24gKHBhdGgpIHtcbiAgICAgICAgdmFyIE5FV19HUEZfSE9TVE5BTUUgPSBcImRhdGEuZ2VvcGYuZnJcIjtcblxuICAgICAgICAvLyBjb21wb3J0ZW1lbnQgcGFyIGTDqWZhdXQgPT4gaHR0cHNcbiAgICAgICAgLy8gc2lub24sIGlsIGVzdCBmaXjDqSBwYXIgbCdvcHRpb24gJ3NzbCcgKGZhbHNlID0+IGh0dHApXG4gICAgICAgIHZhciBfcHJvdG9jb2w7XG4gICAgICAgIGlmIChEZWZhdWx0VXJsU2VydmljZS5zc2wgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfcHJvdG9jb2wgPSBcImh0dHA6Ly9cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9wcm90b2NvbCA9IFwiaHR0cHM6Ly9cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfcHJvdG9jb2wgKyBORVdfR1BGX0hPU1ROQU1FICsgcGF0aDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRWxldmF0aW9uIHdlYiBzZXJ2aWNlIGFjY2Vzc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVybCAoa2V5KSAtIFJldHVybnMgZWxldmF0aW9uIHNlcnZpY2UgZGVmYXVsdCB1cmxzIHdpdGggb3Igd2l0aG91dCBnZW9wb3J0YWwgYWNjZXNzIGtleSBnaXZlbiBhcyBhIHBhcmFtZXRlci4gVGhlIHJlc3VsdCBpcyBhIGphdmFzY3JpcHQgb2JqZWN0IHdpdGggZGlmZmVyZW50IHVybHMgZ2l2ZW4gdXNlZCBwcm90b2NvbHMgKFwiZWxldmF0aW9uLWpzb25cIiwgXCJlbGV2YXRpb24teG1sXCIsIFwicHJvZmlsLWpzb25cIiBvciBcInByb2ZpbC14bWxcIikuXG4gICAgICovXG4gICAgQWx0aSA6IHtcbiAgICAgICAgbmV3X2tleSA6IHtcbiAgICAgICAgICAgIC8vIHJlc3RcbiAgICAgICAgICAgIFwiZWxldmF0aW9uLWpzb25cIiA6IFwiL2FsdGltZXRyaWUvMS4wL2NhbGN1bC9hbHRpL3Jlc3QvZWxldmF0aW9uLmpzb25cIixcbiAgICAgICAgICAgIFwiZWxldmF0aW9uLXhtbFwiIDogXCIvYWx0aW1ldHJpZS8xLjAvY2FsY3VsL2FsdGkvcmVzdC9lbGV2YXRpb24ueG1sXCIsXG4gICAgICAgICAgICBcInByb2ZpbC1qc29uXCIgOiBcIi9hbHRpbWV0cmllLzEuMC9jYWxjdWwvYWx0aS9yZXN0L2VsZXZhdGlvbkxpbmUuanNvblwiLFxuICAgICAgICAgICAgXCJwcm9maWwteG1sXCIgOiBcIi9hbHRpbWV0cmllLzEuMC9jYWxjdWwvYWx0aS9yZXN0L2VsZXZhdGlvbkxpbmUueG1sXCJcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgKiBuZXd1cmwgZnJvbSBnZW9wbGF0ZWZvcm1lIHNlcnZpY2VcbiAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IC0ga2V5XG4gICAgICAgICogQHJldHVybnMge1N0cmluZ30gdXJsXG4gICAgICAgICovXG4gICAgICAgIG5ld1VybCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLy8gcmVzdFxuICAgICAgICAgICAgICAgIFwiZWxldmF0aW9uLWpzb25cIiA6IERlZmF1bHRVcmxTZXJ2aWNlLm5ld1VybCh0aGlzLm5ld19rZXlbXCJlbGV2YXRpb24tanNvblwiXSksXG4gICAgICAgICAgICAgICAgXCJlbGV2YXRpb24teG1sXCIgOiBEZWZhdWx0VXJsU2VydmljZS5uZXdVcmwodGhpcy5uZXdfa2V5W1wiZWxldmF0aW9uLXhtbFwiXSksXG4gICAgICAgICAgICAgICAgXCJwcm9maWwtanNvblwiIDogRGVmYXVsdFVybFNlcnZpY2UubmV3VXJsKHRoaXMubmV3X2tleVtcInByb2ZpbC1qc29uXCJdKSxcbiAgICAgICAgICAgICAgICBcInByb2ZpbC14bWxcIiA6IERlZmF1bHRVcmxTZXJ2aWNlLm5ld1VybCh0aGlzLm5ld19rZXlbXCJwcm9maWwteG1sXCJdKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogSXNvQ3VydmUgd2ViIHNlcnZpY2UgYWNjZXNzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXJsIChrZXkpIC0gUmV0dXJucyBpc29jdXJ2ZSBzZXJ2aWNlIGRlZmF1bHQgdXJscyB3aXRoIG9yIHdpdGhvdXQgZ2VvcG9ydGFsIGFjY2VzcyBrZXkgZ2l2ZW4gYXMgYSBwYXJhbWV0ZXIuIFRoZSByZXN1bHQgaXMgYSBqYXZhc2NyaXB0IG9iamVjdCB3aXRoIGRpZmZlcmVudCB1cmxzIGdpdmVuIHVzZWQgcHJvdG9jb2xzIChcImlzby1qc29uXCIgb3IgXCJpc28teG1sXCIpLlxuICAgICAqL1xuICAgIFByb2Nlc3NJc29DdXJ2ZSA6IHtcblxuICAgICAgICBuZXdfa2V5IDogXCIvbmF2aWdhdGlvbi9pc29jaHJvbmVcIixcblxuICAgICAgICAvKipcbiAgICAgICAgKiB1cmwgZnJvbSBnZW9wbGF0ZWZvcm1lIHNlcnZpY2VcbiAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB1cmxcbiAgICAgICAgKi9cbiAgICAgICAgbmV3VXJsIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRVcmxTZXJ2aWNlLm5ld1VybCh0aGlzLm5ld19rZXkpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDb25maWcgd2ViIHNlcnZpY2UgYWNjZXNzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXJsIChrZXkpIC0gUmV0dXJucyBjb25maWcgc2VydmljZSBkZWZhdWx0IHVybHMgd2l0aCBvciB3aXRob3V0IGdlb3BvcnRhbCBhY2Nlc3Mga2V5IGdpdmVuIGFzIGEgcGFyYW1ldGVyLlxuICAgICAqL1xuICAgIENvbmZpZyA6IHtcbiAgICAgICAgX2tleSA6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0lHTkYvZ2VvcG9ydGFsLWNvbmZpZ3VyYXRpb24vbmV3LXVybC9kaXN0L1wiLFxuICAgICAgICAvKipcbiAgICAgICAgKiB1cmxcbiAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IC0ga2V5XG4gICAgICAgICogQHJldHVybnMge1N0cmluZ30gdXJsXG4gICAgICAgICovXG4gICAgICAgIHVybCA6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIC8vIGtleSBtdXN0IGJlIGFuIGFycmF5IG9mIG9uZSBvciBzZXZlcmFsIGtleXNcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5LnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vdCBob21vZ2VuZW91cyB3aXRoIG90aGVycyBnZW9wb3J0YWwgc2VydmljZXMgVVJMc1xuICAgICAgICAgICAgdmFyIHVybCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB1cmxbaV0gPSB0aGlzLl9rZXkgKyBrZXlbaV0gKyBcIkNvbmZpZy5qc29uXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBBdXRvY29tcGxldGlvbiB3ZWIgc2VydmljZSBhY2Nlc3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cmwgKGtleSkgLSBSZXR1cm5zIGF1dG9jb21wbGV0ZSBzZXJ2aWNlIGRlZmF1bHQgdXJscyB3aXRoIG9yIHdpdGhvdXQgZ2VvcG9ydGFsIGFjY2VzcyBrZXkgZ2l2ZW4gYXMgYSBwYXJhbWV0ZXIuIFRoZSByZXN1bHQgaXMgYSBTdHJpbmcuXG4gICAgICovXG4gICAgQXV0b0NvbXBsZXRlIDoge1xuICAgICAgICBuZXdfa2V5IDogXCIvZ2VvY29kYWdlL2NvbXBsZXRpb25cIixcblxuICAgICAgICAvKipcbiAgICAgICAgKiB1cmwgZnJvbSBnZW9wbGF0ZWZvcm1lIHNlcnZpY2VcbiAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB1cmxcbiAgICAgICAgKi9cbiAgICAgICAgbmV3VXJsIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRVcmxTZXJ2aWNlLm5ld1VybCh0aGlzLm5ld19rZXkpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXZlcnNlIGdlb2NvZGluZyB3ZWIgc2VydmljZSBhY2Nlc3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cmwgKGtleSkgLSBSZXR1cm5zIHJldmVyc2UgZ2VvY29kaW5nIHNlcnZpY2UgZGVmYXVsdCB1cmxzIHdpdGggb3Igd2l0aG91dCBnZW9wb3J0YWwgYWNjZXNzIGtleSBnaXZlbiBhcyBhIHBhcmFtZXRlci4gVGhlIHJlc3VsdCBpcyBhIFN0cmluZy5cbiAgICAgKi9cbiAgICBSZXZlcnNlR2VvY29kZSA6IHtcbiAgICAgICAgbmV3X2tleSA6IFwiL2dlb2NvZGFnZS9yZXZlcnNlXCIsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICogdXJsIGZyb20gZ2VvcGxhdGVmb3JtZSBzZXJ2aWNlXG4gICAgICAgICogQHJldHVybnMge1N0cmluZ30gdXJsXG4gICAgICAgICovXG4gICAgICAgIG5ld1VybCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBEZWZhdWx0VXJsU2VydmljZS5uZXdVcmwodGhpcy5uZXdfa2V5KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2VvY29kaW5nIHdlYiBzZXJ2aWNlIGFjY2Vzc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVybCAoa2V5KSAtIFJldHVybnMgZ2VvY29kaW5nIHNlcnZpY2UgZGVmYXVsdCB1cmxzIHdpdGggb3Igd2l0aG91dCBnZW9wb3J0YWwgYWNjZXNzIGtleSBnaXZlbiBhcyBhIHBhcmFtZXRlci4gVGhlIHJlc3VsdCBpcyBhIFN0cmluZy5cbiAgICAgKi9cbiAgICBHZW9jb2RlIDoge1xuICAgICAgICBuZXdfa2V5IDogXCIvZ2VvY29kYWdlL3NlYXJjaFwiLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAqIHVybCBmcm9tIGdlb3BsYXRlZm9ybWUgc2VydmljZVxuICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHVybFxuICAgICAgICAqL1xuICAgICAgICBuZXdVcmwgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gRGVmYXVsdFVybFNlcnZpY2UubmV3VXJsKHRoaXMubmV3X2tleSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJvdXRpbmcgd2ViIHNlcnZpY2UgYWNjZXNzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXJsIChrZXkpIC0gUmV0dXJucyByb3V0aW5nIHNlcnZpY2UgZGVmYXVsdCB1cmxzIHdpdGggb3Igd2l0aG91dCBnZW9wb3J0YWwgYWNjZXNzIGtleSBnaXZlbiBhcyBhIHBhcmFtZXRlci4gVGhlIHJlc3VsdCBpcyBhIGphdmFzY3JpcHQgb2JqZWN0IHdpdGggZGlmZmVyZW50IHVybHMgZ2l2ZW4gdXNlZCBwcm90b2NvbHMuXG4gICAgICovXG4gICAgUm91dGUgOiB7XG4gICAgICAgIG5ld19rZXkgOiBcIi9uYXZpZ2F0aW9uL2l0aW5lcmFpcmVcIixcblxuICAgICAgICAvKipcbiAgICAgICAgKiB1cmwgZnJvbSBnZW9wbGF0ZWZvcm1lIHNlcnZpY2VcbiAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB1cmxcbiAgICAgICAgKi9cbiAgICAgICAgbmV3VXJsIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRVcmxTZXJ2aWNlLm5ld1VybCh0aGlzLm5ld19rZXkpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRGVmYXVsdFVybFNlcnZpY2U7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/DefaultUrlService.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Formats/GeocodeResponseParser.js": +/*!***************************************************************!*\ + !*** ./src/Services/Geocode/Formats/GeocodeResponseParser.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _Response_model_GeocodeResponse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Response/model/GeocodeResponse */ \"./src/Services/Geocode/Response/model/GeocodeResponse.js\");\n/* harmony import */ var _Response_model_GeocodedLocation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Response/model/GeocodedLocation */ \"./src/Services/Geocode/Response/model/GeocodedLocation.js\");\n// import Logger from \"../../../Utils/LoggerByDefault\";\n\n\n\n\n\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service de géocodage direct du Géoportail\n * afin de récupérer les résultats retournés.\n * @module GeocodeResponseParser\n * @alias Gp.Services.Geocode.Formats.GeocodeResponseParser\n * @private\n */\n\n/**\n * @classdesc\n *\n * Classe permettant de parser une réponse GeoJSON\n *\n * @constructor\n * @alias Gp.Formats.GeocodeResponseParser\n *\n * @private\n */\nfunction GeocodeResponseParser() {\n if (!(this instanceof GeocodeResponseParser)) {\n throw new TypeError(\"GeocodeResponseParser constructor cannot be called as a function.\");\n }\n}\nGeocodeResponseParser.prototype = {\n /**\n * @lends module:GeocodeResponseParser\n */\n\n /*\n * Constructeur (alias)\n */\n constructor: GeocodeResponseParser,\n /**\n * Méthode permettant de lancer la lecture d'une réponse GeoJSON,\n *\n * @param {String} json - réponse au format GeoJSON\n * @return {Object} geocodeResponse|exceptionReport : l'objet contenant les informations de la réponse GeoJSON,\n * sous la forme d'un objet GeocodeResponse, ou un objet littéral exceptionReport si le service a renvoyé une exception.\n */\n parse: function parse(json) {\n var geocodeResponse = new _Response_model_GeocodeResponse__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n var obj = JSON.parse(json);\n if (obj.type === \"FeatureCollection\") {\n for (var i = 0; i < obj.features.length; ++i) {\n _parseFeature(obj.features[i], geocodeResponse);\n }\n } else if (obj.type === \"Feature\") {\n _parseFeature(obj, geocodeResponse);\n } else if (obj.type === \"SERVICE_ERROR\") {\n return _parseError(obj);\n } else {\n var mess = _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getMessage(\"SERVICE_RESPONSE_ANALYSE\", obj.type);\n throw new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__[\"default\"]({\n message: mess,\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__[\"default\"].TYPE_UNKERR,\n status: 200\n });\n }\n return geocodeResponse;\n }\n};\n\n/**\n * Méthode permettant de parser un feature\n *\n * @private\n *\n * @param {Object} feature\n * @param {Object} geocodeResponse\n *\n * @memberof GeocodeResponseParser\n * @return {Object} objet GeocodedLocation\n */\nfunction _parseFeature(feature, geocodeResponse) {\n var location = new _Response_model_GeocodedLocation__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n if (feature.geometry && feature.geometry.type === \"Point\") {\n location.position = {\n lon: feature.geometry.coordinates[0],\n lat: feature.geometry.coordinates[1]\n };\n }\n if (feature.properties) {\n for (var prop in feature.properties) {\n if (prop === \"score\") {\n location.accuracy = feature.properties[prop];\n } else if (prop === \"_type\") {\n if (feature.properties[prop] === \"address\") {\n location.type = \"StreetAddress\";\n } else if (feature.properties[prop] === \"poi\") {\n location.type = \"PositionOfInterest\";\n } else if (feature.properties[prop] === \"parcel\" || feature.properties[prop] === \"cadastral\") {\n location.type = \"CadastralParcel\";\n }\n } else {\n location.placeAttributes[prop] = feature.properties[prop];\n }\n }\n if (feature.properties._type === \"address\") {\n location.matchType = feature.properties.number !== undefined && feature.properties.number !== null ? \"street number\" : \"street\";\n }\n }\n geocodeResponse.locations.push(location);\n}\n\n/**\n * Méthode permettant de parser une erreur\n *\n * @private\n *\n * @param {Object} error\n *\n * @memberof GeocodeResponseParser\n * @return {Object}\n */\nfunction _parseError(error) {\n return {\n exceptionReport: error\n };\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodeResponseParser);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL0Zvcm1hdHMvR2VvY29kZVJlc3BvbnNlUGFyc2VyLmpzPzJlNDUiXSwibmFtZXMiOlsiR2VvY29kZVJlc3BvbnNlUGFyc2VyIiwiVHlwZUVycm9yIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJwYXJzZSIsImpzb24iLCJnZW9jb2RlUmVzcG9uc2UiLCJHZW9jb2RlUmVzcG9uc2UiLCJvYmoiLCJKU09OIiwidHlwZSIsImkiLCJmZWF0dXJlcyIsImxlbmd0aCIsIl9wYXJzZUZlYXR1cmUiLCJfcGFyc2VFcnJvciIsIm1lc3MiLCJNUiIsImdldE1lc3NhZ2UiLCJFcnJTcnYiLCJtZXNzYWdlIiwiVFlQRV9VTktFUlIiLCJzdGF0dXMiLCJmZWF0dXJlIiwibG9jYXRpb24iLCJHZW9jb2RlZExvY2F0aW9uIiwiZ2VvbWV0cnkiLCJwb3NpdGlvbiIsImxvbiIsImNvb3JkaW5hdGVzIiwibGF0IiwicHJvcGVydGllcyIsInByb3AiLCJhY2N1cmFjeSIsInBsYWNlQXR0cmlidXRlcyIsIl90eXBlIiwibWF0Y2hUeXBlIiwibnVtYmVyIiwidW5kZWZpbmVkIiwibG9jYXRpb25zIiwicHVzaCIsImVycm9yIiwiZXhjZXB0aW9uUmVwb3J0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDa0Q7QUFDSTtBQUNVO0FBQ0U7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxxQkFBcUJBLENBQUEsRUFBSTtFQUM5QixJQUFJLEVBQUUsSUFBSSxZQUFZQSxxQkFBcUIsQ0FBQyxFQUFFO0lBQzFDLE1BQU0sSUFBSUMsU0FBUyxDQUFDLG1FQUFtRSxDQUFDO0VBQzVGO0FBQ0o7QUFFQUQscUJBQXFCLENBQUNFLFNBQVMsR0FBRztFQUU5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SUFBSSxHQUFHLGlCQUFpQjtRQUNyQztNQUNKLENBQUMsTUFBTTtRQUNIYyxRQUFRLENBQUNVLGVBQWUsQ0FBQ0YsSUFBSSxDQUFDLEdBQUdULE9BQU8sQ0FBQ1EsVUFBVSxDQUFDQyxJQUFJLENBQUM7TUFDN0Q7SUFDSjtJQUNBLElBQUlULE9BQU8sQ0FBQ1EsVUFBVSxDQUFDSSxLQUFLLEtBQUssU0FBUyxFQUFFO01BQ3hDWCxRQUFRLENBQUNZLFNBQVMsR0FBR2IsT0FBTyxDQUFDUSxVQUFVLENBQUNNLE1BQU0sS0FBS0MsU0FBUyxJQUFJZixPQUFPLENBQUNRLFVBQVUsQ0FBQ00sTUFBTSxLQUFLLElBQUksR0FBRyxlQUFlLEdBQUcsUUFBUTtJQUNuSTtFQUNKO0VBQ0EvQixlQUFlLENBQUNpQyxTQUFTLENBQUNDLElBQUksQ0FBQ2hCLFFBQVEsQ0FBQztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNULFdBQVdBLENBQUUwQixLQUFLLEVBQUU7RUFDekIsT0FBTztJQUNIQyxlQUFlLEVBQUdEO0VBQ3RCLENBQUM7QUFDTDtBQUVlekMsb0ZBQXFCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0dlb2NvZGUvRm9ybWF0cy9HZW9jb2RlUmVzcG9uc2VQYXJzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBNUiBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBFcnJTcnYgZnJvbSBcIi4uLy4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgR2VvY29kZVJlc3BvbnNlIGZyb20gXCIuLi9SZXNwb25zZS9tb2RlbC9HZW9jb2RlUmVzcG9uc2VcIjtcbmltcG9ydCBHZW9jb2RlZExvY2F0aW9uIGZyb20gXCIuLi9SZXNwb25zZS9tb2RlbC9HZW9jb2RlZExvY2F0aW9uXCI7XG5cbi8qKlxuICogRm9uY3Rpb24gcmV0b3VybmFudCB1biBvYmpldCBjb250ZW5hbnQgZGVzIGNsw6lzIGRlIGxlY3R1cmUgKHJlYWRlcnMpXG4gKiAgICAgIHF1aSBwZXJtZXR0ZW50IGRlIHBhcnNlciBkZXMgcsOpcG9uc2VzIFhNTCBkdSBzZXJ2aWNlIGRlIGfDqW9jb2RhZ2UgZGlyZWN0IGR1IEfDqW9wb3J0YWlsXG4gKiAgICAgIGFmaW4gZGUgcsOpY3Vww6lyZXIgbGVzIHLDqXN1bHRhdHMgcmV0b3VybsOpcy5cbiAqIEBtb2R1bGUgR2VvY29kZVJlc3BvbnNlUGFyc2VyXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuR2VvY29kZS5Gb3JtYXRzLkdlb2NvZGVSZXNwb25zZVBhcnNlclxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiBDbGFzc2UgcGVybWV0dGFudCBkZSBwYXJzZXIgdW5lIHLDqXBvbnNlIEdlb0pTT05cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBHcC5Gb3JtYXRzLkdlb2NvZGVSZXNwb25zZVBhcnNlclxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEdlb2NvZGVSZXNwb25zZVBhcnNlciAoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEdlb2NvZGVSZXNwb25zZVBhcnNlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlb2NvZGVSZXNwb25zZVBhcnNlciBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgIH1cbn1cblxuR2VvY29kZVJlc3BvbnNlUGFyc2VyLnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIEBsZW5kcyBtb2R1bGU6R2VvY29kZVJlc3BvbnNlUGFyc2VyXG4gICAgICovXG5cbiAgICAvKlxuICAgICAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgOiBHZW9jb2RlUmVzcG9uc2VQYXJzZXIsXG5cbiAgICAvKipcbiAgICAgKiBNw6l0aG9kZSBwZXJtZXR0YW50IGRlIGxhbmNlciBsYSBsZWN0dXJlIGQndW5lIHLDqXBvbnNlIEdlb0pTT04sXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30ganNvbiAtIHLDqXBvbnNlIGF1IGZvcm1hdCBHZW9KU09OXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBnZW9jb2RlUmVzcG9uc2V8ZXhjZXB0aW9uUmVwb3J0IDogbCdvYmpldCBjb250ZW5hbnQgbGVzIGluZm9ybWF0aW9ucyBkZSBsYSByw6lwb25zZSBHZW9KU09OLFxuICAgICAqICAgICAgc291cyBsYSBmb3JtZSBkJ3VuIG9iamV0IEdlb2NvZGVSZXNwb25zZSwgb3UgdW4gb2JqZXQgbGl0dMOpcmFsIGV4Y2VwdGlvblJlcG9ydCBzaSBsZSBzZXJ2aWNlIGEgcmVudm95w6kgdW5lIGV4Y2VwdGlvbi5cbiAgICAgKi9cbiAgICBwYXJzZSA6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgIHZhciBnZW9jb2RlUmVzcG9uc2UgPSBuZXcgR2VvY29kZVJlc3BvbnNlKCk7XG5cbiAgICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShqc29uKTtcblxuICAgICAgICBpZiAob2JqLnR5cGUgPT09IFwiRmVhdHVyZUNvbGxlY3Rpb25cIikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmouZmVhdHVyZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBfcGFyc2VGZWF0dXJlKG9iai5mZWF0dXJlc1tpXSwgZ2VvY29kZVJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvYmoudHlwZSA9PT0gXCJGZWF0dXJlXCIpIHtcbiAgICAgICAgICAgIF9wYXJzZUZlYXR1cmUob2JqLCBnZW9jb2RlUmVzcG9uc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iai50eXBlID09PSBcIlNFUlZJQ0VfRVJST1JcIikge1xuICAgICAgICAgICAgcmV0dXJuIF9wYXJzZUVycm9yKG9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWVzcyA9IE1SLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0FOQUxZU0VcIiwgb2JqLnR5cGUpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVyclNydih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA6IG1lc3MsXG4gICAgICAgICAgICAgICAgdHlwZSA6IEVyclNydi5UWVBFX1VOS0VSUixcbiAgICAgICAgICAgICAgICBzdGF0dXMgOiAyMDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdlb2NvZGVSZXNwb25zZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIE3DqXRob2RlIHBlcm1ldHRhbnQgZGUgcGFyc2VyIHVuIGZlYXR1cmVcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlXG4gKiBAcGFyYW0ge09iamVjdH0gZ2VvY29kZVJlc3BvbnNlXG4gKlxuICogQG1lbWJlcm9mIEdlb2NvZGVSZXNwb25zZVBhcnNlclxuICogQHJldHVybiB7T2JqZWN0fSBvYmpldCBHZW9jb2RlZExvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIF9wYXJzZUZlYXR1cmUgKGZlYXR1cmUsIGdlb2NvZGVSZXNwb25zZSkge1xuICAgIHZhciBsb2NhdGlvbiA9IG5ldyBHZW9jb2RlZExvY2F0aW9uKCk7XG4gICAgaWYgKGZlYXR1cmUuZ2VvbWV0cnkgJiYgZmVhdHVyZS5nZW9tZXRyeS50eXBlID09PSBcIlBvaW50XCIpIHtcbiAgICAgICAgbG9jYXRpb24ucG9zaXRpb24gPSB7XG4gICAgICAgICAgICBsb24gOiBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLFxuICAgICAgICAgICAgbGF0IDogZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1sxXVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJzY29yZVwiKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYWNjdXJhY3kgPSBmZWF0dXJlLnByb3BlcnRpZXNbcHJvcF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgPT09IFwiX3R5cGVcIikge1xuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXNbcHJvcF0gPT09IFwiYWRkcmVzc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnR5cGUgPSBcIlN0cmVldEFkZHJlc3NcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmUucHJvcGVydGllc1twcm9wXSA9PT0gXCJwb2lcIikge1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi50eXBlID0gXCJQb3NpdGlvbk9mSW50ZXJlc3RcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmUucHJvcGVydGllc1twcm9wXSA9PT0gXCJwYXJjZWxcIiB8fCBmZWF0dXJlLnByb3BlcnRpZXNbcHJvcF0gPT09IFwiY2FkYXN0cmFsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24udHlwZSA9IFwiQ2FkYXN0cmFsUGFyY2VsXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5wbGFjZUF0dHJpYnV0ZXNbcHJvcF0gPSBmZWF0dXJlLnByb3BlcnRpZXNbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcy5fdHlwZSA9PT0gXCJhZGRyZXNzXCIpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLm1hdGNoVHlwZSA9IGZlYXR1cmUucHJvcGVydGllcy5udW1iZXIgIT09IHVuZGVmaW5lZCAmJiBmZWF0dXJlLnByb3BlcnRpZXMubnVtYmVyICE9PSBudWxsID8gXCJzdHJlZXQgbnVtYmVyXCIgOiBcInN0cmVldFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlb2NvZGVSZXNwb25zZS5sb2NhdGlvbnMucHVzaChsb2NhdGlvbik7XG59XG5cbi8qKlxuICogTcOpdGhvZGUgcGVybWV0dGFudCBkZSBwYXJzZXIgdW5lIGVycmV1clxuICpcbiAqIEBwcml2YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVycm9yXG4gKlxuICogQG1lbWJlcm9mIEdlb2NvZGVSZXNwb25zZVBhcnNlclxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBfcGFyc2VFcnJvciAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBleGNlcHRpb25SZXBvcnQgOiBlcnJvclxuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb2NvZGVSZXNwb25zZVBhcnNlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Formats/GeocodeResponseParser.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Geocode.js": +/*!*****************************************!*\ + !*** ./src/Services/Geocode/Geocode.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Request/GeocodeRequestFactory */ \"./src/Services/Geocode/Request/GeocodeRequestFactory.js\");\n/* harmony import */ var _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Response/GeocodeResponseFactory */ \"./src/Services/Geocode/Response/GeocodeResponseFactory.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n\n\n\n\n\n\n\n\n/**\n * @classdesc\n * Appel du service de géocodage direct du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Geocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String|Object} options.query - Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} [options.filters.[prop]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales.\n * L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20.\n *\n * @param {Boolean} [options.returnTrueGeometry = false] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {lon:, lat:},\n * index : 'StreetAddress',\n * query : '10 rue du pont Machin-ville'\n * (...)\n * };\n */\nfunction Geocode(options_) {\n if (!(this instanceof Geocode)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"Geocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Geocode\";\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"Gp.Services.Geocode\");\n this.logger.trace(\"[Constructeur Geocode (options)]\");\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Geocode.newUrl();\n }\n\n // appel du constructeur par heritage\n _CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].apply(this, [options]);\n if (!options.hasOwnProperty(\"query\")) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"query\"));\n }\n\n // ajout des options spécifiques au service\n this.options.query = options.query;\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" || _typeof(options.filters[key]) === \"object\" && Object.keys(options.filters[key]).length === 0 || typeof options.filters[key] === \"string\" && options.filters[key].length === 0 || Array.isArray(options.filters[key]) && options.filters[key].length === 0) {\n delete this.options.filters[key];\n }\n }\n }\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:Geocode#\n */\nGeocode.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nGeocode.prototype.constructor = Geocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nGeocode.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n if (options.hasOwnProperty(\"location\")) {\n this.logger.warn(\"The parameter 'location' is deprecated\");\n if (!options.query) {\n options.query = options.location;\n }\n delete options.location;\n }\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n if (!options.filters) {\n options.filters = options.filterOptions;\n if (options.filters.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filters.type) && options.filters.type.length > 0) {\n options.index = options.filters.type[0];\n } else {\n options.index = options.filters.type;\n }\n }\n delete options.filters.type;\n }\n if (options.filters.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n delete options.filters.bbox;\n }\n }\n delete options.filterOptions;\n }\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n if (options.returnFreeForm) {\n this.logger.warn(\"The parameter 'returnFreeForm' is deprecated\");\n delete options.returnFreeForm;\n }\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n return options;\n};\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod: this.options.httpMethod,\n // options specifiques du service\n geocodeMethod: \"search\",\n query: this.options.query,\n index: this.options.index,\n returnTrueGeometry: this.options.returnTrueGeometry,\n position: this.options.position,\n maxResp: this.options.maximumResponses,\n filters: this.options.filters\n };\n this.request = _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__[\"default\"].build(options);\n\n // on teste si la requete a bien été construite !\n !this.request ? error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_REQUEST_BUILD\"))) : success.call(this, this.request);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.analyzeResponse = function (error, success) {\n /* INFO :\n Etape 1 : Création de la requête (URL)\n -> stockage de la requête dans this.request\n Etape 2 : Envoi de la requête\n -> appel du protocol XHR, et envoi (par ex send ())\n -> récupération de la réponse JSON dans la fonction onSuccess () (this.response)\n -> si code HTTP 200 et pas de message d'erreur : etape 3\n -> si code HTTP != 200 : lancement de la fonction de callback onFailure avec le message d'erreur\n Etape 3 : Analyse de la réponse JSON (si rawResponse === false )\n -> appel du parser pour récupérer le document\n Etape 4 : Lancement de la fonction de callback onSuccess avec la réponse :\n -> JSON (si rawResponse === true)\n -> ou geocodedLocations\n */\n\n if (this.response) {\n var options = {\n response: this.response,\n rawResponse: this.options.rawResponse,\n onError: error,\n onSuccess: success,\n scope: this\n };\n _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"].build(options);\n } else {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Geocode);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL0dlb2NvZGUuanM/NGZjNyJdLCJuYW1lcyI6WyJHZW9jb2RlIiwib3B0aW9uc18iLCJUeXBlRXJyb3IiLCJfIiwiZ2V0TWVzc2FnZSIsIkNMQVNTTkFNRSIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwib3B0aW9ucyIsInBhdGNoT3B0aW9uQ29udmVydG9yIiwic2VydmVyVXJsIiwiRGVmYXVsdFVybFNlcnZpY2UiLCJuZXdVcmwiLCJDb21tb25TZXJ2aWNlIiwiYXBwbHkiLCJoYXNPd25Qcm9wZXJ0eSIsIkVycm9yIiwicXVlcnkiLCJpbmRleCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJPYmplY3QiLCJrZXlzIiwiaSIsImxlbmd0aCIsImtleSIsIl90eXBlb2YiLCJBcnJheSIsImlzQXJyYXkiLCJtYXhpbXVtUmVzcG9uc2VzIiwicHJvdG90eXBlIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJ3YXJuIiwibG9jYXRpb24iLCJmaWx0ZXJPcHRpb25zIiwidHlwZSIsImJib3giLCJwb3NpdGlvbiIsIngiLCJsb24iLCJ5IiwibGF0IiwicmV0dXJuRnJlZUZvcm0iLCJzcnMiLCJidWlsZFJlcXVlc3QiLCJlcnJvciIsInN1Y2Nlc3MiLCJodHRwTWV0aG9kIiwiZ2VvY29kZU1ldGhvZCIsInJldHVyblRydWVHZW9tZXRyeSIsIm1heFJlc3AiLCJyZXF1ZXN0IiwiR2VvY29kZVJlcXVlc3RGYWN0b3J5IiwiYnVpbGQiLCJjYWxsIiwiRXJyb3JTZXJ2aWNlIiwiYW5hbHl6ZVJlc3BvbnNlIiwicmVzcG9uc2UiLCJyYXdSZXNwb25zZSIsIm9uRXJyb3IiLCJvblN1Y2Nlc3MiLCJzY29wZSIsIkdlb2NvZGVSZXNwb25zZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFpRDtBQUNIO0FBQ1c7QUFDWjtBQUNRO0FBQ2U7QUFDRzs7QUFFdkU7QUFDQTtBQUNBO0FBQ0E7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QUFDOUMsT0FBTyxDQUFDO0VBQ3pDLENBQUMsTUFBTTtJQUNIc0MsS0FBSyxDQUFDUyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUlDLGdFQUFZLENBQUN2RCxnRUFBQyxDQUFDQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0VBQzlFO0FBQ0osQ0FBQztBQUVjSixzRUFBTyIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL0dlb2NvZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBfIGZyb20gXCIuLi8uLi9VdGlscy9NZXNzYWdlc1Jlc291cmNlc1wiO1xuaW1wb3J0IEVycm9yU2VydmljZSBmcm9tIFwiLi4vLi4vRXhjZXB0aW9ucy9FcnJvclNlcnZpY2VcIjtcbmltcG9ydCBDb21tb25TZXJ2aWNlIGZyb20gXCIuLi9Db21tb25TZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdFVybFNlcnZpY2UgZnJvbSBcIi4uL0RlZmF1bHRVcmxTZXJ2aWNlXCI7XG5pbXBvcnQgR2VvY29kZVJlcXVlc3RGYWN0b3J5IGZyb20gXCIuL1JlcXVlc3QvR2VvY29kZVJlcXVlc3RGYWN0b3J5XCI7XG5pbXBvcnQgR2VvY29kZVJlc3BvbnNlRmFjdG9yeSBmcm9tIFwiLi9SZXNwb25zZS9HZW9jb2RlUmVzcG9uc2VGYWN0b3J5XCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICogQXBwZWwgZHUgc2VydmljZSBkZSBnw6lvY29kYWdlIGRpcmVjdCBkdSBHw6lvcG9ydGFpbCA6XG4gKiAgICAgZW52b2kgZGUgbGEgcmVxdcOqdGUgY29uc3RydWl0ZSBzZWxvbiBsZXMgcGFyYW3DqHRyZXMgZW4gb3B0aW9ucyxcbiAqICAgICDDqXZlbnR1ZWxsZW1lbnQgcGFyc2luZyBldCBhbmFseXNlICBkZSBsYSByw6lwb25zZSxcbiAqICAgICByZXRvdXIgZCd1bmUgcsOpcG9uc2UgZW4gcGFyYW3DqHRyZSBkZSBsYSBmb25jdGlvbiBvblN1Y2Nlc3MuXG4gKlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge0dwLlNlcnZpY2VzLkNvbW1vblNlcnZpY2V9XG4gKiBAYWxpYXMgR3AuU2VydmljZXMuR2VvY29kZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBzcMOpY2lmaXF1ZXMgYXUgc2VydmljZSAoKyBsZXMgb3B0aW9ucyBoZXJpdMOpZXMpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBvcHRpb25zLnF1ZXJ5IC0gTm9tIGRlIGwnYWRyZXNzZSwgZHUgdG9wb255bWUsIGRlIGwndW5pdMOpIGFkbWluaXN0cmF0aXZlIG91IGRlIGxhIHBhcmNlbGxlIGNhZGFzdHJhbGUgcmVjaGVyY2jDqWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmZpbHRlcnNdIC0gTGVzIHByb3ByacOpdMOpcyBwb3NzaWJsZXMgZGUgY2V0IG9iamV0IHNvbnQgZMOpY3JpdGVzIGNpLWFwcsOocy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5maWx0ZXJzLltwcm9wXV0gLSBDcml0w6hyZSBzdXBwbMOpbWVudGFpcmUgcG91ciBmaWx0cmVyIGxhIHJlY2hlcmNoZSBzb3VzIGxhIGZvcm1lXG4gKiAgICAgIGQndW4gY291cGxlIGNsw6kvdmFsZXVyIMOgIGTDqWZpbmlyIHNlbG9uIGxlcyBwb3NzaWJpbGl0w6lzIGR1IHNlcnZldXIgYWpvdXTDqSDDoCBsYSByZXF1w6p0ZS5cbiAqICAgICAgTGUgc2VydmljZSBkZSBnw6lvY29kYWdlIGR1IEfDqW9wb3J0YWlsIHBlcm1ldCBkZSBmaWx0cmVyIGxlcyBhZHJlc3NlcyBwb3N0YWxlcyBhdmVjIGxlcyBwcm9wcmnDqXTDqXMgOlxuICogICAgICAgICAgXCJwb3N0YWxDb2RlXCIsIFwiaW5zZWVDb2RlXCIsIFwiY2l0eVwiLlxuICogICAgICBJbCBwZXJtZXQgw6lnYWxlbWVudCBkZSBmaWx0cmVyIGxlcyB0b3BvbnltZXMgYXZlYyBsZXMgcHJvcHJpw6l0w6lzIDpcbiAqICAgICAgICAgIFwicG9zdGFsQ29kZVwiLCBcImluc2VlQ29kZVwiLCBcInR5cGVcIi5cbiAqICAgICAgRW5maW4sIGlsIHBlcm1ldCBkZSBmaWx0cmVyIGxlcyBwYXJjZWxsZXMgY2FkYXN0cmFsZXMgYXZlYyBsZXMgcHJvcHJpw6l0w6lzIDpcbiAqICAgICAgICAgIFwiY29kZURlcGFydGVtZW50XCIsIFwiY29kZUNvbW11bmVcIiwgXCJub21Db21tdW5lXCIsIFwiY29kZUNvbW11bmVBYnNcIiwgXCJjb2RlQXJyb25kaXNzZW1lbnRcIiwgXCJzZWN0aW9uXCIsIFwibnVtZXJvXCIsIFwiZmV1aWxsZVwiLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbmRleCA9IFwiU3RyZWV0QWRkcmVzc1wiXSAtIFR5cGUgZGUgbCdvYmpldCByZWNoZXJjaMOpLlxuICogICAgICBMZSBzZXJ2aWNlIGRlIGfDqW9jb2RhZ2UgZHUgR8Opb3BvcnRhaWwgcGVybWV0IGRlIHJlY2hlcmNoZXIgZGVzICdQb3NpdGlvbk9mSW50ZXJlc3QnIHBvdXIgZGVzIHRvcG9ueW1lcywgZGVzICdTdHJlZXRBZGRyZXNzJ1xuICogICAgICBwb3VyIGRlcyBhZHJlc3NlcyBwb3N0YWxlcyBvdSBkZXMgJ0NhZGFzdHJhbFBhcmNlbCcgcG91ciBkZXMgcGFyY2VsbGVzIGNhZGFzdHJhbGVzLlxuICogICAgICBMJ2luZGV4ICdsb2NhdGlvbicgcmVncm91cGUgbGVzIGluZGV4ZXMgJ1N0cmVldEFkZHJlc3MnIGV0ICdQb3NpdGlvbk9mSW50ZXJlc3QnLlxuICogICAgICBEJ2F1dHJlcyB0eXBlcyBwb3Vycm9udCDDqnRyZSByYWpvdXTDqXMgc2Vsb24gbCfDqXZvbHV0aW9uIGR1IHNlcnZpY2UuXG4gKiAgICAgIFBhciBkw6lmYXV0LCBpbmRleCA9ICdTdHJlZXRBZGRyZXNzJy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5wb3NpdGlvbiAtIFBvc2l0aW9uIGR1IHBvaW50IGRlIHLDqWbDqXJlbmNlIHBvdXIgbGUgY2FsY3VsIGRlIHByb3hpbWl0w6kgZXhwcmltw6llIGRhbnMgbGUgc3lzdMOobWUgZGUgcsOpZsOpcmVuY2Ugc3DDqWNpZmnDqSBwYXIgbGUgc3JzLlxuICogICAgICBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnBvc2l0aW9uLmxvbiAtIExvbmdpdHVkZSBkdSBwb2ludCBkZSByw6lmw6lyZW5jZSBwb3VyIGxlIGNhbGN1bCBkZSBwcm94aW1pdMOpLlxuICogICAgICBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnBvc2l0aW9uLmxhdCAtIExhdGl0dWRlIGR1IHBvaW50IGRlIHLDqWbDqXJlbmNlIHBvdXIgbGUgY2FsY3VsIGRlIHByb3hpbWl0w6kuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1SZXNwb25zZXNdIC0gTm9tYnJlIGRlIHLDqXBvbnNlcyBtYXhpbWFsIHF1ZSBsJ29uIHNvdWhhaXRlIHJlY2V2b2lyLlxuICogICAgICBQYXMgZGUgdmFsZXVyIHBhciBkw6lmYXV0LlxuICogICAgICBTaSBsZSBzZXJ2ZXVyIGNvbnN1bHTDqSBlc3QgY2VsdWkgZHUgR8Opb3BvcnRhaWwsIGxhIHZhbGV1ciBwYXIgZMOpZmF1dCBzZXJhIGRvbmMgY2VsbGUgZHUgc2VydmljZSA6IDIwLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV0dXJuVHJ1ZUdlb21ldHJ5ID0gZmFsc2VdIC0gQm9vbMOpZW4gaW5kaXF1YW50IHNpIGwnb24gc291aGFpdGUgcsOpY3Vww6lyZXIgbGEgZ8Opb23DqXRyaWUgdnJhaWUgZGVzIG9iamVjdHMgZ8Opb2xvY2FsaXPDqXMuXG4gKiAgICAgIGZhbHNlIHBhciBkw6lmYXV0LlxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICogICB2YXIgb3B0aW9ucyA9IHtcbiAqICAgICAgYXBpS2V5IDogbnVsbCxcbiAqICAgICAgc2VydmVyVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Qvc2VydmljZS8nLFxuICogICAgICBwcm94eVVSTCA6IG51bGwsXG4gKiAgICAgIHRpbWVPdXQgOiAxMDAwMCwgLy8gbXNcbiAqICAgICAgcmF3UmVzcG9uc2UgOiBmYWxzZSwgLy8gdHJ1ZXxmYWxzZVxuICogICAgICBzY29wZSA6IG51bGwsIC8vIHRoaXNcbiAqICAgICAgb25TdWNjZXNzIDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7fSxcbiAqICAgICAgb25GYWlsdXJlIDogZnVuY3Rpb24gKGVycm9yKSB7fSxcbiAqICAgICAgLy8gc3DDqWNpZmlxdWUgYXUgc2VydmljZVxuICogICAgICBwb3NpdGlvbiA6IHtsb246LCBsYXQ6fSxcbiAqICAgICAgaW5kZXggOiAnU3RyZWV0QWRkcmVzcycsXG4gKiAgICAgIHF1ZXJ5IDogJzEwIHJ1ZSBkdSBwb250IE1hY2hpbi12aWxsZSdcbiAqICAgICAgKC4uLilcbiAqICAgfTtcbiAqL1xuZnVuY3Rpb24gR2VvY29kZSAob3B0aW9uc18pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VvY29kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfLmdldE1lc3NhZ2UoXCJDTEFTU19DT05TVFJVQ1RPUlwiLCBcIkdlb2NvZGVcIikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vbSBkZSBsYSBjbGFzc2UgKGhlcml0YWdlKVxuICAgICAqIEZJWE1FIGluc3RhbmNlIG91IGNsYXNzZSA/XG4gICAgICovXG4gICAgdGhpcy5DTEFTU05BTUUgPSBcIkdlb2NvZGVcIjtcblxuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIkdwLlNlcnZpY2VzLkdlb2NvZGVcIik7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIEdlb2NvZGUgKG9wdGlvbnMpXVwiKTtcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5wYXRjaE9wdGlvbkNvbnZlcnRvcihvcHRpb25zXyk7XG4gICAgaWYgKCFvcHRpb25zLnNlcnZlclVybCkge1xuICAgICAgICBvcHRpb25zLnNlcnZlclVybCA9IERlZmF1bHRVcmxTZXJ2aWNlLkdlb2NvZGUubmV3VXJsKCk7XG4gICAgfVxuXG4gICAgLy8gYXBwZWwgZHUgY29uc3RydWN0ZXVyIHBhciBoZXJpdGFnZVxuICAgIENvbW1vblNlcnZpY2UuYXBwbHkodGhpcywgW29wdGlvbnNdKTtcblxuICAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcInF1ZXJ5XCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwicXVlcnlcIikpO1xuICAgIH1cblxuICAgIC8vIGFqb3V0IGRlcyBvcHRpb25zIHNww6ljaWZpcXVlcyBhdSBzZXJ2aWNlXG4gICAgdGhpcy5vcHRpb25zLnF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcblxuICAgIC8vIG9uIGRlZmluaXQgbCdpbmRleCBwYXIgZGVmYXV0XG4gICAgaWYgKCFvcHRpb25zLmluZGV4KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5pbmRleCA9IG9wdGlvbnMuaW5kZXggPSBcIlN0cmVldEFkZHJlc3NcIjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzKSB7XG4gICAgICAgIHZhciBmaWx0ZXIgPSBPYmplY3Qua2V5cyhvcHRpb25zLmZpbHRlcnMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGZpbHRlcltpXTtcbiAgICAgICAgICAgIC8vIG9uIHN1cHByaW1lIGxlcyBmaWx0cmVzIHZpZGVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyc1trZXldID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvcHRpb25zLmZpbHRlcnNba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmZpbHRlcnNba2V5XSkubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXJzW2tleV0gPT09IFwic3RyaW5nXCIgJiYgb3B0aW9ucy5maWx0ZXJzW2tleV0ubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZmlsdGVyc1trZXldKSAmJiBvcHRpb25zLmZpbHRlcnNba2V5XS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zLmZpbHRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5pbmRleCA9IG9wdGlvbnMuaW5kZXggfHwgXCJTdHJlZXRBZGRyZXNzXCI7XG4gICAgdGhpcy5vcHRpb25zLm1heGltdW1SZXNwb25zZXMgPSBvcHRpb25zLm1heGltdW1SZXNwb25zZXMgfHwgMjA7XG59XG5cbi8qKlxuICogQGxlbmRzIG1vZHVsZTpHZW9jb2RlI1xuICovXG5HZW9jb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29tbW9uU2VydmljZS5wcm90b3R5cGUsIHtcbiAgICAvLyB0b2RvXG4gICAgLy8gZ2V0dGVyL3NldHRlclxufSk7XG5cbi8qXG4gKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICovXG5HZW9jb2RlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlb2NvZGU7XG5cbi8qKlxuICogUGF0Y2ggcG91ciBsYSBjb252ZXJ0aW9uIGRlcyBvcHRpb25zIHZlcnMgbGUgbm91dmVhdSBmb3JtYWxpc21lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXyAtIG9wdGlvbnMgZHUgc2VydmljZVxuICogQHJldHVybiB7T2JqZWN0fSAtIG9wdGlvbnNcbiAqL1xuR2VvY29kZS5wcm90b3R5cGUucGF0Y2hPcHRpb25Db252ZXJ0b3IgPSBmdW5jdGlvbiAob3B0aW9uc18pIHtcbiAgICBjb25zdCBvcHRpb25zID0gb3B0aW9uc187XG5cbiAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImxvY2F0aW9uXCIpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdsb2NhdGlvbicgaXMgZGVwcmVjYXRlZFwiKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMucXVlcnkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucXVlcnkgPSBvcHRpb25zLmxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmxvY2F0aW9uO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ2ZpbHRlck9wdGlvbnMnIGlzIGRlcHJlY2F0ZWRcIik7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbHRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVyT3B0aW9ucztcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVycy50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ2ZpbHRlck9wdGlvbnMudHlwZScgaXMgZGVwcmVjYXRlZFwiKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5maWx0ZXJzLnR5cGUpICYmIG9wdGlvbnMuZmlsdGVycy50eXBlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5kZXggPSBvcHRpb25zLmZpbHRlcnMudHlwZVswXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5kZXggPSBvcHRpb25zLmZpbHRlcnMudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJzLnR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbHRlcnMuYmJveCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdmaWx0ZXJPcHRpb25zLmJib3gnIGlzIGRlcHJlY2F0ZWRcIik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuZmlsdGVycy5iYm94O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmZpbHRlck9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ3Bvc2l0aW9uLngnIGlzIGRlcHJlY2F0ZWRcIik7XG5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wb3NpdGlvbi5sb24pIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uLmxvbiA9IG9wdGlvbnMucG9zaXRpb24ueDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnBvc2l0aW9uLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wb3NpdGlvbi55KSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiVGhlIHBhcmFtZXRlciAncG9zaXRpb24ueScgaXMgZGVwcmVjYXRlZFwiKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnBvc2l0aW9uLmxhdCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb24ubGF0ID0gb3B0aW9ucy5wb3NpdGlvbi55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMucG9zaXRpb24ueTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJldHVybkZyZWVGb3JtKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdyZXR1cm5GcmVlRm9ybScgaXMgZGVwcmVjYXRlZFwiKTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucmV0dXJuRnJlZUZvcm07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3JzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdzcnMnIGlzIGRlcHJlY2F0ZWRcIik7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLnNycztcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbn07XG5cbi8qKlxuICogQ3LDqWF0aW9uIGRlIGxhIHJlcXXDqnRlIChvdmVyd3JpdGUpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuR2VvY29kZS5wcm90b3R5cGUuYnVpbGRSZXF1ZXN0ID0gZnVuY3Rpb24gKGVycm9yLCBzdWNjZXNzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGh0dHBNZXRob2QgOiB0aGlzLm9wdGlvbnMuaHR0cE1ldGhvZCxcbiAgICAgICAgLy8gb3B0aW9ucyBzcGVjaWZpcXVlcyBkdSBzZXJ2aWNlXG4gICAgICAgIGdlb2NvZGVNZXRob2QgOiBcInNlYXJjaFwiLFxuICAgICAgICBxdWVyeSA6IHRoaXMub3B0aW9ucy5xdWVyeSxcbiAgICAgICAgaW5kZXggOiB0aGlzLm9wdGlvbnMuaW5kZXgsXG4gICAgICAgIHJldHVyblRydWVHZW9tZXRyeSA6IHRoaXMub3B0aW9ucy5yZXR1cm5UcnVlR2VvbWV0cnksXG4gICAgICAgIHBvc2l0aW9uIDogdGhpcy5vcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICBtYXhSZXNwIDogdGhpcy5vcHRpb25zLm1heGltdW1SZXNwb25zZXMsXG4gICAgICAgIGZpbHRlcnMgOiB0aGlzLm9wdGlvbnMuZmlsdGVyc1xuICAgIH07XG5cbiAgICB0aGlzLnJlcXVlc3QgPSBHZW9jb2RlUmVxdWVzdEZhY3RvcnkuYnVpbGQob3B0aW9ucyk7XG5cbiAgICAvLyBvbiB0ZXN0ZSBzaSBsYSByZXF1ZXRlIGEgYmllbiDDqXTDqSBjb25zdHJ1aXRlICFcbiAgICAoIXRoaXMucmVxdWVzdClcbiAgICAgICAgPyBlcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvclNlcnZpY2UoXy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVFVRVNUX0JVSUxEXCIpKSlcbiAgICAgICAgOiBzdWNjZXNzLmNhbGwodGhpcywgdGhpcy5yZXF1ZXN0KTtcbn07XG5cbi8qKlxuICogQW5hbHlzZSBkZSBsYSByZXBvbnNlIChvdmVyd3JpdGUpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuR2VvY29kZS5wcm90b3R5cGUuYW5hbHl6ZVJlc3BvbnNlID0gZnVuY3Rpb24gKGVycm9yLCBzdWNjZXNzKSB7XG4gICAgLyogSU5GTyA6XG4gICAgICAgICBFdGFwZSAxIDogQ3LDqWF0aW9uIGRlIGxhIHJlcXXDqnRlIChVUkwpXG4gICAgICAgICAgICAtPiBzdG9ja2FnZSBkZSBsYSByZXF1w6p0ZSBkYW5zIHRoaXMucmVxdWVzdFxuICAgICAgICAgRXRhcGUgMiA6IEVudm9pIGRlIGxhIHJlcXXDqnRlXG4gICAgICAgICAgICAtPiBhcHBlbCBkdSBwcm90b2NvbCBYSFIsIGV0IGVudm9pIChwYXIgZXggc2VuZCAoKSlcbiAgICAgICAgICAgIC0+IHLDqWN1cMOpcmF0aW9uIGRlIGxhIHLDqXBvbnNlIEpTT04gZGFucyBsYSBmb25jdGlvbiBvblN1Y2Nlc3MgKCkgKHRoaXMucmVzcG9uc2UpXG4gICAgICAgICAgICAtPiBzaSBjb2RlIEhUVFAgMjAwIGV0IHBhcyBkZSBtZXNzYWdlIGQnZXJyZXVyIDogZXRhcGUgM1xuICAgICAgICAgICAgLT4gc2kgY29kZSBIVFRQICE9IDIwMCA6IGxhbmNlbWVudCBkZSBsYSBmb25jdGlvbiBkZSBjYWxsYmFjayBvbkZhaWx1cmUgYXZlYyBsZSBtZXNzYWdlIGQnZXJyZXVyXG4gICAgICAgICBFdGFwZSAzIDogQW5hbHlzZSBkZSBsYSByw6lwb25zZSBKU09OIChzaSByYXdSZXNwb25zZSA9PT0gZmFsc2UgKVxuICAgICAgICAgICAgLT4gYXBwZWwgZHUgcGFyc2VyIHBvdXIgcsOpY3Vww6lyZXIgbGUgZG9jdW1lbnRcbiAgICAgICAgIEV0YXBlIDQgOiBMYW5jZW1lbnQgZGUgbGEgZm9uY3Rpb24gZGUgY2FsbGJhY2sgb25TdWNjZXNzIGF2ZWMgbGEgcsOpcG9uc2UgOlxuICAgICAgICAgICAgLT4gSlNPTiAoc2kgcmF3UmVzcG9uc2UgPT09IHRydWUpXG4gICAgICAgICAgICAtPiBvdSBnZW9jb2RlZExvY2F0aW9uc1xuICAgICovXG5cbiAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHJlc3BvbnNlIDogdGhpcy5yZXNwb25zZSxcbiAgICAgICAgICAgIHJhd1Jlc3BvbnNlIDogdGhpcy5vcHRpb25zLnJhd1Jlc3BvbnNlLFxuICAgICAgICAgICAgb25FcnJvciA6IGVycm9yLFxuICAgICAgICAgICAgb25TdWNjZXNzIDogc3VjY2VzcyxcbiAgICAgICAgICAgIHNjb3BlIDogdGhpc1xuICAgICAgICB9O1xuXG4gICAgICAgIEdlb2NvZGVSZXNwb25zZUZhY3RvcnkuYnVpbGQob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IuY2FsbCh0aGlzLCBuZXcgRXJyb3JTZXJ2aWNlKF8uZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlcIikpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBHZW9jb2RlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Geocode.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Request/GeocodeRequestFactory.js": +/*!***************************************************************!*\ + !*** ./src/Services/Geocode/Request/GeocodeRequestFactory.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _GeocodeRequestREST__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GeocodeRequestREST */ \"./src/Services/Geocode/Request/GeocodeRequestREST.js\");\n\n\n\n/**\n * Creation d'une requête\n * (Factory)\n *\n * @module GeocodeRequestFactory\n * @alias Gp.Services.Geocode.Request.GeocodeRequestFactory\n * @private\n */\nvar GeocodeRequestFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * // options specifiques du service\n * geocodeMethod:\n * query:\n * filters:\n * maximumResponses:\n * };\n * var result = GeocodeRequestFactory.build(options);\n * if (!result) {\n * // error...\n * }\n * @returns {String} request\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"GeocodeRequestFactory\");\n logger.trace([\"GeocodeRequestFactory::build()\"]);\n var settings = options || {};\n var myReq = new _GeocodeRequestREST__WEBPACK_IMPORTED_MODULE_1__[\"default\"](settings);\n if (!myReq.processRequestString()) {\n throw new Error(\"Error process request (rest) !\");\n }\n var request = myReq.requestString;\n logger.trace(request);\n return request;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodeRequestFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JlcXVlc3QvR2VvY29kZVJlcXVlc3RGYWN0b3J5LmpzPzQ1MzgiXSwibmFtZXMiOlsiR2VvY29kZVJlcXVlc3RGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJzZXR0aW5ncyIsIm15UmVxIiwiR2VvY29kZVJlcXVlc3RSRVNUIiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJFcnJvciIsInJlcXVlc3QiLCJyZXF1ZXN0U3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBb0Q7QUFDRTs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLHFCQUFxQixHQUFHO0VBRXhCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxLQUFLLEVBQUcsU0FBUkEsS0FBS0EsQ0FBYUMsT0FBTyxFQUFFO0lBQ3ZCO0lBQ0EsSUFBSUMsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsdUJBQXVCLENBQUM7SUFDdERGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUVoRCxJQUFJQyxRQUFRLEdBQUdMLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFFNUIsSUFBSU0sS0FBSyxHQUFHLElBQUlDLDJEQUFrQixDQUFDRixRQUFRLENBQUM7SUFDNUMsSUFBSSxDQUFDQyxLQUFLLENBQUNFLG9CQUFvQixDQUFDLENBQUMsRUFBRTtNQUMvQixNQUFNLElBQUlDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQztJQUNyRDtJQUNBLElBQUlDLE9BQU8sR0FBR0osS0FBSyxDQUFDSyxhQUFhO0lBRWpDVixNQUFNLENBQUNHLEtBQUssQ0FBQ00sT0FBTyxDQUFDO0lBRXJCLE9BQU9BLE9BQU87RUFDbEI7QUFDSixDQUFDO0FBRWNaLG9GQUFxQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JlcXVlc3QvR2VvY29kZVJlcXVlc3RGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgR2VvY29kZVJlcXVlc3RSRVNUIGZyb20gXCIuL0dlb2NvZGVSZXF1ZXN0UkVTVFwiO1xuXG4vKipcbiAqIENyZWF0aW9uIGQndW5lIHJlcXXDqnRlXG4gKiAoRmFjdG9yeSlcbiAqXG4gKiBAbW9kdWxlIEdlb2NvZGVSZXF1ZXN0RmFjdG9yeVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkdlb2NvZGUuUmVxdWVzdC5HZW9jb2RlUmVxdWVzdEZhY3RvcnlcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBHZW9jb2RlUmVxdWVzdEZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBHZW9jb2RlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICogICAgICAvLyBvcHRpb25zIHNwZWNpZmlxdWVzIGR1IHNlcnZpY2VcbiAgICAgKiAgICAgIGdlb2NvZGVNZXRob2Q6XG4gICAgICogICAgICBxdWVyeTpcbiAgICAgKiAgICAgIGZpbHRlcnM6XG4gICAgICogICAgICBtYXhpbXVtUmVzcG9uc2VzOlxuICAgICAqICAgfTtcbiAgICAgKiAgIHZhciByZXN1bHQgPSBHZW9jb2RlUmVxdWVzdEZhY3RvcnkuYnVpbGQob3B0aW9ucyk7XG4gICAgICogICBpZiAoIXJlc3VsdCkge1xuICAgICAqICAgICAgIC8vIGVycm9yLi4uXG4gICAgICogICB9XG4gICAgICogQHJldHVybnMge1N0cmluZ30gcmVxdWVzdFxuICAgICAqL1xuICAgIGJ1aWxkIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gbG9nZ2VyXG4gICAgICAgIHZhciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiR2VvY29kZVJlcXVlc3RGYWN0b3J5XCIpO1xuICAgICAgICBsb2dnZXIudHJhY2UoW1wiR2VvY29kZVJlcXVlc3RGYWN0b3J5OjpidWlsZCgpXCJdKTtcblxuICAgICAgICB2YXIgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHZhciBteVJlcSA9IG5ldyBHZW9jb2RlUmVxdWVzdFJFU1Qoc2V0dGluZ3MpO1xuICAgICAgICBpZiAoIW15UmVxLnByb2Nlc3NSZXF1ZXN0U3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIHByb2Nlc3MgcmVxdWVzdCAocmVzdCkgIVwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVxdWVzdCA9IG15UmVxLnJlcXVlc3RTdHJpbmc7XG5cbiAgICAgICAgbG9nZ2VyLnRyYWNlKHJlcXVlc3QpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlb2NvZGVSZXF1ZXN0RmFjdG9yeTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Request/GeocodeRequestFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Request/GeocodeRequestREST.js": +/*!************************************************************!*\ + !*** ./src/Services/Geocode/Request/GeocodeRequestREST.js ***! + \************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _model_GeocodeParamREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./model/GeocodeParamREST */ \"./src/Services/Geocode/Request/model/GeocodeParamREST.js\");\n\n\n\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Geocode.Request.GeocodeRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction GeocodeRequestREST(options) {\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"GeocodeRequestREST\");\n this.logger.trace(\"[Constructeur GeocodeRequestREST ()]\");\n if (!(this instanceof GeocodeRequestREST)) {\n throw new TypeError(\"GeocodeRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\nGeocodeRequestREST.prototype = {\n /**\n * @lends module:GeocodeRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString: null,\n /**\n * Constructeur (alias)\n */\n constructor: GeocodeRequestREST,\n /**\n * Construction de la requête.\n *\n * @returns {String} request\n */\n processRequestString: function processRequestString() {\n var request = \"\";\n\n // Mapping des options avec le service de l'API REST\n var oParams = new _model_GeocodeParamREST__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.settings);\n var params = oParams.getParams();\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n if (!this.settings.geocodeMethod || this.settings.geocodeMethod !== \"search\" && this.settings.geocodeMethod !== \"reverse\") {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n this.requestString = \"?\" + request;\n this.logger.trace(this.requestString);\n return this.requestString;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodeRequestREST);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JlcXVlc3QvR2VvY29kZVJlcXVlc3RSRVNULmpzP2Q1ZTciXSwibmFtZXMiOlsiR2VvY29kZVJlcXVlc3RSRVNUIiwib3B0aW9ucyIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwiVHlwZUVycm9yIiwiRXJyb3IiLCJfIiwiZ2V0TWVzc2FnZSIsInNldHRpbmdzIiwicHJvdG90eXBlIiwicmVxdWVzdFN0cmluZyIsImNvbnN0cnVjdG9yIiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJyZXF1ZXN0Iiwib1BhcmFtcyIsIkdlb2NvZGVQYXJhbVJFU1QiLCJwYXJhbXMiLCJnZXRQYXJhbXMiLCJpIiwibGVuZ3RoIiwibyIsImsiLCJ2IiwiZ2VvY29kZU1ldGhvZCJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBb0Q7QUFDSDtBQUNPOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLGtCQUFrQkEsQ0FBRUMsT0FBTyxFQUFFO0VBQ2xDLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7RUFDcEQsSUFBSSxDQUFDRixNQUFNLENBQUNHLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQztFQUV6RCxJQUFJLEVBQUUsSUFBSSxZQUFZTCxrQkFBa0IsQ0FBQyxFQUFFO0lBQ3ZDLE1BQU0sSUFBSU0sU0FBUyxDQUFDLGdFQUFnRSxDQUFDO0VBQ3pGOztFQUVBO0VBQ0EsSUFBSSxDQUFDTCxPQUFPLEVBQUU7SUFDVixNQUFNLElBQUlNLEtBQUssQ0FBQ0MsZ0VBQUMsQ0FBQ0MsVUFBVSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztFQUMzRDs7RUFFQTtFQUNBLElBQUksQ0FBQ0MsUUFBUSxHQUFHVCxPQUFPO0FBQzNCO0FBRUFELGtCQUFrQixDQUFDVyxTQUFTLEdBQUc7RUFFM0I7QUFDSjtBQUNBOztFQUVJO0FBQ0o7QUFDQTtBQUNBO0VBQ0lDLGFBQWEsRUFBRyxJQUFJO0VBRXBCO0FBQ0o7QUFDQTtFQUNJQyxXQUFXLEVBQUdiLGtCQUFrQjtFQUVoQztBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0ljLG9CQUFvQixFQUFHLFNBQXZCQSxvQkFBb0JBLENBQUEsRUFBZTtJQUMvQixJQUFJQyxPQUFPLEdBQUcsRUFBRTs7SUFFaEI7SUFDQSxJQUFNQyxPQUFPLEdBQUcsSUFBSUMsK0RBQWdCLENBQUMsSUFBSSxDQUFDUCxRQUFRLENBQUM7SUFFbkQsSUFBTVEsTUFBTSxHQUFHRixPQUFPLENBQUNHLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7TUFDcEMsSUFBSUUsQ0FBQyxHQUFHSixNQUFNLENBQUNFLENBQUMsQ0FBQztNQUNqQixJQUFJTCxPQUFPLEVBQUU7UUFDVEEsT0FBTyxJQUFJLEdBQUc7TUFDbEI7TUFDQUEsT0FBTyxJQUFJTyxDQUFDLENBQUNDLENBQUMsR0FBRyxHQUFHLEdBQUdELENBQUMsQ0FBQ0UsQ0FBQztJQUM5QjtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNkLFFBQVEsQ0FBQ2UsYUFBYSxJQUFLLElBQUksQ0FBQ2YsUUFBUSxDQUFDZSxhQUFhLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQ2YsUUFBUSxDQUFDZSxhQUFhLEtBQUssU0FBVSxFQUFFO01BQ3pILE1BQU0sSUFBSWxCLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztJQUNwRDtJQUVBLElBQUksQ0FBQ0ssYUFBYSxHQUFHLEdBQUcsR0FBR0csT0FBTztJQUNsQyxJQUFJLENBQUNiLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLElBQUksQ0FBQ08sYUFBYSxDQUFDO0lBRXJDLE9BQU8sSUFBSSxDQUFDQSxhQUFhO0VBQzdCO0FBQ0osQ0FBQztBQUVjWixpRkFBa0IiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvR2VvY29kZS9SZXF1ZXN0L0dlb2NvZGVSZXF1ZXN0UkVTVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBHZW9jb2RlUGFyYW1SRVNUIGZyb20gXCIuL21vZGVsL0dlb2NvZGVQYXJhbVJFU1RcIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBDbGFzc2UgZGUgZ2VzdGlvbiBkZXMgcmVxdcOqdGVzIGRlIHR5cGUgUkVTVCBzdXIgbGUgc2VydmljZSBkZSBjYWxjdWwgZCdpdGluZXJhaXJlXG4gKiAodW5pcXVlbWVudCBlbiBHRVQpXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuR2VvY29kZS5SZXF1ZXN0Lkdlb2NvZGVSZXF1ZXN0UkVTVFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIGRlZmluaWVzIGRhbnMgbGUgY29tcG9zYW50IFJvdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBvcHRpb25zID0ge1xuICogICAgICAoLi4uKVxuICogfTtcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBHZW9jb2RlUmVxdWVzdFJFU1QgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJHZW9jb2RlUmVxdWVzdFJFU1RcIik7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIEdlb2NvZGVSZXF1ZXN0UkVTVCAoKV1cIik7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VvY29kZVJlcXVlc3RSRVNUKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VvY29kZVJlcXVlc3RSRVNUIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgLy8gZXhpc3RhbmNlIGRlcyBvcHRpb25zXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9FTVBUWVwiLCBcIm9wdGlvbnNcIikpO1xuICAgIH1cblxuICAgIC8qKiBsaXN0ZSBkZXMgb3B0aW9ucyAqL1xuICAgIHRoaXMuc2V0dGluZ3MgPSBvcHRpb25zO1xufVxuXG5HZW9jb2RlUmVxdWVzdFJFU1QucHJvdG90eXBlID0ge1xuXG4gICAgLyoqXG4gICAgICogQGxlbmRzIG1vZHVsZTpHZW9jb2RlUmVxdWVzdFJFU1QjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiByZXF1ZXN0XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICByZXF1ZXN0U3RyaW5nIDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgOiBHZW9jb2RlUmVxdWVzdFJFU1QsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3Rpb24gZGUgbGEgcmVxdcOqdGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvY2Vzc1JlcXVlc3RTdHJpbmcgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0gXCJcIjtcblxuICAgICAgICAvLyBNYXBwaW5nIGRlcyBvcHRpb25zIGF2ZWMgbGUgc2VydmljZSBkZSBsJ0FQSSBSRVNUXG4gICAgICAgIGNvbnN0IG9QYXJhbXMgPSBuZXcgR2VvY29kZVBhcmFtUkVTVCh0aGlzLnNldHRpbmdzKTtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBvUGFyYW1zLmdldFBhcmFtcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG8gPSBwYXJhbXNbaV07XG4gICAgICAgICAgICBpZiAocmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QgKz0gXCImXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXF1ZXN0ICs9IG8uayArIFwiPVwiICsgby52O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmdlb2NvZGVNZXRob2QgfHwgKHRoaXMuc2V0dGluZ3MuZ2VvY29kZU1ldGhvZCAhPT0gXCJzZWFyY2hcIiAmJiB0aGlzLnNldHRpbmdzLmdlb2NvZGVNZXRob2QgIT09IFwicmV2ZXJzZVwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZ2VvY29kZU1ldGhvZCBub3QgdmFsaWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3RTdHJpbmcgPSBcIj9cIiArIHJlcXVlc3Q7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKHRoaXMucmVxdWVzdFN0cmluZyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFN0cmluZztcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBHZW9jb2RlUmVxdWVzdFJFU1Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Request/GeocodeRequestREST.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Request/model/GeocodeParamREST.js": +/*!****************************************************************!*\ + !*** ./src/Services/Geocode/Request/model/GeocodeParamREST.js ***! + \****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction GeocodeParamREST(options) {\n if (!(this instanceof GeocodeParamREST)) {\n throw new TypeError(\"GeocodeParamREST constructor cannot be called as a function.\");\n }\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur GeocodeParamREST ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // methode de geocodage\n if (!this.options.geocodeMethod || this.options.geocodeMethod !== \"search\" && this.options.geocodeMethod !== \"reverse\") {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n this.geocodeMethod = this.options.geocodeMethod;\n\n // mapping des options avec l'API REST\n this.query = typeof this.options !== \"undefined\" ? this.options.query : null;\n this.searchGeometry = this.options.searchGeometry || null;\n this.index = this.options.index || null;\n this.lon = this.options.position && this.options.position.lon ? this.options.position.lon : null;\n this.lat = this.options.position && this.options.position.lat ? this.options.position.lat : null;\n this.maxResp = this.options.maxResp || null;\n this.returnTrueGeometry = this.options.returnTrueGeometry || null;\n this.filters = this.options.filters || {};\n}\n\n/**\n * CLASSNAME\n */\nGeocodeParamREST.CLASSNAME = \"GeocodeParamREST\";\nGeocodeParamREST.prototype = {\n /**\n * @lends module:GeocodeParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor: GeocodeParamREST,\n /**\n * Retourne les filtres\n * @returns {String} les filtres\n */\n getFilters: function getFilters() {\n var filters = {};\n for (var prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n filters[prop] = this.filters[prop];\n }\n }\n return filters;\n },\n /**\n * Retourne l'index\n * @returns {String} l'index\n */\n getIndex: function getIndex() {\n if (this.index === undefined) {\n return null;\n }\n if (this.index === \"StreetAddress\") {\n return \"address\";\n } else if (this.index === \"CadastralParcel\") {\n return \"parcel\";\n } else if (this.index === \"PositionOfInterest\") {\n return \"poi\";\n } else if (this.index === \"location\") {\n return \"location\";\n }\n return this.index;\n },\n /**\n * Retourne la géométrie de recherche\n * @returns {String} la géométrie de recherche au format json\n */\n getSearchGeometry: function getSearchGeometry() {\n return JSON.stringify(this.searchGeometry);\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nGeocodeParamREST.prototype.getParams = function () {\n var map = [];\n if (this.geocodeMethod === \"search\") {\n map.push({\n k: \"q\",\n v: this.query\n });\n }\n if (this.index) {\n map.push({\n k: \"index\",\n v: this.getIndex()\n });\n }\n if (this.geocodeMethod === \"reverse\" && this.searchGeometry) {\n map.push({\n k: \"searchgeom\",\n v: this.getSearchGeometry()\n });\n }\n if (this.lon && this.lat) {\n map.push({\n k: \"lon\",\n v: this.lon\n });\n map.push({\n k: \"lat\",\n v: this.lat\n });\n }\n if (this.maxResp) {\n map.push({\n k: \"limit\",\n v: this.maxResp\n });\n }\n if (this.returnTrueGeometry) {\n map.push({\n k: \"returntruegeometry\",\n v: this.returnTrueGeometry\n });\n }\n var filters = this.getFilters();\n for (var key in filters) {\n map.push({\n k: key,\n v: filters[key]\n });\n }\n return map;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodeParamREST);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JlcXVlc3QvbW9kZWwvR2VvY29kZVBhcmFtUkVTVC5qcz83NDNiIl0sIm5hbWVzIjpbIkdlb2NvZGVQYXJhbVJFU1QiLCJvcHRpb25zIiwiVHlwZUVycm9yIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJnZW9jb2RlTWV0aG9kIiwiRXJyb3IiLCJxdWVyeSIsInNlYXJjaEdlb21ldHJ5IiwiaW5kZXgiLCJsb24iLCJwb3NpdGlvbiIsImxhdCIsIm1heFJlc3AiLCJyZXR1cm5UcnVlR2VvbWV0cnkiLCJmaWx0ZXJzIiwiQ0xBU1NOQU1FIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJnZXRGaWx0ZXJzIiwicHJvcCIsImhhc093blByb3BlcnR5IiwiZ2V0SW5kZXgiLCJ1bmRlZmluZWQiLCJnZXRTZWFyY2hHZW9tZXRyeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRQYXJhbXMiLCJtYXAiLCJwdXNoIiwiayIsInYiLCJrZXkiXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsZ0JBQWdCQSxDQUFFQyxPQUFPLEVBQUU7RUFDaEMsSUFBSSxFQUFFLElBQUksWUFBWUQsZ0JBQWdCLENBQUMsRUFBRTtJQUNyQyxNQUFNLElBQUlFLFNBQVMsQ0FBQyw4REFBOEQsQ0FBQztFQUN2RjtFQUVBLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztFQUNoQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLG9DQUFvQyxDQUFDOztFQUV2RDtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNMLE9BQU8sR0FBR0EsT0FBTyxJQUFJLENBQUMsQ0FBQzs7RUFFNUI7RUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDQSxPQUFPLENB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QUFDLEVBQUcsSUFBSSxDQUFDbkI7SUFDYixDQUFDLENBQUM7RUFDTjtFQUVBLElBQUksSUFBSSxDQUFDQyxPQUFPLEVBQUU7SUFDZGUsR0FBRyxDQUFDQyxJQUFJLENBQUM7TUFDTEMsQ0FBQyxFQUFHLE9BQU87TUFDWEMsQ0FBQyxFQUFHLElBQUksQ0FBQ2xCO0lBQ2IsQ0FBQyxDQUFDO0VBQ047RUFFQSxJQUFJLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7SUFDekJjLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO01BQ0xDLENBQUMsRUFBRyxvQkFBb0I7TUFDeEJDLENBQUMsRUFBRyxJQUFJLENBQUNqQjtJQUNiLENBQUMsQ0FBQztFQUNOO0VBRUEsSUFBTUMsT0FBTyxHQUFHLElBQUksQ0FBQ0ksVUFBVSxDQUFDLENBQUM7RUFDakMsS0FBSyxJQUFJYSxHQUFHLElBQUlqQixPQUFPLEVBQUU7SUFDckJhLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO01BQ0xDLENBQUMsRUFBR0UsR0FBRztNQUNQRCxDQUFDLEVBQUdoQixPQUFPLENBQUNpQixHQUFHO0lBQ25CLENBQUMsQ0FBQztFQUNOO0VBRUEsT0FBT0osR0FBRztBQUNkLENBQUM7QUFFYzlCLCtFQUFnQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JlcXVlc3QvbW9kZWwvR2VvY29kZVBhcmFtUkVTVC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICogQ2xhc3NlIGRlIGdlc3Rpb24gZGVzIHBhcmFtLiBkZXMgcmVxdcOqdGVzIGR1IHNlcnZpY2UgZGUgY2FsY3VsIGQnaXRpbmVyYWlyZSAoUkVTVCkuXG4gKiAgICAgIFBlcm1ldCBsZSBtYXBwaW5nIGF2ZWMgbGVzIG9wdGlvbnMgZHUgc2VydmljZS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIEdwLlNlcnZpY2VzLlJvdXRlLlJlcXVlc3QuUm91dGVQYXJhbVJFU1RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9uc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEdlb2NvZGVQYXJhbVJFU1QgKG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VvY29kZVBhcmFtUkVTVCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlb2NvZGVQYXJhbVJFU1QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShcIltDb25zdHJ1Y3RldXIgR2VvY29kZVBhcmFtUkVTVCAoKV1cIik7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGVuIHBhcmFtw6p0cmVzIGR1IGNvbnN0cnVjdGV1ci5cbiAgICAgKi9cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gbWV0aG9kZSBkZSBnZW9jb2RhZ2VcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5nZW9jb2RlTWV0aG9kIHx8ICh0aGlzLm9wdGlvbnMuZ2VvY29kZU1ldGhvZCAhPT0gXCJzZWFyY2hcIiAmJiB0aGlzLm9wdGlvbnMuZ2VvY29kZU1ldGhvZCAhPT0gXCJyZXZlcnNlXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGdlb2NvZGVNZXRob2Qgbm90IHZhbGlkXCIpO1xuICAgIH1cbiAgICB0aGlzLmdlb2NvZGVNZXRob2QgPSB0aGlzLm9wdGlvbnMuZ2VvY29kZU1ldGhvZDtcblxuICAgIC8vIG1hcHBpbmcgZGVzIG9wdGlvbnMgYXZlYyBsJ0FQSSBSRVNUXG4gICAgdGhpcy5xdWVyeSA9ICh0eXBlb2YgdGhpcy5vcHRpb25zICE9PSBcInVuZGVmaW5lZFwiKSA/IHRoaXMub3B0aW9ucy5xdWVyeSA6IG51bGw7XG5cbiAgICB0aGlzLnNlYXJjaEdlb21ldHJ5ID0gdGhpcy5vcHRpb25zLnNlYXJjaEdlb21ldHJ5IHx8IG51bGw7XG5cbiAgICB0aGlzLmluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4IHx8IG51bGw7XG5cbiAgICB0aGlzLmxvbiA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbiAmJiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubG9uID8gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxvbiA6IG51bGw7XG5cbiAgICB0aGlzLmxhdCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbiAmJiB0aGlzLm9wdGlvbnMucG9zaXRpb24ubGF0ID8gdGhpcy5vcHRpb25zLnBvc2l0aW9uLmxhdCA6IG51bGw7XG5cbiAgICB0aGlzLm1heFJlc3AgPSB0aGlzLm9wdGlvbnMubWF4UmVzcCB8fCBudWxsO1xuXG4gICAgdGhpcy5yZXR1cm5UcnVlR2VvbWV0cnkgPSB0aGlzLm9wdGlvbnMucmV0dXJuVHJ1ZUdlb21ldHJ5IHx8IG51bGw7XG5cbiAgICB0aGlzLmZpbHRlcnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVycyB8fCB7fTtcbn1cblxuLyoqXG4gKiBDTEFTU05BTUVcbiAqL1xuR2VvY29kZVBhcmFtUkVTVC5DTEFTU05BTUUgPSBcIkdlb2NvZGVQYXJhbVJFU1RcIjtcblxuR2VvY29kZVBhcmFtUkVTVC5wcm90b3R5cGUgPSB7XG5cbiAgICAvKipcbiAgICAgKiBAbGVuZHMgbW9kdWxlOkdlb2NvZGVQYXJhbVJFU1QjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIDogR2VvY29kZVBhcmFtUkVTVCxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIGxlcyBmaWx0cmVzXG4gICAgICogQHJldHVybnMge1N0cmluZ30gbGVzIGZpbHRyZXNcbiAgICAgKi9cbiAgICBnZXRGaWx0ZXJzIDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZmlsdGVycyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuZmlsdGVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnNbcHJvcF0gPSB0aGlzLmZpbHRlcnNbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIGwnaW5kZXhcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBsJ2luZGV4XG4gICAgICovXG4gICAgZ2V0SW5kZXggOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBcIlN0cmVldEFkZHJlc3NcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiYWRkcmVzc1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IFwiQ2FkYXN0cmFsUGFyY2VsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcInBhcmNlbFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IFwiUG9zaXRpb25PZkludGVyZXN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBcInBvaVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IFwibG9jYXRpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwibG9jYXRpb25cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0b3VybmUgbGEgZ8Opb23DqXRyaWUgZGUgcmVjaGVyY2hlXG4gICAgICogQHJldHVybnMge1N0cmluZ30gbGEgZ8Opb23DqXRyaWUgZGUgcmVjaGVyY2hlIGF1IGZvcm1hdCBqc29uXG4gICAgICovXG4gICAgZ2V0U2VhcmNoR2VvbWV0cnkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaEdlb21ldHJ5KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRhYmxlYXUgZGUgY2xlZnMvdmFsZXVycyBwb3VyIHBhcmFtLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX0gbGlzdGUgZGUgcGFyYW3DqnRyZXNcbiAqL1xuR2VvY29kZVBhcmFtUkVTVC5wcm90b3R5cGUuZ2V0UGFyYW1zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtYXAgPSBbXTtcblxuICAgIGlmICh0aGlzLmdlb2NvZGVNZXRob2QgPT09IFwic2VhcmNoXCIpIHtcbiAgICAgICAgbWFwLnB1c2goe1xuICAgICAgICAgICAgayA6IFwicVwiLFxuICAgICAgICAgICAgdiA6IHRoaXMucXVlcnlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgICAgbWFwLnB1c2goe1xuICAgICAgICAgICAgayA6IFwiaW5kZXhcIixcbiAgICAgICAgICAgIHYgOiB0aGlzLmdldEluZGV4KClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2VvY29kZU1ldGhvZCA9PT0gXCJyZXZlcnNlXCIgJiYgdGhpcy5zZWFyY2hHZW9tZXRyeSkge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJzZWFyY2hnZW9tXCIsXG4gICAgICAgICAgICB2IDogdGhpcy5nZXRTZWFyY2hHZW9tZXRyeSgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvbiAmJiB0aGlzLmxhdCkge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJsb25cIixcbiAgICAgICAgICAgIHYgOiB0aGlzLmxvblxuICAgICAgICB9KTtcbiAgICAgICAgbWFwLnB1c2goe1xuICAgICAgICAgICAgayA6IFwibGF0XCIsXG4gICAgICAgICAgICB2IDogdGhpcy5sYXRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4UmVzcCkge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJsaW1pdFwiLFxuICAgICAgICAgICAgdiA6IHRoaXMubWF4UmVzcFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXR1cm5UcnVlR2VvbWV0cnkpIHtcbiAgICAgICAgbWFwLnB1c2goe1xuICAgICAgICAgICAgayA6IFwicmV0dXJudHJ1ZWdlb21ldHJ5XCIsXG4gICAgICAgICAgICB2IDogdGhpcy5yZXR1cm5UcnVlR2VvbWV0cnlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVycygpO1xuICAgIGZvciAodmFyIGtleSBpbiBmaWx0ZXJzKSB7XG4gICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICAgIGsgOiBrZXksXG4gICAgICAgICAgICB2IDogZmlsdGVyc1trZXldXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBHZW9jb2RlUGFyYW1SRVNUO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Request/model/GeocodeParamREST.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Response/GeocodeResponseFactory.js": +/*!*****************************************************************!*\ + !*** ./src/Services/Geocode/Response/GeocodeResponseFactory.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Formats_GeocodeResponseParser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Formats/GeocodeResponseParser */ \"./src/Services/Geocode/Formats/GeocodeResponseParser.js\");\n/**\n * Factory pour générer une reponse JSON à partir d'un XML\n * (Factory)\n *\n * @module GeocodeResponseFactory\n * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory\n * @private\n */\n// import Logger from \"../../../Utils/LoggerByDefault\";\n\n\n\nvar GeocodeReponseFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * response :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build: function build(options) {\n // data de type GeocodeResponse\n var data = null;\n if (options.response) {\n if (options.rawResponse) {\n data = options.response;\n } else {\n try {\n var parser = new _Formats_GeocodeResponseParser__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n data = parser.parse(options.response);\n if (!data) {\n throw new Error(\"L'analyse de la réponse du service !?\");\n }\n } catch (e) {\n var message = e.message;\n if (typeof options.response === \"string\") {\n message += \"('\" + options.response + \"')\";\n } else {\n message += \"('\" + options.response.documentElement.innerHTML + \"')\";\n }\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_ANALYSE\", message),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__[\"default\"].TYPE_UNKERR,\n status: -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__[\"default\"].TYPE_SRVERR,\n status: 200 // FIXME : 200 ?\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\"),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__[\"default\"].TYPE_SRVERR,\n status: -1 // FIXME : status response\n }));\n return;\n }\n options.onSuccess.call(options.scope, data);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodeReponseFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1Jlc3BvbnNlL0dlb2NvZGVSZXNwb25zZUZhY3RvcnkuanM/MDJjOCJdLCJuYW1lcyI6WyJHZW9jb2RlUmVwb25zZUZhY3RvcnkiLCJidWlsZCIsIm9wdGlvbnMiLCJkYXRhIiwicmVzcG9uc2UiLCJyYXdSZXNwb25zZSIsInBhcnNlciIsIkdlb2NvZGVSZXNwb25zZVBhcnNlciIsInBhcnNlIiwiRXJyb3IiLCJlIiwibWVzc2FnZSIsImRvY3VtZW50RWxlbWVudCIsImlubmVySFRNTCIsIm9uRXJyb3IiLCJjYWxsIiwic2NvcGUiLCJFcnJvclNlcnZpY2UiLCJNUmVzIiwiZ2V0TWVzc2FnZSIsInR5cGUiLCJUWVBFX1VOS0VSUiIsInN0YXR1cyIsImV4Y2VwdGlvblJlcG9ydCIsIlRZUEVfU1JWRVJSIiwib25TdWNjZXNzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUM0RDtBQUNSO0FBQ2lCO0FBRXJFLElBQUlBLHFCQUFxQixHQUFHO0VBRXhCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsS0FBSyxFQUFHLFNBQVJBLEtBQUtBLENBQWFDLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUlDLElBQUksR0FBRyxJQUFJO0lBRWYsSUFBSUQsT0FBTyxDQUFDRSxRQUFRLEVBQUU7TUFDbEIsSUFBSUYsT0FBTyxDQUFDRyxXQUFXLEVBQUU7UUFDckJGLElBQUksR0FBR0QsT0FBTyxDQUFDRSxRQUFRO01BQzNCLENBQUMsTUFBTTtRQUNILElBQUk7VUFDQSxJQUFNRSxNQUFNLEdBQUcsSUFBSUMsc0VBQXFCLENBQUMsQ0FBQztVQUMxQ0osSUFBSSxHQUFHRyxNQUFNLENBQUNFLEtBQUssQ0FBQ04sT0FBTyxDQUFDRSxRQUFRLENBQUM7VUFFckMsSUFBSSxDQUFDRCxJQUFJLEVBQUU7WUFDUCxNQUFNLElBQUlNLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztVQUM1RDtRQUNKLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7VUFDUixJQUFJQyxPQUFPLEdBQUdELENBQUMsQ0FBQ0MsT0FBTztVQUN2QixJQUFJLE9BQU9ULE9BQU8sQ0FBQ0UsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUN0Q08sT0FBTyxJQUFJLElBQUksR0FBR1QsT0FBTyxDQUFDRSxRQUFRLEdBQUcsSUFBSTtVQUM3QyxDQUFDLE1BQU07WUFDSE8sT0FBTyxJQUFJLElBQUksR0FBR1QsT0FBTyxDQUFDRSxRQUFRLENBQUNRLGVBQWUsQ0FBQ0MsU0FBUyxHQUFHLElBQUk7VUFDdkU7VUFDQVgsT0FBTyxDQUFDWSxPQUFPLENBQUNDLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUUsSUFBSUMsZ0VBQVksQ0FBQztZQUNqRE4sT0FBTyxFQUFHTyxnRUFBSSxDQUFDQyxVQUFVLENBQUMsMEJBQTBCLEVBQUVSLE9BQU8sQ0FBQztZQUM5RFMsSUFBSSxFQUFHSCxnRUFBWSxDQUFDSSxXQUFXO1lBQy9CQyxNQUFNLEVBQUcsQ0FBQztVQUNkLENBQUMsQ0FBQyxDQUFDO1VBQ0g7UUFDSjs7UUFFQTtRQUNBLElBQUluQixJQUFJLENBQUNvQixlQUFlLEVBQUU7VUFDdEJyQixPQUFPLENBQUNZLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDYixPQUFPLENBQUNjLEtBQUssRUFBRSxJQUFJQyxnRUFBWSxDQUFDO1lBQ2pETixPQUFPLEVBQUdPLGdFQUFJLENBQUNDLFVBQVUsQ0FBQyw0QkFBNEIsRUFBRWhCLElBQUksQ0FBQ29CLGVBQWUsQ0FBQztZQUM3RUgsSUFBSSxFQUFHSCxnRUFBWSxDQUFDTyxXQUFXO1lBQy9CRixNQUFNLEVBQUcsR0FBRyxDQUFDO1VBQ2pCLENBQUMsQ0FBQyxDQUFDO1VBQ0g7UUFDSjtNQUNKO0lBQ0osQ0FBQyxNQUFNO01BQ0hwQixPQUFPLENBQUNZLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDYixPQUFPLENBQUNjLEtBQUssRUFBRSxJQUFJQyxnRUFBWSxDQUFDO1FBQ2pETixPQUFPLEVBQUdPLGdFQUFJLENBQUNDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztRQUNuREMsSUFBSSxFQUFHSCxnRUFBWSxDQUFDTyxXQUFXO1FBQy9CRixNQUFNLEVBQUcsQ0FBQyxDQUFDLENBQUM7TUFDaEIsQ0FBQyxDQUFDLENBQUM7TUFDSDtJQUNKO0lBRUFwQixPQUFPLENBQUN1QixTQUFTLENBQUNWLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUViLElBQUksQ0FBQztFQUMvQztBQUNKLENBQUM7QUFFY0gsb0ZBQXFCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0dlb2NvZGUvUmVzcG9uc2UvR2VvY29kZVJlc3BvbnNlRmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmFjdG9yeSBwb3VyIGfDqW7DqXJlciB1bmUgcmVwb25zZSBKU09OIMOgIHBhcnRpciBkJ3VuIFhNTFxuICogKEZhY3RvcnkpXG4gKlxuICogQG1vZHVsZSBHZW9jb2RlUmVzcG9uc2VGYWN0b3J5XG4gKiBAYWxpYXMgR3AuU2VydmljZXMuR2VvY29kZS5SZXNwb25zZS5HZW9jb2RlUmVzcG9uc2VGYWN0b3J5XG4gKiBAcHJpdmF0ZVxuICovXG4vLyBpbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uLy4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgTVJlcyBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBHZW9jb2RlUmVzcG9uc2VQYXJzZXIgZnJvbSBcIi4uL0Zvcm1hdHMvR2VvY29kZVJlc3BvbnNlUGFyc2VyXCI7XG5cbnZhciBHZW9jb2RlUmVwb25zZUZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBHZW9jb2RlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICogICAgICByZXNwb25zZSA6XG4gICAgICogICAgICByYXdSZXNwb25zZSA6XG4gICAgICogICAgICBzY29wZSA6XG4gICAgICogICAgICBvblN1Y2Nlc3MgOlxuICAgICAqICAgICAgb25FcnJvciA6XG4gICAgICogICB9O1xuICAgICAqXG4gICAgICovXG4gICAgYnVpbGQgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBkYXRhIGRlIHR5cGUgR2VvY29kZVJlc3BvbnNlXG4gICAgICAgIHZhciBkYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAob3B0aW9ucy5yZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IEdlb2NvZGVSZXNwb25zZVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGFyc2VyLnBhcnNlKG9wdGlvbnMucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTCdhbmFseXNlIGRlIGxhIHLDqXBvbnNlIGR1IHNlcnZpY2UgIT9cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVzcG9uc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gXCIoJ1wiICsgb3B0aW9ucy5yZXNwb25zZSArIFwiJylcIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gXCIoJ1wiICsgb3B0aW9ucy5yZXNwb25zZS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MICsgXCInKVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6IE1SZXMuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfQU5BTFlTRVwiLCBtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiBFcnJvclNlcnZpY2UuVFlQRV9VTktFUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgOiAtMVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaSBsYSByw6lwb25zZSBjb250ZW5haXQgdW5lIGV4Y2VwdGlvbiByZW52b3nDqWUgcGFyIGxlIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5leGNlcHRpb25SZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FWENFUFRJT05cIiwgZGF0YS5leGNlcHRpb25SZXBvcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA6IEVycm9yU2VydmljZS5UWVBFX1NSVkVSUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IDIwMCAvLyBGSVhNRSA6IDIwMCA/XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2Uoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiBNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VNUFRZXCIpLFxuICAgICAgICAgICAgICAgIHR5cGUgOiBFcnJvclNlcnZpY2UuVFlQRV9TUlZFUlIsXG4gICAgICAgICAgICAgICAgc3RhdHVzIDogLTEgLy8gRklYTUUgOiBzdGF0dXMgcmVzcG9uc2VcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMub25TdWNjZXNzLmNhbGwob3B0aW9ucy5zY29wZSwgZGF0YSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgR2VvY29kZVJlcG9uc2VGYWN0b3J5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Response/GeocodeResponseFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Response/model/GeocodeResponse.js": +/*!****************************************************************!*\ + !*** ./src/Services/Geocode/Response/model/GeocodeResponse.js ***! + \****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Response object for {@link module:Services~geocode Gp.Services.geocode ()} or {@link module:Services~reverseGeocode Gp.Services.reverseGeocode ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} locations - locations array.\n *\n * @namespace\n * @alias Gp.Services.GeocodeResponse\n */\nfunction GeocodeResponse() {\n if (!(this instanceof GeocodeResponse)) {\n throw new TypeError(\"GeocodeResponse constructor cannot be called as a function.\");\n }\n this.locations = [];\n}\nGeocodeResponse.prototype = {\n constructor: GeocodeResponse\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodeResponse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1Jlc3BvbnNlL21vZGVsL0dlb2NvZGVSZXNwb25zZS5qcz81OTdkIl0sIm5hbWVzIjpbIkdlb2NvZGVSZXNwb25zZSIsIlR5cGVFcnJvciIsImxvY2F0aW9ucyIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxlQUFlQSxDQUFBLEVBQUk7RUFDeEIsSUFBSSxFQUFFLElBQUksWUFBWUEsZUFBZSxDQUFDLEVBQUU7SUFDcEMsTUFBTSxJQUFJQyxTQUFTLENBQUMsNkRBQTZELENBQUM7RUFDdEY7RUFFQSxJQUFJLENBQUNDLFNBQVMsR0FBRyxFQUFFO0FBQ3ZCO0FBRUFGLGVBQWUsQ0FBQ0csU0FBUyxHQUFHO0VBRXhCQyxXQUFXLEVBQUdKO0FBRWxCLENBQUM7QUFFY0EsOEVBQWUiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvR2VvY29kZS9SZXNwb25zZS9tb2RlbC9HZW9jb2RlUmVzcG9uc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogUmVzcG9uc2Ugb2JqZWN0IGZvciB7QGxpbmsgbW9kdWxlOlNlcnZpY2Vzfmdlb2NvZGUgR3AuU2VydmljZXMuZ2VvY29kZSAoKX0gb3Ige0BsaW5rIG1vZHVsZTpTZXJ2aWNlc35yZXZlcnNlR2VvY29kZSBHcC5TZXJ2aWNlcy5yZXZlcnNlR2VvY29kZSAoKX0gaW52b2NhdGlvbiB3aGVuIHN1Y2Nlc3NmdWwuIFJlY2VpdmVkIGFzIHRoZSBhcmd1bWVudCBvZiBvblN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogQHByb3BlcnR5IHtBcnJheS48R3AuU2VydmljZXMuR2VvY29kZS5HZW9jb2RlZExvY2F0aW9uPn0gbG9jYXRpb25zIC0gbG9jYXRpb25zIGFycmF5LlxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5HZW9jb2RlUmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gR2VvY29kZVJlc3BvbnNlICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VvY29kZVJlc3BvbnNlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VvY29kZVJlc3BvbnNlIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5sb2NhdGlvbnMgPSBbXTtcbn1cblxuR2VvY29kZVJlc3BvbnNlLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yIDogR2VvY29kZVJlc3BvbnNlXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlb2NvZGVSZXNwb25zZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Response/model/GeocodeResponse.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/Response/model/GeocodedLocation.js": +/*!*****************************************************************!*\ + !*** ./src/Services/Geocode/Response/model/GeocodedLocation.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Single location object returned by the underlying geocoding web service.\n *\n * @property {Gp.Point} position - Position of the location given in the requested coordinates system.\n * @property {String} type - location type \"StreetAddress\" (for an address), \"PositionOfInterest\" (for a place name) or \"CadastralParcel\" (for cadastral parcel).\n * @property {String} matchType - how geocoding is performed : \"street number\" (exact address), \"street enhanced\" (street number calculated by interpolation), \"street\" (only the street), \"city\" (only the city).\n * @property {Float} accuracy - Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match).\n * @property {Object} placeAttributes - Associative array matching the following attributes with their values given by the underlying web service :\n *\n * *Common attributes : *\n *\n * - **trueGeometry** - the 'real life' geometry if different from 'Point' type.\n *\n * *if type === \"StreetAddress\" :*\n *\n * - **number** - Street number.\n * - **postalCode** - PostCode\n * - **street** - Street name\n * - **city** - City\n * - **houseNumberInfos** - additional street number information\n * - **inseeCode** - INSEE Code\n *\n *\n * *if type === \"PositionOfInterest\" :*\n *\n * - **type** - Place name type\n * - **postalCode** - PostCode\n * - **toponyme** - Toponyme\n * - **extraFields** - additional place name properties\n * - **inseeCode** - INSEE Code\n *\n *\n * *si type = \"CadastralParcel\" :*\n *\n * - **codeCommuneAbs** - when a parcel comes from a city that was absorbed by another, code of that old city. \"000\" otherwise.\n * - **codeArrondissement** - arrondissement\n * - **identifiant** - cadastral parcel code\n * - **feuille** - Parcel Sheet (eg. \"1\").\n * - **numero** - Parcel Number (eg. \"0041\")\n * - **section** - Parcel Section (eg. \"0D\").\n * - **nomCommune** - Parcel municipality name.\n * - **codeCommune** - Parcel municipality.\n * - **codeDepartement** - Parcel Department.\n *\n * @namespace\n * @alias Gp.Services.Geocode.GeocodedLocation\n */\nfunction GeocodedLocation() {\n if (!(this instanceof GeocodedLocation)) {\n throw new TypeError(\"GeocodedLocation constructor cannot be called as a function.\");\n }\n this.position = null;\n this.matchType = null;\n this.placeAttributes = {};\n this.type = null;\n this.accuracy = null;\n\n /**\n * Nom de la classe : \"GeocodedLocation\"\n * @type {String}\n */\n this.CLASSNAME = \"GeocodedLocation\";\n}\nGeocodedLocation.prototype = {\n constructor: GeocodedLocation\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GeocodedLocation);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1Jlc3BvbnNlL21vZGVsL0dlb2NvZGVkTG9jYXRpb24uanM/ZThjNCJdLCJuYW1lcyI6WyJHZW9jb2RlZExvY2F0aW9uIiwiVHlwZUVycm9yIiwicG9zaXRpb24iLCJtYXRjaFR5cGUiLCJwbGFjZUF0dHJpYnV0ZXMiLCJ0eXBlIiwiYWNjdXJhY3kiLCJDTEFTU05BTUUiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsZ0JBQWdCQSxDQUFBLEVBQUk7RUFDekIsSUFBSSxFQUFFLElBQUksWUFBWUEsZ0JBQWdCLENBQUMsRUFBRTtJQUNyQyxNQUFNLElBQUlDLFNBQVMsQ0FBQyw4REFBOEQsQ0FBQztFQUN2RjtFQUVBLElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUk7RUFFcEIsSUFBSSxDQUFDQyxTQUFTLEdBQUcsSUFBSTtFQUVyQixJQUFJLENBQUNDLGVBQWUsR0FBRyxDQUFDLENBQUM7RUFFekIsSUFBSSxDQUFDQyxJQUFJLEdBQUcsSUFBSTtFQUVoQixJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJOztFQUVwQjtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUksQ0FBQ0MsU0FBUyxHQUFHLGtCQUFrQjtBQUN2QztBQUVBUCxnQkFBZ0IsQ0FBQ1EsU0FBUyxHQUFHO0VBRXpCQyxXQUFXLEVBQUdUO0FBRWxCLENBQUM7QUFFY0EsK0VBQWdCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL0dlb2NvZGUvUmVzcG9uc2UvbW9kZWwvR2VvY29kZWRMb2NhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBTaW5nbGUgbG9jYXRpb24gb2JqZWN0IHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIGdlb2NvZGluZyB3ZWIgc2VydmljZS5cbiAqXG4gKiBAcHJvcGVydHkge0dwLlBvaW50fSBwb3NpdGlvbiAtIFBvc2l0aW9uIG9mIHRoZSBsb2NhdGlvbiBnaXZlbiBpbiB0aGUgcmVxdWVzdGVkIGNvb3JkaW5hdGVzIHN5c3RlbS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0eXBlIC0gbG9jYXRpb24gdHlwZSBcIlN0cmVldEFkZHJlc3NcIiAoZm9yIGFuIGFkZHJlc3MpLCBcIlBvc2l0aW9uT2ZJbnRlcmVzdFwiIChmb3IgYSBwbGFjZSBuYW1lKSBvciBcIkNhZGFzdHJhbFBhcmNlbFwiIChmb3IgY2FkYXN0cmFsIHBhcmNlbCkuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWF0Y2hUeXBlIC0gaG93IGdlb2NvZGluZyBpcyBwZXJmb3JtZWQgOiBcInN0cmVldCBudW1iZXJcIiAoZXhhY3QgYWRkcmVzcyksIFwic3RyZWV0IGVuaGFuY2VkXCIgKHN0cmVldCBudW1iZXIgY2FsY3VsYXRlZCBieSBpbnRlcnBvbGF0aW9uKSwgXCJzdHJlZXRcIiAob25seSB0aGUgc3RyZWV0KSwgXCJjaXR5XCIgKG9ubHkgdGhlIGNpdHkpLlxuICogQHByb3BlcnR5IHtGbG9hdH0gYWNjdXJhY3kgLSBBY2N1cmFjeSBvZiB0aGUgcmVzcG9uc2UgdG93YXJkcyB0aGUgcmVxdWVzdGVkIGxvY2F0aW9uIGJldHdlZW4gMCAodW5hY2N1cmF0ZSkgYW5kIDEgKGV4YWN0IG1hdGNoKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwbGFjZUF0dHJpYnV0ZXMgLSBBc3NvY2lhdGl2ZSBhcnJheSBtYXRjaGluZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgd2l0aCB0aGVpciB2YWx1ZXMgZ2l2ZW4gYnkgdGhlIHVuZGVybHlpbmcgd2ViIHNlcnZpY2UgOlxuICpcbiAqICpDb21tb24gYXR0cmlidXRlcyA6ICpcbiAqXG4gKiAtICoqdHJ1ZUdlb21ldHJ5KiogLSB0aGUgJ3JlYWwgbGlmZScgZ2VvbWV0cnkgaWYgZGlmZmVyZW50IGZyb20gJ1BvaW50JyB0eXBlLlxuICpcbiAqICppZiB0eXBlID09PSBcIlN0cmVldEFkZHJlc3NcIiA6KlxuICpcbiAqIC0gKipudW1iZXIqKiAtIFN0cmVldCBudW1iZXIuXG4gKiAtICoqcG9zdGFsQ29kZSoqIC0gUG9zdENvZGVcbiAqIC0gKipzdHJlZXQqKiAtIFN0cmVldCBuYW1lXG4gKiAtICoqY2l0eSoqIC0gQ2l0eVxuICogLSAqKmhvdXNlTnVtYmVySW5mb3MqKiAtIGFkZGl0aW9uYWwgc3RyZWV0IG51bWJlciBpbmZvcm1hdGlvblxuICogLSAqKmluc2VlQ29kZSoqIC0gSU5TRUUgQ29kZVxuICpcbiAqXG4gKiAqaWYgdHlwZSA9PT0gXCJQb3NpdGlvbk9mSW50ZXJlc3RcIiA6KlxuICpcbiAqIC0gKip0eXBlKiogLSBQbGFjZSBuYW1lIHR5cGVcbiAqIC0gKipwb3N0YWxDb2RlKiogLSBQb3N0Q29kZVxuICogLSAqKnRvcG9ueW1lKiogLSBUb3BvbnltZVxuICogLSAqKmV4dHJhRmllbGRzKiogLSBhZGRpdGlvbmFsIHBsYWNlIG5hbWUgcHJvcGVydGllc1xuICogLSAqKmluc2VlQ29kZSoqIC0gSU5TRUUgQ29kZVxuICpcbiAqXG4gKiAqc2kgdHlwZSA9IFwiQ2FkYXN0cmFsUGFyY2VsXCIgOipcbiAqXG4gKiAtICoqY29kZUNvbW11bmVBYnMqKiAtIHdoZW4gYSBwYXJjZWwgY29tZXMgZnJvbSBhIGNpdHkgdGhhdCB3YXMgYWJzb3JiZWQgYnkgYW5vdGhlciwgY29kZSBvZiB0aGF0IG9sZCBjaXR5LiBcIjAwMFwiIG90aGVyd2lzZS5cbiAqIC0gKipjb2RlQXJyb25kaXNzZW1lbnQqKiAtIGFycm9uZGlzc2VtZW50XG4gKiAtICoqaWRlbnRpZmlhbnQqKiAtIGNhZGFzdHJhbCBwYXJjZWwgY29kZVxuICogLSAqKmZldWlsbGUqKiAtIFBhcmNlbCBTaGVldCAoZWcuIFwiMVwiKS5cbiAqIC0gKipudW1lcm8qKiAtIFBhcmNlbCBOdW1iZXIgKGVnLiBcIjAwNDFcIilcbiAqIC0gKipzZWN0aW9uKiogLSBQYXJjZWwgU2VjdGlvbiAoZWcuIFwiMERcIikuXG4gKiAtICoqbm9tQ29tbXVuZSoqIC0gUGFyY2VsIG11bmljaXBhbGl0eSBuYW1lLlxuICogLSAqKmNvZGVDb21tdW5lKiogLSBQYXJjZWwgbXVuaWNpcGFsaXR5LlxuICogLSAqKmNvZGVEZXBhcnRlbWVudCoqIC0gUGFyY2VsIERlcGFydG1lbnQuXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLkdlb2NvZGUuR2VvY29kZWRMb2NhdGlvblxuICovXG5mdW5jdGlvbiBHZW9jb2RlZExvY2F0aW9uICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR2VvY29kZWRMb2NhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlb2NvZGVkTG9jYXRpb24gY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcblxuICAgIHRoaXMubWF0Y2hUeXBlID0gbnVsbDtcblxuICAgIHRoaXMucGxhY2VBdHRyaWJ1dGVzID0ge307XG5cbiAgICB0aGlzLnR5cGUgPSBudWxsO1xuXG4gICAgdGhpcy5hY2N1cmFjeSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBOb20gZGUgbGEgY2xhc3NlIDogXCJHZW9jb2RlZExvY2F0aW9uXCJcbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuQ0xBU1NOQU1FID0gXCJHZW9jb2RlZExvY2F0aW9uXCI7XG59XG5cbkdlb2NvZGVkTG9jYXRpb24ucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3IgOiBHZW9jb2RlZExvY2F0aW9uXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlb2NvZGVkTG9jYXRpb247XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Geocode/Response/model/GeocodedLocation.js\n"); + +/***/ }), + +/***/ "./src/Services/Geocode/ReverseGeocode.js": +/*!************************************************!*\ + !*** ./src/Services/Geocode/ReverseGeocode.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Request/GeocodeRequestFactory */ \"./src/Services/Geocode/Request/GeocodeRequestFactory.js\");\n/* harmony import */ var _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Response/GeocodeResponseFactory */ \"./src/Services/Geocode/Response/GeocodeResponseFactory.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n\n\n\n\n\n\n\n\n/**\n * @classdesc\n * Appel du service de géocodage inverse du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ReverseGeocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet.\n * @param {String} [options.filters.[proprietes du filtre]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {Object} [options.searchGeometry] - Emprise dans laquelle on souhaite effectuer la recherche.\n * Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} options.searchGeometry.type - Type de géometrie (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordonnées des points constituant la géométrie.\n * @param {Float} options.searchGeometry.radius - Rayon. Paramètre applicable uniquement pour le type 'Circle'.\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche\n * multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s.\n *\n * @param {Boolean} [options.returnTrueGeometry] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * index : 'StreetAddress',\n * searchGeometry : {\n * type : Circle,\n * coordinates : [48, 2],\n * radius : 100\n * },\n * position : {lon:2 , lat:48.5},\n * maximumResponses : 25,\n * };\n *\n */\nfunction ReverseGeocode(options_) {\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"ReverseGeocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ReverseGeocode\";\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"Gp.Services.ReverseGeocode\");\n this.logger.trace(\"[Constructeur ReverseGeocode (options)]\");\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].ReverseGeocode.newUrl();\n }\n\n // appel du constructeur par heritage\n _CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].apply(this, [options]);\n if (!options.searchGeometry) {\n if (!options.position) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"searchGeometry\"));\n }\n } else {\n this.options.searchGeometry = options.searchGeometry;\n }\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" || _typeof(options.filters[key]) === \"object\" && Object.keys(options.filters[key]).length === 0 || typeof options.filters[key] === \"string\" && options.filters[key].length === 0 || Array.isArray(options.filters[key]) && options.filters[key].length === 0) {\n delete this.options.filters[key];\n }\n }\n }\n this.options.position = options.position;\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:ReverseGeocode#\n */\nReverseGeocode.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nReverseGeocode.prototype.constructor = ReverseGeocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nReverseGeocode.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filterOptions.type) && options.filterOptions.type.length > 0) {\n options.index = options.filterOptions.type[0];\n } else {\n options.index = options.filterOptions.type;\n }\n }\n delete options.filterOptions.type;\n }\n if (options.filterOptions.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.bbox2Json(options.filterOptions.bbox);\n }\n delete options.filterOptions.bbox;\n }\n if (options.filterOptions.circle) {\n this.logger.warn(\"The parameter 'filterOptions.circle' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.circle2Json(options.filterOptions.circle);\n }\n delete options.filterOptions.circle;\n }\n if (options.filterOptions.polygon) {\n this.logger.warn(\"The parameter 'filterOptions.polygon' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.polygon2Json(options.filterOptions.polygon);\n }\n delete options.filterOptions.polygon;\n }\n if (!options.filters && Object.keys(options.filterOptions).length > 0) {\n options.filters = options.filterOptions;\n }\n delete options.filterOptions;\n }\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod: this.options.httpMethod,\n // options specifiques du service\n geocodeMethod: \"reverse\",\n searchGeometry: this.options.searchGeometry,\n index: this.options.index,\n position: this.options.position,\n returnTrueGeometry: this.options.returnTrueGeometry,\n maxResp: this.options.maximumResponses,\n filters: this.options.filters\n };\n this.request = _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__[\"default\"].build(options);\n\n // on teste si la requete a bien été construite !\n !this.request ? error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_REQUEST_BUILD\"))) : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response: this.response,\n rawResponse: this.options.rawResponse,\n onError: error,\n onSuccess: success,\n scope: this\n };\n _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"].build(options);\n } else {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} bbox - bbox\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.bbox2Json = function (bbox) {\n return {\n type: \"Polygon\",\n coordinates: [[[bbox.left, bbox.top], [bbox.right, bbox.top], [bbox.right, bbox.bottom], [bbox.left, bbox.bottom], [bbox.left, bbox.top]]]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} circle - circle\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.circle2Json = function (circle) {\n return {\n type: \"Circle\",\n radius: circle.radius,\n coordinates: [circle.x, circle.y]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} polygon - polygon\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.polygon2Json = function (polygon) {\n var jsonGeom = {\n type: \"Polygon\",\n coordinates: [[]]\n };\n for (var i = 0; i < polygon.length; ++i) {\n jsonGeom.coordinates[0].push([polygon[i].x, polygon[i].y]);\n }\n return jsonGeom;\n};\n\n/**\n * Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées.\n */\nReverseGeocode.geoEPSG = [\"EPSG:4326\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (ReverseGeocode);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JldmVyc2VHZW9jb2RlLmpzP2JiYjQiXSwibmFtZXMiOlsiUmV2ZXJzZUdlb2NvZGUiLCJvcHRpb25zXyIsIlR5cGVFcnJvciIsIl8iLCJnZXRNZXNzYWdlIiwiQ0xBU1NOQU1FIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJvcHRpb25zIiwicGF0Y2hPcHRpb25Db252ZXJ0b3IiLCJzZXJ2ZXJVcmwiLCJEZWZhdWx0VXJsU2VydmljZSIsIm5ld1VybCIsIkNvbW1vblNlcnZpY2UiLCJhcHBseSIsInNlYXJjaEdlb21ldHJ5IiwicG9zaXRpb24iLCJFcnJvciIsImluZGV4IiwiZmlsdGVycyIsImZpbHRlciIsIk9iamVjdCIsImtleXMiLCJpIiwibGVuZ3RoIiwia2V5IiwiX3R5cGVvZiIsIkFycmF5IiwiaXNBcnJheSIsIm1heGltdW1SZXNwb25zZXMiLCJwcm90b3R5cGUiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImZpbHRlck9wdGlvbnMiLCJ3YXJuIiwidHlwZSIsImJib3giLCJiYm94Mkpzb24iLCJjaXJjbGUiLCJjaXJjbGUySnNvbiIsInBvbHlnb24iLCJwb2x5Z29uMkpzb24iLCJ4IiwibG9uIiwieSIsImxhdCIsInNycyIsImJ1aWxkUmVxdWVzdCIsImVycm9yIiwic3VjY2VzcyIsImh0dHBNZXRob2QiLCJnZW9jb2RlTWV0aG9kIiwicmV0dXJuVHJ1ZUdlb21ldHJ5IiwibWF4UmVzcCIsInJlcXVlc3QiLCJHZW9jb2RlUmVxdWVzdEZhY3RvcnkiLCJidWlsZCIsImNhbGwiLCJFcnJvclNlcnZpY2UiLCJhbmFseXplUmVzcG9uc2UiLCJyZXNwb25zZSIsInJhd1Jlc3BvbnNlIiwib25FcnJvciIsIm9uU3VjY2VzcyIsInNjb3BlIiwiR2VvY29kZVJlc3BvbnNlRmFjdG9yeSIsImNvb3JkaW5hdGVzIiwibGVmdCIsInRvcCIsInJpZ2h0IiwiYm90dG9t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RUYsT0FBTyxDQUFDakIsQ0FBQyxDQUFDLENBQUNxQixDQUFDLENBQUMsQ0FBQztFQUM5RDtFQUVBLE9BQU80QixRQUFRO0FBQ25CLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0ExRSxjQUFjLENBQUM0RSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFFdkI1RSw2RUFBYyIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9HZW9jb2RlL1JldmVyc2VHZW9jb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgQ29tbW9uU2VydmljZSBmcm9tIFwiLi4vQ29tbW9uU2VydmljZVwiO1xuaW1wb3J0IERlZmF1bHRVcmxTZXJ2aWNlIGZyb20gXCIuLi9EZWZhdWx0VXJsU2VydmljZVwiO1xuaW1wb3J0IEdlb2NvZGVSZXF1ZXN0RmFjdG9yeSBmcm9tIFwiLi9SZXF1ZXN0L0dlb2NvZGVSZXF1ZXN0RmFjdG9yeVwiO1xuaW1wb3J0IEdlb2NvZGVSZXNwb25zZUZhY3RvcnkgZnJvbSBcIi4vUmVzcG9uc2UvR2VvY29kZVJlc3BvbnNlRmFjdG9yeVwiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqIEFwcGVsIGR1IHNlcnZpY2UgZGUgZ8Opb2NvZGFnZSBpbnZlcnNlIGR1IEfDqW9wb3J0YWlsIDpcbiAqICAgICBlbnZvaSBkZSBsYSByZXF1w6p0ZSBjb25zdHJ1aXRlIHNlbG9uIGxlcyBwYXJhbcOodHJlcyBlbiBvcHRpb25zLFxuICogICAgIMOpdmVudHVlbGxlbWVudCBwYXJzaW5nIGV0IGFuYWx5c2UgIGRlIGxhIHLDqXBvbnNlLFxuICogICAgIHJldG91ciBkJ3VuZSByw6lwb25zZSBlbiBwYXJhbcOodHJlIGRlIGxhIGZvbmN0aW9uIG9uU3VjY2Vzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge0dwLlNlcnZpY2VzLkNvbW1vblNlcnZpY2V9XG4gKiBAYWxpYXMgR3AuU2VydmljZXMuUmV2ZXJzZUdlb2NvZGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgc3DDqWNpZmlxdWVzIGF1IHNlcnZpY2UgKCsgbGVzIG9wdGlvbnMgaGVyaXTDqWVzKVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnBvc2l0aW9uIC0gUG9zaXRpb24gZHUgcG9pbnQgZGUgcsOpZsOpcmVuY2UgcG91ciBsZSBjYWxjdWwgZGUgcHJveGltaXTDqSBleHByaW3DqWUgZGFucyBsZSBzeXN0w6htZSBkZSByw6lmw6lyZW5jZSBzcMOpY2lmacOpIHBhciBsZSBzcnMuXG4gKiAgICAgIEBwYXJhbSB7RmxvYXR9IG9wdGlvbnMucG9zaXRpb24ubG9uIC0gTG9uZ2l0dWRlIGR1IHBvaW50IGRlIHLDqWbDqXJlbmNlIHBvdXIgbGUgY2FsY3VsIGRlIHByb3hpbWl0w6kuXG4gKiAgICAgIEBwYXJhbSB7RmxvYXR9IG9wdGlvbnMucG9zaXRpb24ubGF0IC0gTGF0aXR1ZGUgZHUgcG9pbnQgZGUgcsOpZsOpcmVuY2UgcG91ciBsZSBjYWxjdWwgZGUgcHJveGltaXTDqS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZmlsdGVyc10gLSBMZXMgcHJvcHJpw6l0w6lzIHBvc3NpYmxlcyBkZSBjZXQgb2JqZXQuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZmlsdGVycy5bcHJvcHJpZXRlcyBkdSBmaWx0cmVdXSAtIENyaXTDqHJlIHN1cHBsw6ltZW50YWlyZSBwb3VyIGZpbHRyZXIgbGEgcmVjaGVyY2hlIHNvdXMgbGEgZm9ybWVcbiAqICAgICAgZCd1biBjb3VwbGUgY2zDqS92YWxldXIgw6AgZMOpZmluaXIgc2Vsb24gbGVzIHBvc3NpYmlsaXTDqXMgZHUgc2VydmV1ciBham91dMOpIMOgIGxhIHJlcXXDqnRlLlxuICogICAgICBMZSBzZXJ2aWNlIGRlIGfDqW9jb2RhZ2UgZHUgR8Opb3BvcnRhaWwgcGVybWV0IGRlIGZpbHRyZXIgbGVzIGFkcmVzc2VzIHBvc3RhbGVzIGF2ZWMgbGVzIHByb3ByacOpdMOpcyA6XG4gKiAgICAgICAgICBcInBvc3RhbENvZGVcIiwgXCJpbnNlZUNvZGVcIiwgXCJjaXR5XCIuXG4gKiAgICAgIElsIHBlcm1ldCDDqWdhbGVtZW50IGRlIGZpbHRyZXIgbGVzIHRvcG9ueW1lcyBhdmVjIGxlcyBwcm9wcmnDqXTDqXMgOlxuICogICAgICAgICAgXCJwb3N0YWxDb2RlXCIsIFwiaW5zZWVDb2RlXCIsIFwidHlwZVwiLlxuICogICAgICBFbmZpbiwgaWwgcGVybWV0IGRlIGZpbHRyZXIgbGVzIHBhcmNlbGxlcyBjYWRhc3RyYWxlcyBhdmVjIGxlcyBwcm9wcmnDqXTDqXMgOlxuICogICAgICAgICAgXCJjb2RlRGVwYXJ0ZW1lbnRcIiwgXCJjb2RlQ29tbXVuZVwiLCBcIm5vbUNvbW11bmVcIiwgXCJjb2RlQ29tbXVuZUFic1wiLCBcImNvZGVBcnJvbmRpc3NlbWVudFwiLCBcInNlY3Rpb25cIiwgXCJudW1lcm9cIiwgXCJmZXVpbGxlXCIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnNlYXJjaEdlb21ldHJ5XSAtIEVtcHJpc2UgZGFucyBsYXF1ZWxsZSBvbiBzb3VoYWl0ZSBlZmZlY3R1ZXIgbGEgcmVjaGVyY2hlLlxuICogICAgICBMZXMgcHJvcHJpw6l0w6lzIHBvc3NpYmxlcyBkZSBjZXQgb2JqZXQgc29udCBkw6ljcml0ZXMgY2ktYXByw6hzLlxuICogICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5zZWFyY2hHZW9tZXRyeS50eXBlICAgLSBUeXBlIGRlIGfDqW9tZXRyaWUgKFBvaW50fENpcmNsZXxMaW5lc3RyaW5nfFBvbHlnb24pXG4gKiAgICAgIEBwYXJhbSB7QXJyYXkuPEZsb2F0PnxBcnJheS5BcnJheS48RmxvYXQ+fSBvcHRpb25zLnNlYXJjaEdlb21ldHJ5LmNvb3JkaW5hdGVzIC0gQ29vcmRvbm7DqWVzIGRlcyBwb2ludHMgY29uc3RpdHVhbnQgbGEgZ8Opb23DqXRyaWUuXG4gKiAgICAgIEBwYXJhbSB7RmxvYXR9IG9wdGlvbnMuc2VhcmNoR2VvbWV0cnkucmFkaXVzICAgIC0gUmF5b24uIFBhcmFtw6h0cmUgYXBwbGljYWJsZSB1bmlxdWVtZW50IHBvdXIgbGUgdHlwZSAnQ2lyY2xlJy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaW5kZXggPSBcIlN0cmVldEFkZHJlc3NcIl0gLSBUeXBlIGRlIGwnb2JqZXQgcmVjaGVyY2jDqS5cbiAqICAgICAgTGUgc2VydmljZSBkZSBnw6lvY29kYWdlIGR1IEfDqW9wb3J0YWlsIHBlcm1ldCBkZSByZWNoZXJjaGVyIGRlcyAnUG9zaXRpb25PZkludGVyZXN0JyBwb3VyIGRlcyB0b3BvbnltZXMsIGRlcyAnU3RyZWV0QWRkcmVzcydcbiAqICAgICAgcG91ciBkZXMgYWRyZXNzZXMgcG9zdGFsZXMgb3UgZGVzICdDYWRhc3RyYWxQYXJjZWwnIHBvdXIgZGVzIHBhcmNlbGxlcyBjYWRhc3RyYWxlcy4gTCdpbmRleCAnbG9jYXRpb24nIHBlcm1ldCB1bmUgcmVjaGVyY2hlXG4gKiAgICAgIG11bHRpLWluZGV4ZXMgZW4gcmVncm91cGFudCBsZXMgaW5kZXhlcyAnUG9zaXRpb25PZkludGVyZXN0JyBldCAnU3RyZWV0QWRkcmVzcycuXG4gKiAgICAgIEQnYXV0cmVzIHR5cGVzIHBvdXJyb250IMOqdHJlIHJham91dMOpcyBzZWxvbiBsJ8Opdm9sdXRpb24gZHUgc2VydmljZS5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGluZGV4ID0gJ1N0cmVldEFkZHJlc3MnLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhpbXVtUmVzcG9uc2VzXSAtIE5vbWJyZSBkZSByw6lwb25zZXMgbWF4aW1hbCBxdWUgbCdvbiBzb3VoYWl0ZSByZWNldm9pci5cbiAqICAgICAgUGFzIGRlIHZhbGV1ciBwYXIgZMOpZmF1dC4gU2kgbGUgc2VydmV1ciBjb25zdWx0w6kgZXN0IGNlbHVpIGR1IEfDqW9wb3J0YWlsLCBsYSB2YWxldXIgcGFyIGTDqWZhdXQgc2VyYSBkb25jIGNlbGxlIGR1IHNlcnZpY2UgOiAyMHMuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yZXR1cm5UcnVlR2VvbWV0cnldIC0gQm9vbMOpZW4gaW5kaXF1YW50IHNpIGwnb24gc291aGFpdGUgcsOpY3Vww6lyZXIgbGEgZ8Opb23DqXRyaWUgdnJhaWUgZGVzIG9iamVjdHMgZ8Opb2xvY2FsaXPDqXMuXG4gKiAgICAgIGZhbHNlIHBhciBkw6lmYXV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiAgIHZhciBvcHRpb25zID0ge1xuICogICAgICBhcGlLZXkgOiBudWxsLFxuICogICAgICBzZXJ2ZXJVcmwgOiAnaHR0cDovL2xvY2FsaG9zdC9zZXJ2aWNlLycsXG4gKiAgICAgIHByb3h5VVJMIDogbnVsbCxcbiAqICAgICAgdGltZU91dCA6IDEwMDAwLCAvLyBtc1xuICogICAgICByYXdSZXNwb25zZSA6IGZhbHNlLCAvLyB0cnVlfGZhbHNlXG4gKiAgICAgIHNjb3BlIDogbnVsbCwgLy8gdGhpc1xuICogICAgICBvblN1Y2Nlc3MgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHt9LFxuICogICAgICBvbkZhaWx1cmUgOiBmdW5jdGlvbiAoZXJyb3IpIHt9LFxuICogICAgICAvLyBzcMOpY2lmaXF1ZSBhdSBzZXJ2aWNlXG4gKiAgICAgIGluZGV4IDogJ1N0cmVldEFkZHJlc3MnLFxuICogICAgICBzZWFyY2hHZW9tZXRyeSA6IHtcbiAqICAgICAgICAgIHR5cGUgOiBDaXJjbGUsXG4gKiAgICAgICAgICBjb29yZGluYXRlcyA6IFs0OCwgMl0sXG4gKiAgICAgICAgICByYWRpdXMgOiAxMDBcbiAqICAgICAgfSxcbiAqICAgICAgcG9zaXRpb24gOiB7bG9uOjIgLCBsYXQ6NDguNX0sXG4gKiAgICAgIG1heGltdW1SZXNwb25zZXMgOiAyNSxcbiAqICAgfTtcbiAqXG4gKi9cbmZ1bmN0aW9uIFJldmVyc2VHZW9jb2RlIChvcHRpb25zXykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXZlcnNlR2VvY29kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfLmdldE1lc3NhZ2UoXCJDTEFTU19DT05TVFJVQ1RPUlwiLCBcIlJldmVyc2VHZW9jb2RlXCIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb20gZGUgbGEgY2xhc3NlIChoZXJpdGFnZSlcbiAgICAgKiBGSVhNRSBpbnN0YW5jZSBvdSBjbGFzc2UgP1xuICAgICAqL1xuICAgIHRoaXMuQ0xBU1NOQU1FID0gXCJSZXZlcnNlR2VvY29kZVwiO1xuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiR3AuU2VydmljZXMuUmV2ZXJzZUdlb2NvZGVcIik7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIFJldmVyc2VHZW9jb2RlIChvcHRpb25zKV1cIik7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMucGF0Y2hPcHRpb25Db252ZXJ0b3Iob3B0aW9uc18pO1xuICAgIGlmICghb3B0aW9ucy5zZXJ2ZXJVcmwpIHtcbiAgICAgICAgb3B0aW9ucy5zZXJ2ZXJVcmwgPSBEZWZhdWx0VXJsU2VydmljZS5SZXZlcnNlR2VvY29kZS5uZXdVcmwoKTtcbiAgICB9XG5cbiAgICAvLyBhcHBlbCBkdSBjb25zdHJ1Y3RldXIgcGFyIGhlcml0YWdlXG4gICAgQ29tbW9uU2VydmljZS5hcHBseSh0aGlzLCBbb3B0aW9uc10pO1xuXG4gICAgaWYgKCFvcHRpb25zLnNlYXJjaEdlb21ldHJ5KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5wb3NpdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX01JU1NJTkdcIiwgXCJzZWFyY2hHZW9tZXRyeVwiKSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2VhcmNoR2VvbWV0cnkgPSBvcHRpb25zLnNlYXJjaEdlb21ldHJ5O1xuICAgIH1cblxuICAgIC8vIG9uIGRlZmluaXQgbCdpbmRleCBwYXIgZGVmYXV0XG4gICAgaWYgKCFvcHRpb25zLmluZGV4KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5pbmRleCA9IG9wdGlvbnMuaW5kZXggPSBcIlN0cmVldEFkZHJlc3NcIjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzKSB7XG4gICAgICAgIHZhciBmaWx0ZXIgPSBPYmplY3Qua2V5cyhvcHRpb25zLmZpbHRlcnMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGZpbHRlcltpXTtcbiAgICAgICAgICAgIC8vIG9uIHN1cHByaW1lIGxlcyBmaWx0cmVzIHZpZGVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyc1trZXldID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvcHRpb25zLmZpbHRlcnNba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmZpbHRlcnNba2V5XSkubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXJzW2tleV0gPT09IFwic3RyaW5nXCIgJiYgb3B0aW9ucy5maWx0ZXJzW2tleV0ubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZmlsdGVyc1trZXldKSAmJiBvcHRpb25zLmZpbHRlcnNba2V5XS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zLmZpbHRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgdGhpcy5vcHRpb25zLmluZGV4ID0gb3B0aW9ucy5pbmRleCB8fCBcIlN0cmVldEFkZHJlc3NcIjtcbiAgICB0aGlzLm9wdGlvbnMubWF4aW11bVJlc3BvbnNlcyA9IG9wdGlvbnMubWF4aW11bVJlc3BvbnNlcyB8fCAyMDtcbn1cblxuLyoqXG4gKiBAbGVuZHMgbW9kdWxlOlJldmVyc2VHZW9jb2RlI1xuICovXG5SZXZlcnNlR2VvY29kZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbW1vblNlcnZpY2UucHJvdG90eXBlLCB7XG4gICAgLy8gdG9kb1xuICAgIC8vIGdldHRlci9zZXR0ZXJcbn0pO1xuXG4vKlxuICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAqL1xuUmV2ZXJzZUdlb2NvZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmV2ZXJzZUdlb2NvZGU7XG5cbi8qKlxuICogUGF0Y2ggcG91ciBsYSBjb252ZXJ0aW9uIGRlcyBvcHRpb25zIHZlcnMgbGUgbm91dmVhdSBmb3JtYWxpc21lLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXyAtIG9wdGlvbnMgZHUgc2VydmljZVxuICogQHJldHVybiB7T2JqZWN0fSAtIG9wdGlvbnNcbiAqL1xuUmV2ZXJzZUdlb2NvZGUucHJvdG90eXBlLnBhdGNoT3B0aW9uQ29udmVydG9yID0gZnVuY3Rpb24gKG9wdGlvbnNfKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRpb25zXztcblxuICAgIGlmIChvcHRpb25zLmZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ2ZpbHRlck9wdGlvbnMnIGlzIGRlcHJlY2F0ZWRcIik7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyT3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiVGhlIHBhcmFtZXRlciAnZmlsdGVyT3B0aW9ucy50eXBlJyBpcyBkZXByZWNhdGVkXCIpO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5maWx0ZXJPcHRpb25zLnR5cGUpICYmIG9wdGlvbnMuZmlsdGVyT3B0aW9ucy50eXBlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbmRleCA9IG9wdGlvbnMuZmlsdGVyT3B0aW9ucy50eXBlWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5kZXggPSBvcHRpb25zLmZpbHRlck9wdGlvbnMudHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJPcHRpb25zLnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5maWx0ZXJPcHRpb25zLmJib3gpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdmaWx0ZXJPcHRpb25zLmJib3gnIGlzIGRlcHJlY2F0ZWRcIik7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2VhcmNoR2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0aXIgbGEgZ2VvbWV0cmllXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zZWFyY2hHZW9tZXRyeSA9IHRoaXMuYmJveDJKc29uKG9wdGlvbnMuZmlsdGVyT3B0aW9ucy5iYm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmZpbHRlck9wdGlvbnMuYmJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlck9wdGlvbnMuY2lyY2xlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiVGhlIHBhcmFtZXRlciAnZmlsdGVyT3B0aW9ucy5jaXJjbGUnIGlzIGRlcHJlY2F0ZWRcIik7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2VhcmNoR2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0aXIgbGEgZ2VvbWV0cmllXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zZWFyY2hHZW9tZXRyeSA9IHRoaXMuY2lyY2xlMkpzb24ob3B0aW9ucy5maWx0ZXJPcHRpb25zLmNpcmNsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJPcHRpb25zLmNpcmNsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlck9wdGlvbnMucG9seWdvbikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ2ZpbHRlck9wdGlvbnMucG9seWdvbicgaXMgZGVwcmVjYXRlZFwiKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zZWFyY2hHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRpciBsYSBnZW9tZXRyaWVcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNlYXJjaEdlb21ldHJ5ID0gdGhpcy5wb2x5Z29uMkpzb24ob3B0aW9ucy5maWx0ZXJPcHRpb25zLnBvbHlnb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuZmlsdGVyT3B0aW9ucy5wb2x5Z29uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbHRlcnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5maWx0ZXJPcHRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcnMgPSBvcHRpb25zLmZpbHRlck9wdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJPcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uLngpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJUaGUgcGFyYW1ldGVyICdwb3NpdGlvbi54JyBpcyBkZXByZWNhdGVkXCIpO1xuXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucG9zaXRpb24ubG9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi5sb24gPSBvcHRpb25zLnBvc2l0aW9uLng7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgb3B0aW9ucy5wb3NpdGlvbi54O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ3Bvc2l0aW9uLnknIGlzIGRlcHJlY2F0ZWRcIik7XG5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wb3NpdGlvbi5sYXQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uLmxhdCA9IG9wdGlvbnMucG9zaXRpb24ueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLnBvc2l0aW9uLnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zcnMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIlRoZSBwYXJhbWV0ZXIgJ3NycycgaXMgZGVwcmVjYXRlZFwiKTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMuc3JzO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xufTtcblxuLyoqXG4gKiAob3ZlcndyaXRlKVxuICogQ3LDqWF0aW9uIGRlIGxhIHJlcXXDqnRlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuUmV2ZXJzZUdlb2NvZGUucHJvdG90eXBlLmJ1aWxkUmVxdWVzdCA9IGZ1bmN0aW9uIChlcnJvciwgc3VjY2Vzcykge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBodHRwTWV0aG9kIDogdGhpcy5vcHRpb25zLmh0dHBNZXRob2QsXG4gICAgICAgIC8vIG9wdGlvbnMgc3BlY2lmaXF1ZXMgZHUgc2VydmljZVxuICAgICAgICBnZW9jb2RlTWV0aG9kIDogXCJyZXZlcnNlXCIsXG4gICAgICAgIHNlYXJjaEdlb21ldHJ5IDogdGhpcy5vcHRpb25zLnNlYXJjaEdlb21ldHJ5LFxuICAgICAgICBpbmRleCA6IHRoaXMub3B0aW9ucy5pbmRleCxcbiAgICAgICAgcG9zaXRpb24gOiB0aGlzLm9wdGlvbnMucG9zaXRpb24sXG4gICAgICAgIHJldHVyblRydWVHZW9tZXRyeSA6IHRoaXMub3B0aW9ucy5yZXR1cm5UcnVlR2VvbWV0cnksXG4gICAgICAgIG1heFJlc3AgOiB0aGlzLm9wdGlvbnMubWF4aW11bVJlc3BvbnNlcyxcbiAgICAgICAgZmlsdGVycyA6IHRoaXMub3B0aW9ucy5maWx0ZXJzXG4gICAgfTtcblxuICAgIHRoaXMucmVxdWVzdCA9IEdlb2NvZGVSZXF1ZXN0RmFjdG9yeS5idWlsZChvcHRpb25zKTtcblxuICAgIC8vIG9uIHRlc3RlIHNpIGxhIHJlcXVldGUgYSBiaWVuIMOpdMOpIGNvbnN0cnVpdGUgIVxuICAgICghdGhpcy5yZXF1ZXN0KVxuICAgICAgICA/IGVycm9yLmNhbGwodGhpcywgbmV3IEVycm9yU2VydmljZShfLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFUVVFU1RfQlVJTERcIikpKVxuICAgICAgICA6IHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnJlcXVlc3QpO1xufTtcblxuLyoqXG4gKiAob3ZlcndyaXRlKVxuICogQW5hbHlzZSBkZSBsYSByZXBvbnNlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuUmV2ZXJzZUdlb2NvZGUucHJvdG90eXBlLmFuYWx5emVSZXNwb25zZSA9IGZ1bmN0aW9uIChlcnJvciwgc3VjY2Vzcykge1xuICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2UgOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgICAgICAgcmF3UmVzcG9uc2UgOiB0aGlzLm9wdGlvbnMucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICBvbkVycm9yIDogZXJyb3IsXG4gICAgICAgICAgICBvblN1Y2Nlc3MgOiBzdWNjZXNzLFxuICAgICAgICAgICAgc2NvcGUgOiB0aGlzXG4gICAgICAgIH07XG5cbiAgICAgICAgR2VvY29kZVJlc3BvbnNlRmFjdG9yeS5idWlsZChvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvclNlcnZpY2UoXy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FTVBUWVwiKSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUGF0Y2ggcG91ciBsYSBjb252ZXJ0aW9uIGRlcyBvcHRpb25zIHZlcnMgbGUgbm91dmVhdSBmb3JtYWxpc21lLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGJib3ggLSBiYm94XG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gZ2VvbWV0cmllIGF1IGZvcm1hdCBqc29uXG4gKi9cblJldmVyc2VHZW9jb2RlLnByb3RvdHlwZS5iYm94Mkpzb24gPSBmdW5jdGlvbiAoYmJveCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUgOiBcIlBvbHlnb25cIixcbiAgICAgICAgY29vcmRpbmF0ZXMgOiBbW1xuICAgICAgICAgICAgW2Jib3gubGVmdCwgYmJveC50b3BdLFxuICAgICAgICAgICAgW2Jib3gucmlnaHQsIGJib3gudG9wXSxcbiAgICAgICAgICAgIFtiYm94LnJpZ2h0LCBiYm94LmJvdHRvbV0sXG4gICAgICAgICAgICBbYmJveC5sZWZ0LCBiYm94LmJvdHRvbV0sXG4gICAgICAgICAgICBbYmJveC5sZWZ0LCBiYm94LnRvcF1cbiAgICAgICAgXV1cbiAgICB9O1xufTtcblxuLyoqXG4gKiBQYXRjaCBwb3VyIGxhIGNvbnZlcnRpb24gZGVzIG9wdGlvbnMgdmVycyBsZSBub3V2ZWF1IGZvcm1hbGlzbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNpcmNsZSAtIGNpcmNsZVxuICogQHJldHVybiB7T2JqZWN0fSAtIGdlb21ldHJpZSBhdSBmb3JtYXQganNvblxuICovXG5SZXZlcnNlR2VvY29kZS5wcm90b3R5cGUuY2lyY2xlMkpzb24gPSBmdW5jdGlvbiAoY2lyY2xlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSA6IFwiQ2lyY2xlXCIsXG4gICAgICAgIHJhZGl1cyA6IGNpcmNsZS5yYWRpdXMsXG4gICAgICAgIGNvb3JkaW5hdGVzIDogW2NpcmNsZS54LCBjaXJjbGUueV1cbiAgICB9O1xufTtcblxuLyoqXG4gKiBQYXRjaCBwb3VyIGxhIGNvbnZlcnRpb24gZGVzIG9wdGlvbnMgdmVycyBsZSBub3V2ZWF1IGZvcm1hbGlzbWUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcG9seWdvbiAtIHBvbHlnb25cbiAqIEByZXR1cm4ge09iamVjdH0gLSBnZW9tZXRyaWUgYXUgZm9ybWF0IGpzb25cbiAqL1xuUmV2ZXJzZUdlb2NvZGUucHJvdG90eXBlLnBvbHlnb24ySnNvbiA9IGZ1bmN0aW9uIChwb2x5Z29uKSB7XG4gICAgdmFyIGpzb25HZW9tID0ge1xuICAgICAgICB0eXBlIDogXCJQb2x5Z29uXCIsXG4gICAgICAgIGNvb3JkaW5hdGVzIDogW1tdXVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvbHlnb24ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAganNvbkdlb20uY29vcmRpbmF0ZXNbMF0ucHVzaChbcG9seWdvbltpXS54LCBwb2x5Z29uW2ldLnldKTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbkdlb207XG59O1xuXG4vKipcbiAqIENvZGVzIEVQU0cgZ8Opb2dyYXBoaXF1ZXMgKGxhdC9sb24pLiBVdGlsZXMgY2FyIGxlcyBjb29yZG9ubsOpZXMgZG9pdmVudCDDqnRyZSBpbnZlcnPDqWVzLlxuICovXG5SZXZlcnNlR2VvY29kZS5nZW9FUFNHID0gW1wiRVBTRzo0MzI2XCJdO1xuXG5leHBvcnQgZGVmYXVsdCBSZXZlcnNlR2VvY29kZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Geocode/ReverseGeocode.js\n"); + +/***/ }), + +/***/ "./src/Services/ProcessIsoCurve/ProcessIsoCurve.js": +/*!*********************************************************!*\ + !*** ./src/Services/ProcessIsoCurve/ProcessIsoCurve.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Request_ProcessIsoCurveRequest__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Request/ProcessIsoCurveRequest */ \"./src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js\");\n/* harmony import */ var _Response_ProcessIsoCurveResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Response/ProcessIsoCurveResponseFactory */ \"./src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js\");\n\n\n\n\n\n\n\n\n/**\n * @classdesc\n * Appel du service d'isochrone/distance du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ProcessIsoCurve\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service iso : 'json' uniquement et par défaut.\n *\n * @param {Object} options.position - Point de départ du calcul.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.position.x - Abcisse du point de départ du calcul d'isochrone/distance.\n * @param {Float} options.position.y - Ordonnée du point de départ du calcul d'isochrone/distance.\n *\n * @param {String} options.srs - Projection.\n * Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et\n * dans lequel la géométrie de la courbe résultante sera exprimée.\n * Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ».\n *\n * @param {String} [options.graph = \"voiture\"] - Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »).\n * La valeur par défaut est : «voiture»\n *\n * @param {Array.} [options.exclusions] - DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints.\n * Critères d'exclusions à appliquer pour le calcul.\n * On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {String} [options.method = \"time\"] - Méthode utilisée pour le calcul de la courbe iso.\n * Les valeurs possible sont \"time\" pour un calcul d'isochrone, \"distance\" pour un calcul d'isodistance.\n * Pas de valeur spécifié équivaut à un calcul d'isochrone.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse (\"m\" or \"km\").\n *\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse (\"standard\", \"second\", \"minute\", \"hour\"). Il peut-être formatté hh:mm::ss avec la valeur standard.\n *\n * @param {Float} options.time - Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"time\".\n * Si l'option method n'est pas renseignée, ce paramètre doit être renseigné.\n *\n * @param {Float} options.distance - Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"DISTANCE\".\n * Si l'option \"method\" n'est pas renseignée, ce paramètre sera ignoré.\n *\n * @param {Boolean} [options.reverse = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.smoothing = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.holes = false] - Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »).\n * Par défaut, la valeur « false » est appliquée.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * resource : bdtopo-valhalla,\n * distance : 200,\n * [time : ]\n * method : \"distance\",\n * graph : \"voiture\",\n * reverse : false\n * };\n */\n\nfunction ProcessIsoCurve(options) {\n if (!(this instanceof ProcessIsoCurve)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"ProcessIsoCurve\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ProcessIsoCurve\";\n\n // appel du constructeur par heritage\n _CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].apply(this, arguments);\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"Gp.Services.ProcessIsoCurve\");\n this.logger.trace(\"[Constructeur ProcessIsoCurve (options)]\");\n if (!options.position) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"position\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.position.x === null) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"position.x\"));\n }\n if (options.position.y === null) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"position.y\"));\n }\n if (!options.time && !options.distance) {\n throw new Error(\"Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance\");\n }\n\n // si on a que le paramètre \"distance\" en entrée, on calcule une isodistance.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"distance\"\n if (!options.time && options.distance) {\n this.options.method = \"distance\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.time) {\n delete this.options.time;\n }\n }\n\n // si on a que le paramètre \"time\" en entrée, on calcule une isochrone.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"time\"\n if (options.time && !options.distance) {\n this.options.method = \"time\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.distance) {\n delete this.options.distance;\n }\n }\n\n // au cas où on a ni l'un, ni l'autre...\n this.options.method = this.options.method || \"time\";\n\n // options par defaut du service\n // TODO: modifier la ressource lors de la mise en production du service\n this.options.resource = options.resource || \"bdtopo-valhalla\";\n this.options.exclusions = options.exclusions || [];\n this.options.reverse = options.reverse || false;\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n\n // options depreciees\n if (options.smoothing) {\n this.logger.warn(\"options.smoothing is DEPRECATED\");\n }\n this.options.smoothing = false;\n if (options.holes) {\n this.logger.warn(\"options.holes is DEPRECATED\");\n }\n this.options.holes = false;\n\n // Gestion du graphe\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n\n // Gestions des contraintes\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n // Gestion de l'ancien paramètre exclusions\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n this.options.outputFormat = typeof options.outputFormat === \"string\" ? options.outputFormat.toLowerCase() : \"json\";\n if (options.outputFormat && options.outputFormat !== \"json\") {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_NOT_SUPPORT\", \"outputFormat\"));\n }\n this.options.outputFormat = \"json\";\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var urlFound = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].ProcessIsoCurve.newUrl();\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:ProcessIsoCurve#\n */\nProcessIsoCurve.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nProcessIsoCurve.prototype.constructor = ProcessIsoCurve;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nProcessIsoCurve.prototype.buildRequest = function (error, success) {\n try {\n var oIsoCurve = new _Request_ProcessIsoCurveRequest__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.options);\n if (!oIsoCurve.processRequestString()) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_REQUEST_BUILD\"));\n }\n this.request = oIsoCurve.requestString;\n } catch (e) {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](e.message));\n return;\n }\n success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} onError - callback des erreurs\n * @param {Function} onSuccess - callback de succès de l'analyse de la réponse\n */\nProcessIsoCurve.prototype.analyzeResponse = function (onError, onSuccess) {\n if (this.response) {\n var options = {\n response: this.response,\n outputFormat: this.options.outputFormat,\n rawResponse: this.options.rawResponse,\n onSuccess: onSuccess,\n onError: onError,\n scope: this\n };\n _Response_ProcessIsoCurveResponseFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"].build(options);\n } else {\n onError.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProcessIsoCurve);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUHJvY2Vzc0lzb0N1cnZlLmpzP2M1MDEiXSwibmFtZXMiOlsiUHJvY2Vzc0lzb0N1cnZlIiwib3B0aW9ucyIsIlR5cGVFcnJvciIsIl8iLCJnZXRNZXNzYWdlIiwiQ0xBU1NOQU1FIiwiQ29tbW9uU2VydmljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJwb3NpdGlvbiIsIkVycm9yIiwieCIsInkiLCJ0aW1lIiwiZGlzdGFuY2UiLCJtZXRob2QiLCJyZXNvdXJjZSIsImV4Y2x1c2lvbnMiLCJyZXZlcnNlIiwic3JzIiwiZGlzdGFuY2VVbml0IiwidGltZVVuaXQiLCJzbW9vdGhpbmciLCJ3YXJuIiwiaG9sZXMiLCJncmFwaCIsImNvbnN0cmFpbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiayIsImxlbmd0aCIsInB1c2giLCJjb25zdHJhaW50VHVubmVsIiwiY29uc3RyYWludFBvbnQiLCJjb25zdHJhaW50QXV0b3JvdXRlIiwiYyIsInRvTG93ZXJDYXNlIiwiY29uc3RyYWludFR5cGUiLCJrZXkiLCJvcGVyYXRvciIsInZhbHVlIiwib3V0cHV0Rm9ybWF0Iiwic2VydmVyVXJsIiwidXJsRm91bmQiLCJEZWZhdWx0VXJsU2VydmljZSIsIm5ld1VybCIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiYnVpbGRSZXF1ZXN0IiwiZXJyb3IiLCJzdWNjZXNzIiwib0lzb0N1cnZlIiwiUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdCIsInByb2Nlc3NSZXF1ZXN0U3RyaW5nIiwicmVxdWVzdCIsInJlcXVlc3RTdHJpbmciLCJlIiwiY2FsbCIsIkVycm9yU2VydmljZSIsIm1lc3NhZ2UiLCJhbmFseXplUmVzcG9uc2UiLCJvbkVycm9yIiwib25TdWNjZXNzIiwicmVzcG9uc2UiLCJyYXdSZXNwb25z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QUU7RUFDdEUsSUFBSSxJQUFJLENBQUNDLFFBQVEsRUFBRTtJQUNmLElBQUlwRSxPQUFPLEdBQUc7TUFDVm9FLFFBQVEsRUFBRyxJQUFJLENBQUNBLFFBQVE7TUFDeEJ4QixZQUFZLEVBQUcsSUFBSSxDQUFDNUMsT0FBTyxDQUFDNEMsWUFBWTtNQUN4Q3lCLFdBQVcsRUFBRyxJQUFJLENBQUNyRSxPQUFPLENBQUNxRSxXQUFXO01BQ3RDRixTQUFTLEVBQUdBLFNBQVM7TUFDckJELE9BQU8sRUFBR0EsT0FBTztNQUNqQkksS0FBSyxFQUFHO0lBQ1osQ0FBQztJQUVEQyxnRkFBOEIsQ0FBQ0MsS0FBSyxDQUFDeEUsT0FBTyxDQUFDO0VBQ2pELENBQUMsTUFBTTtJQUNIa0UsT0FBTyxDQUFDSixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUlDLGdFQUFZLENBQUM3RCxnRUFBQyxDQUFDQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0VBQ2hGO0FBQ0osQ0FBQztBQUVjSiw4RUFBZSIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUHJvY2Vzc0lzb0N1cnZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBfIGZyb20gXCIuLi8uLi9VdGlscy9NZXNzYWdlc1Jlc291cmNlc1wiO1xuaW1wb3J0IEVycm9yU2VydmljZSBmcm9tIFwiLi4vLi4vRXhjZXB0aW9ucy9FcnJvclNlcnZpY2VcIjtcbmltcG9ydCBDb21tb25TZXJ2aWNlIGZyb20gXCIuLi9Db21tb25TZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdFVybFNlcnZpY2UgZnJvbSBcIi4uL0RlZmF1bHRVcmxTZXJ2aWNlXCI7XG5pbXBvcnQgUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdCBmcm9tIFwiLi9SZXF1ZXN0L1Byb2Nlc3NJc29DdXJ2ZVJlcXVlc3RcIjtcbmltcG9ydCBQcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3RvcnkgZnJvbSBcIi4vUmVzcG9uc2UvUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2VGYWN0b3J5XCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICogQXBwZWwgZHUgc2VydmljZSBkJ2lzb2Nocm9uZS9kaXN0YW5jZSBkdSBHw6lvcG9ydGFpbCA6XG4gKiAgICAgZW52b2kgZGUgbGEgcmVxdcOqdGUgY29uc3RydWl0ZSBzZWxvbiBsZXMgcGFyYW3DqHRyZXMgZW4gb3B0aW9ucyxcbiAqICAgICDDqXZlbnR1ZWxsZW1lbnQgcGFyc2luZyBldCBhbmFseXNlICBkZSBsYSByw6lwb25zZSxcbiAqICAgICByZXRvdXIgZCd1bmUgcsOpcG9uc2UgZW4gcGFyYW3DqHRyZSBkZSBsYSBmb25jdGlvbiBvblN1Y2Nlc3MuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIHtHcC5TZXJ2aWNlcy5Db21tb25TZXJ2aWNlfVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLlByb2Nlc3NJc29DdXJ2ZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHNww6ljaWZpcXVlcyBhdSBzZXJ2aWNlICgrIGxlcyBvcHRpb25zIGhlcml0w6llcylcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5yZXNvdXJjZSAtIExhIHJlc3NvdXJjZSB1dGlsaXPDqWUgcG91ciBsZSBjYWxjdWwgOiBiZHRvcG8tdmFsaGFsbGEgKHBhciBkw6lmYXV0KSBvdSBiZHRvcG8tcGdyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLm91dHB1dEZvcm1hdCAtIExlIGZvcm1hdCBkZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlIGlzbyA6ICdqc29uJyB1bmlxdWVtZW50IGV0IHBhciBkw6lmYXV0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnBvc2l0aW9uIC0gUG9pbnQgZGUgZMOpcGFydCBkdSBjYWxjdWwuXG4gKiAgICAgIENvb3Jkb25uw6llcyBleHByaW3DqWVzIGVuIGxvbmdpdHVkZXMsIGxhdGl0dWRlcyAoRVBTRzo0MzI2KVxuICogICAgICBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnBvc2l0aW9uLnggLSBBYmNpc3NlIGR1IHBvaW50IGRlIGTDqXBhcnQgZHUgY2FsY3VsIGQnaXNvY2hyb25lL2Rpc3RhbmNlLlxuICogICAgICBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnBvc2l0aW9uLnkgLSBPcmRvbm7DqWUgZHUgcG9pbnQgZGUgZMOpcGFydCBkdSBjYWxjdWwgZCdpc29jaHJvbmUvZGlzdGFuY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMuc3JzIC0gUHJvamVjdGlvbi5cbiAqICAgICAgU3lzdMOobWUgZGUgY29vcmRvbm7DqWVzIGRhbnMgbGVxdWVsIGxlcyBjb29yZG9ubsOpZXMgZHUgcG9pbnQgwqsgbG9jYXRpb24gwrsgc29udCBleHByaW3DqWVzIGV0XG4gKiAgICAgIGRhbnMgbGVxdWVsIGxhIGfDqW9tw6l0cmllIGRlIGxhIGNvdXJiZSByw6lzdWx0YW50ZSBzZXJhIGV4cHJpbcOpZS5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGxlIHN5c3TDqG1lIGRlIGNvb3Jkb25uw6llcyB1dGlsaXPDqSBzZXJhIMKrIEVQU0c6NDMyNiDCuy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZ3JhcGggPSBcInZvaXR1cmVcIl0gLSBOb20gZHUgZ3JhcGhlIMOgIHV0aWxpc2VyIHBvdXIgbGUgY2FsY3VsICjCqyBQaWV0b24gwrsgb3UgwqsgVm9pdHVyZSDCuykuXG4gKiAgICAgIExhIHZhbGV1ciBwYXIgZMOpZmF1dCBlc3QgOiDCq3ZvaXR1cmXCu1xuICpcbiAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtvcHRpb25zLmV4Y2x1c2lvbnNdIC0gREVQUkVDQVRFRDogQ2UgcGFyYW3DqHRyZSBlc3QgY29uc2VydsOpIHBvdXIgdW5lIHLDqXRyb2NvbXBhdGliaWxpdMOpIGRlIGwnYXBpLiBMZSBub3V2ZWF1IHBhcmFtw6h0cmUgw6AgdXRpbGlzZXIgZXN0IG9wdGlvbnMuY29uc3RyYWludHMuXG4gKiAgICAgIENyaXTDqHJlcyBkJ2V4Y2x1c2lvbnMgw6AgYXBwbGlxdWVyIHBvdXIgbGUgY2FsY3VsLlxuICogICAgICBPbiBwcsOpY2lzZSBpY2kgbGUgdHlwZSBkZSB0cm9uw6dvbnMgcXVlIGwnb24gbmUgdmV1dCBwYXMgcXVlIGwnaXNvY2hyb25lL2Rpc3RhbmNlIGVtcHJ1bnRlXG4gKiAgICAgICh2YWxldXJzIHBvc3NpYmxlcyA6IMKrIHRvbGwgwrsgKMOpdml0ZXIgbGVzIHDDqWFnZXMpLCDCqyBicmlkZ2UgwrssIMKrIHR1bm5lbCDCuykuXG4gKlxuICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuY29uc3RyYWludHNdIC0gQ3JpdMOocmVzIGRlIGNvbnRyYWludGVzIMOgIGFwcGxpcXVlciBzdXIgdW4gaXRpbsOpcmFpcmUuIExlcyB2YWxldXJzIGRpc3BvbmlibGVzIGTDqXBlbmRlbnQgZGUgbGEgcmVzc291cmNlIHV0aWxpc8OpZS4gSWwgZXN0IGRvbmMgdXRpbGUgZGUgcmVnYXJkZXIgbGUgZ2V0Q2FwYWJpbGl0aWVzLlxuICogICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29uc3RyYWludHMuY29uc3RyYWludFR5cGVdIC0gVHlwZSBkZSBsYSBjb250cmFpbnRlLiBHw6luw6lyYWxlbWVudCBcImJhbm5lZFwiLlxuICogICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29uc3RyYWludHMua2V5XSAtIENsw6kgZGUgbGEgY29udHJhaW50ZS4gR8OpbsOpcmFsZW1lbnQgXCJ3YXlUeXBlXCIuXG4gKiAgICAgIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb25zdHJhaW50cy5vcGVyYXRvcl0gLSBPcMOpcmF0ZXVyIGRlIGxhIGNvbnRyYWludGUuIEfDqW7DqXJhbGVtZW50IFwiPVwiLlxuICogICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29uc3RyYWludHMudmFsdWVdIC0gVmFsZXVyIGRlIGxhIGNvbnRyYWludGUuIEfDqW7DqXJhbGVtZW50IFwiYXV0b3JvdXRlXCIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLm1ldGhvZCA9IFwidGltZVwiXSAtIE3DqXRob2RlIHV0aWxpc8OpZSBwb3VyIGxlIGNhbGN1bCBkZSBsYSBjb3VyYmUgaXNvLlxuICogICAgICBMZXMgdmFsZXVycyBwb3NzaWJsZSBzb250IFwidGltZVwiIHBvdXIgdW4gY2FsY3VsIGQnaXNvY2hyb25lLCBcImRpc3RhbmNlXCIgcG91ciB1biBjYWxjdWwgZCdpc29kaXN0YW5jZS5cbiAqICAgICAgUGFzIGRlIHZhbGV1ciBzcMOpY2lmacOpIMOpcXVpdmF1dCDDoCB1biBjYWxjdWwgZCdpc29jaHJvbmUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRpc3RhbmNlVW5pdCA9IFwibVwiXSAtIEluZGlxdWUgc2kgbGEgZGlzdGFuY2UgZG9pdCDDqnRyZSBleHByaW3DqWUgZW4ga20gb3UgbSBkYW5zIGxhIHLDqXBvbnNlIChcIm1cIiBvciBcImttXCIpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy50aW1lVW5pdCA9IFwic2Vjb25kXCJdIC0gSW5kaXF1ZSBzaSBsYSBkdXLDqWUgZG9pdCDDqnRyZSBleHByaW3DqWUgZW4gc2Vjb25kZSwgbWludXRlIG91IGhldXJlIGRhbnMgbGEgcsOpcG9uc2UgKFwic3RhbmRhcmRcIiwgXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCIpLiBJbCBwZXV0LcOqdHJlIGZvcm1hdHTDqSBoaDptbTo6c3MgYXZlYyBsYSB2YWxldXIgc3RhbmRhcmQuXG4gKlxuICogQHBhcmFtIHtGbG9hdH0gb3B0aW9ucy50aW1lIC0gRHVyw6llIG1heGltdW0gKGV4cHJpbcOpZSBlbiBzZWNvbmRlcykgw6AgdXRpbGlzZXIgcG91ciBsZSBjYWxjdWwgZGUgbGEgY291cmJlIMOgIHBhcnRpciBkdSBvdSBqdXNxdSdhdSBwb2ludCDCqyBsb2NhdGlvbiDCuy5cbiAqICAgICAgQ2UgcGFyYW3DqHRyZSBkb2l0IMOqdHJlIHJlbnNlaWduw6kgc2kgbCdvcHRpb24gXCJtw6l0aG9kXCIgYSBsYSB2YWxldXIgXCJ0aW1lXCIuXG4gKiAgICAgIFNpIGwnb3B0aW9uIG1ldGhvZCBuJ2VzdCBwYXMgcmVuc2VpZ27DqWUsIGNlIHBhcmFtw6h0cmUgZG9pdCDDqnRyZSByZW5zZWlnbsOpLlxuICpcbiAqIEBwYXJhbSB7RmxvYXR9IG9wdGlvbnMuZGlzdGFuY2UgLSBEaXN0YW5jZSBtYXhpbXVtIChleHByaW3DqWUgZW4gbWV0cmVzKSDDoCB1dGlsaXNlciBwb3VyIGxlIGNhbGN1bCBkZSBsYSBjb3VyYmUgw6AgcGFydGlyIGR1IG91IGondXNxdSdhdSBwb2ludCDCqyBsb2NhdGlvbiDCuy5cbiAqICAgICAgQ2UgcGFyYW3DqHRyZSBkb2l0IMOqdHJlIHJlbnNlaWduw6kgc2kgbCdvcHRpb24gXCJtw6l0aG9kXCIgYSBsYSB2YWxldXIgXCJESVNUQU5DRVwiLlxuICogICAgICBTaSBsJ29wdGlvbiBcIm1ldGhvZFwiIG4nZXN0IHBhcyByZW5zZWlnbsOpZSwgY2UgcGFyYW3DqHRyZSBzZXJhIGlnbm9yw6kuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yZXZlcnNlID0gZmFsc2VdIC0gSW5kaXF1ZSBzaSBsYSBnw6lvbcOpdHJpZSByw6lzdWx0YW50ZSBkb2l0IMOqdHJlIGxpc3PDqWUgKMKrIHRydWUgwrspIHBvdXIgbmUgcGFzIGF2b2lyIGQnZWZmZXQgZCdlc2NhbGllci5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGxhIHZhbGV1ciDCqyBmYWxzZSDCuyBlc3QgYXBwbGlxdcOpZS5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNtb290aGluZyA9IGZhbHNlXSAtIEluZGlxdWUgc2kgbGEgZ8Opb23DqXRyaWUgcsOpc3VsdGFudGUgZG9pdCDDqnRyZSBsaXNzw6llICjCqyB0cnVlIMK7KSBwb3VyIG5lIHBhcyBhdm9pciBkJ2VmZmV0IGQnZXNjYWxpZXIuXG4gKiAgICAgIFBhciBkw6lmYXV0LCBsYSB2YWxldXIgwqsgZmFsc2UgwrsgZXN0IGFwcGxpcXXDqWUuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5ob2xlcyA9IGZhbHNlXSAtIEluZGlxdWUgc2kgbGEgZ8Opb23DqXRyaWUgcsOpc3VsdGFudGUgKHN1cmZhY2UpIGRvaXQgw6p0cmUgcmV0b3VybsOpZSBhdmVjIGRlcyB0cm91cyAowqsgdHJ1ZSDCuykuXG4gKiAgICAgIFBhciBkw6lmYXV0LCBsYSB2YWxldXIgwqsgZmFsc2UgwrsgZXN0IGFwcGxpcXXDqWUuXG4gKlxuICogQGV4YW1wbGVcbiAqICAgdmFyIG9wdGlvbnMgPSB7XG4gKiAgICAgIC8vIG9wdGlvbnMgY29tbXVuZXMgYXV4IHNlcnZpY2VzXG4gKiAgICAgIGFwaUtleSA6IG51bGwsXG4gKiAgICAgIHNlcnZlclVybCA6ICdodHRwOi8vbG9jYWxob3N0L3NlcnZpY2UvJyxcbiAqICAgICAgcHJvdG9jb2wgOiAnSlNPTlAnLCAvLyBKU09OUHxYSFJcbiAqICAgICAgcHJveHlVUkwgOiBudWxsLFxuICogICAgICBodHRwTWV0aG9kIDogJ0dFVCcsIC8vIEdFVHxQT1NUXG4gKiAgICAgIHRpbWVPdXQgOiAxMDAwMCwgLy8gbXNcbiAqICAgICAgcmF3UmVzcG9uc2UgOiBmYWxzZSwgLy8gdHJ1ZXxmYWxzZVxuICogICAgICBzY29wZSA6IG51bGwsIC8vIHRoaXNcbiAqICAgICAgb25TdWNjZXNzIDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7fSxcbiAqICAgICAgb25GYWlsdXJlIDogZnVuY3Rpb24gKGVycm9yKSB7fSxcbiAqICAgICAgLy8gc3DDqWNpZmlxdWUgYXUgc2VydmljZVxuICogICAgICBwb3NpdGlvbiA6IHtcbiAqICAgICAgICAgICB4IDogMi4zMjQyNjY0Mjk4MDU4MDUzLFxuICogICAgICAgICAgIHkgOiA0OC44NjExODAxNzMyNDc0NVxuICogICAgICB9LFxuICogICAgICByZXNvdXJjZSA6IGJkdG9wby12YWxoYWxsYSxcbiAqICAgICAgZGlzdGFuY2UgOiAyMDAsXG4gKiAgICAgIFt0aW1lIDogXVxuICogICAgICBtZXRob2QgOiBcImRpc3RhbmNlXCIsXG4gKiAgICAgIGdyYXBoIDogXCJ2b2l0dXJlXCIsXG4gKiAgICAgIHJldmVyc2UgOiBmYWxzZVxuICogIH07XG4gKi9cblxuZnVuY3Rpb24gUHJvY2Vzc0lzb0N1cnZlIChvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb2Nlc3NJc29DdXJ2ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfLmdldE1lc3NhZ2UoXCJDTEFTU19DT05TVFJVQ1RPUlwiLCBcIlByb2Nlc3NJc29DdXJ2ZVwiKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm9tIGRlIGxhIGNsYXNzZSAoaGVyaXRhZ2UpXG4gICAgICogRklYTUUgaW5zdGFuY2Ugb3UgY2xhc3NlID9cbiAgICAgKi9cbiAgICB0aGlzLkNMQVNTTkFNRSA9IFwiUHJvY2Vzc0lzb0N1cnZlXCI7XG5cbiAgICAvLyBhcHBlbCBkdSBjb25zdHJ1Y3RldXIgcGFyIGhlcml0YWdlXG4gICAgQ29tbW9uU2VydmljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFwiR3AuU2VydmljZXMuUHJvY2Vzc0lzb0N1cnZlXCIpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiW0NvbnN0cnVjdGV1ciBQcm9jZXNzSXNvQ3VydmUgKG9wdGlvbnMpXVwiKTtcblxuICAgIGlmICghb3B0aW9ucy5wb3NpdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fTUlTU0lOR1wiLCBcInBvc2l0aW9uXCIpKTtcbiAgICB9XG5cbiAgICAvLyBvbiBsYW5jZSB1bmUgZXhjZXB0aW9uIGFmaW4gZCdldml0ZXIgYXUgc2VydmljZSBkZSBsZSBmYWlyZS4uLlxuICAgIGlmIChvcHRpb25zLnBvc2l0aW9uLnggPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX01JU1NJTkdcIiwgXCJwb3NpdGlvbi54XCIpKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wb3NpdGlvbi55ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwicG9zaXRpb24ueVwiKSk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnRpbWUgJiYgIW9wdGlvbnMuZGlzdGFuY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIChzKSAnZGlzdGFuY2UnIG1pc3NpbmcuIFBhcmFtZXRlciB0aW1lIHRvIGNhbGN1bGF0ZSBhbiBpc29jaHJvbmUsIHBhcmFtZXRlciBkaXN0YW5jZSBmb3IgYW4gaXNvZGlzdGFuY2VcIik7XG4gICAgfVxuXG4gICAgLy8gc2kgb24gYSBxdWUgbGUgcGFyYW3DqHRyZSBcImRpc3RhbmNlXCIgZW4gZW50csOpZSwgb24gY2FsY3VsZSB1bmUgaXNvZGlzdGFuY2UuXG4gICAgLy8gTGUgcGFyYW3DqHRyZSBcIm3DqXRob2RlXCIgZG9pdCBwb3VyIGF2b2lyIHVuZSByw6lwb25zZSBkdSBzZXJ2aWNlLCDDqnRyZSBwYXNzw6kgw6AgXCJkaXN0YW5jZVwiXG4gICAgaWYgKCFvcHRpb25zLnRpbWUgJiYgb3B0aW9ucy5kaXN0YW5jZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubWV0aG9kID0gXCJkaXN0YW5jZVwiO1xuICAgICAgICAvLyBvbiBzdXBwcmltZSBsJ8OpdmVudHVlbCBhdHRyaWJ1dCB0aW1lLCByw6lzaWR1IGQndW4gYXBwZWwgYW50w6lyaWV1clxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRpbWUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMudGltZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNpIG9uIGEgcXVlIGxlIHBhcmFtw6h0cmUgXCJ0aW1lXCIgZW4gZW50csOpZSwgb24gY2FsY3VsZSB1bmUgaXNvY2hyb25lLlxuICAgIC8vIExlIHBhcmFtw6h0cmUgXCJtw6l0aG9kZVwiIGRvaXQgcG91ciBhdm9pciB1bmUgcsOpcG9uc2UgZHUgc2VydmljZSwgw6p0cmUgcGFzc8OpIMOgIFwidGltZVwiXG4gICAgaWYgKG9wdGlvbnMudGltZSAmJiAhb3B0aW9ucy5kaXN0YW5jZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubWV0aG9kID0gXCJ0aW1lXCI7XG4gICAgICAgIC8vIG9uIHN1cHByaW1lIGwnw6l2ZW50dWVsIGF0dHJpYnV0IHRpbWUsIHLDqXNpZHUgZCd1biBhcHBlbCBhbnTDqXJpZXVyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuZGlzdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdSBjYXMgb8O5IG9uIGEgbmkgbCd1biwgbmkgbCdhdXRyZS4uLlxuICAgIHRoaXMub3B0aW9ucy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kIHx8IFwidGltZVwiO1xuXG4gICAgLy8gb3B0aW9ucyBwYXIgZGVmYXV0IGR1IHNlcnZpY2VcbiAgICAvLyBUT0RPOiBtb2RpZmllciBsYSByZXNzb3VyY2UgbG9ycyBkZSBsYSBtaXNlIGVuIHByb2R1Y3Rpb24gZHUgc2VydmljZVxuICAgIHRoaXMub3B0aW9ucy5yZXNvdXJjZSA9IG9wdGlvbnMucmVzb3VyY2UgfHwgXCJiZHRvcG8tdmFsaGFsbGFcIjtcbiAgICB0aGlzLm9wdGlvbnMuZXhjbHVzaW9ucyA9IG9wdGlvbnMuZXhjbHVzaW9ucyB8fCBbXTtcbiAgICB0aGlzLm9wdGlvbnMucmV2ZXJzZSA9IG9wdGlvbnMucmV2ZXJzZSB8fCBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMuc3JzID0gb3B0aW9ucy5zcnMgfHwgXCJFUFNHOjQzMjZcIjtcbiAgICB0aGlzLm9wdGlvbnMuZGlzdGFuY2VVbml0ID0gb3B0aW9ucy5kaXN0YW5jZVVuaXQgfHwgXCJtXCI7XG4gICAgdGhpcy5vcHRpb25zLnRpbWVVbml0ID0gb3B0aW9ucy50aW1lVW5pdCB8fCBcInNlY29uZFwiO1xuXG4gICAgLy8gb3B0aW9ucyBkZXByZWNpZWVzXG4gICAgaWYgKG9wdGlvbnMuc21vb3RoaW5nKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJvcHRpb25zLnNtb290aGluZyBpcyBERVBSRUNBVEVEXCIpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMuc21vb3RoaW5nID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMuaG9sZXMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm9wdGlvbnMuaG9sZXMgaXMgREVQUkVDQVRFRFwiKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLmhvbGVzID0gZmFsc2U7XG5cbiAgICAvLyBHZXN0aW9uIGR1IGdyYXBoZVxuICAgIGlmIChvcHRpb25zLmdyYXBoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmdyYXBoID09PSBcIlZvaXR1cmVcIikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmdyYXBoID0gXCJjYXJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ncmFwaCA9PT0gXCJQaWV0b25cIikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmdyYXBoID0gXCJwZWRlc3RyaWFuXCI7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZ3JhcGggPSBcImNhclwiO1xuICAgIH1cblxuICAgIC8vIEdlc3Rpb25zIGRlcyBjb250cmFpbnRlc1xuICAgIHRoaXMub3B0aW9ucy5jb25zdHJhaW50cyA9IFtdO1xuICAgIGlmIChvcHRpb25zLmNvbnN0cmFpbnRzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuY29uc3RyYWludHMpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG9wdGlvbnMuY29uc3RyYWludHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29uc3RyYWludHMucHVzaChvcHRpb25zLmNvbnN0cmFpbnRzW2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9UWVBFXCIsIFwiY29uc3RyYWludHNcIikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VzdGlvbiBkZSBsJ2FuY2llbiBwYXJhbcOodHJlIGV4Y2x1c2lvbnNcbiAgICB2YXIgY29uc3RyYWludFR1bm5lbCA9IHt9O1xuICAgIHZhciBjb25zdHJhaW50UG9udCA9IHt9O1xuICAgIHZhciBjb25zdHJhaW50QXV0b3JvdXRlID0ge307XG4gICAgaWYgKG9wdGlvbnMuZXhjbHVzaW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5leGNsdXNpb25zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm9wdGlvbnMuZXhjbHVzaW9ucyBpcyBERVBSRUNBVEVEICEhXCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBvcHRpb25zLmV4Y2x1c2lvbnMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhjbHVzaW9uc1tjXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmV4Y2x1c2lvbnNbY10gPSBvcHRpb25zLmV4Y2x1c2lvbnNbY10udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbiBuZSBjcsOpZSBwYXMgdW5lIGVycmV1ciBwb3VyIHLDqXRyby1jb21wYXRpYmlsaXTDqSBhdmVjIGxlcyBhbmNpZW5uZXMgdmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4Y2x1c2lvbnNbY10gPT09IFwidG9sbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRBdXRvcm91dGUuY29uc3RyYWludFR5cGUgPSBcImJhbm5lZFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50QXV0b3JvdXRlLmtleSA9IFwid2F5VHlwZVwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50QXV0b3JvdXRlLm9wZXJhdG9yID0gXCI9XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRBdXRvcm91dGUudmFsdWUgPSBcImF1dG9yb3V0ZVwiO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50QXV0b3JvdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhjbHVzaW9uc1tjXSA9PT0gXCJ0dW5uZWxcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50VHVubmVsLmNvbnN0cmFpbnRUeXBlID0gXCJiYW5uZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFR1bm5lbC5rZXkgPSBcIndheVR5cGVcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFR1bm5lbC5vcGVyYXRvciA9IFwiPVwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50VHVubmVsLnZhbHVlID0gXCJ0dW5uZWxcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludFR1bm5lbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4Y2x1c2lvbnNbY10gPT09IFwiYnJpZGdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFBvbnQuY29uc3RyYWludFR5cGUgPSBcImJhbm5lZFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50UG9udC5rZXkgPSBcIndheVR5cGVcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFBvbnQub3BlcmF0b3IgPSBcIj1cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFBvbnQudmFsdWUgPSBcInBvbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludFBvbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9uIHBhc3NlIGwnb3B0aW9uIG91dHB1dEZvcm1hdCBlbiBtaW51c2N1bGVzIGFmaW4gZCfDqXZpdGVyIGRlcyBleGNlcHRpb25zLlxuICAgIHRoaXMub3B0aW9ucy5vdXRwdXRGb3JtYXQgPSAodHlwZW9mIG9wdGlvbnMub3V0cHV0Rm9ybWF0ID09PSBcInN0cmluZ1wiKSA/IG9wdGlvbnMub3V0cHV0Rm9ybWF0LnRvTG93ZXJDYXNlKCkgOiBcImpzb25cIjtcbiAgICBpZiAob3B0aW9ucy5vdXRwdXRGb3JtYXQgJiYgb3B0aW9ucy5vdXRwdXRGb3JtYXQgIT09IFwianNvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9OT1RfU1VQUE9SVFwiLCBcIm91dHB1dEZvcm1hdFwiKSk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5vdXRwdXRGb3JtYXQgPSBcImpzb25cIjtcblxuICAgIC8vIGdlc3Rpb24gZGUgbCd1cmwgZHUgc2VydmljZSBwYXIgZGVmYXV0XG4gICAgLy8gc2kgbCd1cmwgbidlc3QgcGFzIHJlbnNlaWduw6llLCBpbCBmYXV0IHV0aWxpc2VyIGxlcyB1cmxzIHBhciBkZWZhdXRcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwpIHtcbiAgICAgICAgdmFyIHVybEZvdW5kID0gRGVmYXVsdFVybFNlcnZpY2UuUHJvY2Vzc0lzb0N1cnZlLm5ld1VybCgpO1xuICAgICAgICBpZiAoIXVybEZvdW5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVcmwgYnkgZGVmYXVsdCBub3QgZm91bmQgIVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VydmVyVXJsID0gdXJsRm91bmQ7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiU2VydmV1ciBVUkwgcGFyIGRlZmF1dCA6IFwiICsgdGhpcy5vcHRpb25zLnNlcnZlclVybCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBsZW5kcyBtb2R1bGU6UHJvY2Vzc0lzb0N1cnZlI1xuICovXG5Qcm9jZXNzSXNvQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb21tb25TZXJ2aWNlLnByb3RvdHlwZSwge1xuICAgIC8vIHRvZG9cbiAgICAvLyBnZXR0ZXIvc2V0dGVyXG59KTtcblxuLypcbiAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gKi9cblByb2Nlc3NJc29DdXJ2ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9jZXNzSXNvQ3VydmU7XG5cbi8qKlxuICogQ3LDqWF0aW9uIGRlIGxhIHJlcXXDqnRlIChvdmVyd3JpdGUpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuUHJvY2Vzc0lzb0N1cnZlLnByb3RvdHlwZS5idWlsZFJlcXVlc3QgPSBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb0lzb0N1cnZlID0gbmV3IFByb2Nlc3NJc29DdXJ2ZVJlcXVlc3QodGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCFvSXNvQ3VydmUucHJvY2Vzc1JlcXVlc3RTdHJpbmcoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVRVUVTVF9CVUlMRFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3QgPSBvSXNvQ3VydmUucmVxdWVzdFN0cmluZztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGVycm9yLmNhbGwodGhpcywgbmV3IEVycm9yU2VydmljZShlLm1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnJlcXVlc3QpO1xufTtcblxuLyoqXG4gKiAob3ZlcndyaXRlKVxuICogQW5hbHlzZSBkZSBsYSByZXBvbnNlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25FcnJvciAgIC0gY2FsbGJhY2sgZGVzIGVycmV1cnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2VzcyAtIGNhbGxiYWNrIGRlIHN1Y2PDqHMgZGUgbCdhbmFseXNlIGRlIGxhIHLDqXBvbnNlXG4gKi9cblByb2Nlc3NJc29DdXJ2ZS5wcm90b3R5cGUuYW5hbHl6ZVJlc3BvbnNlID0gZnVuY3Rpb24gKG9uRXJyb3IsIG9uU3VjY2Vzcykge1xuICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2UgOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgICAgICAgb3V0cHV0Rm9ybWF0IDogdGhpcy5vcHRpb25zLm91dHB1dEZvcm1hdCxcbiAgICAgICAgICAgIHJhd1Jlc3BvbnNlIDogdGhpcy5vcHRpb25zLnJhd1Jlc3BvbnNlLFxuICAgICAgICAgICAgb25TdWNjZXNzIDogb25TdWNjZXNzLFxuICAgICAgICAgICAgb25FcnJvciA6IG9uRXJyb3IsXG4gICAgICAgICAgICBzY29wZSA6IHRoaXNcbiAgICAgICAgfTtcblxuICAgICAgICBQcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3RvcnkuYnVpbGQob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb25FcnJvci5jYWxsKHRoaXMsIG5ldyBFcnJvclNlcnZpY2UoXy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FTVBUWVwiKSkpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2Nlc3NJc29DdXJ2ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/ProcessIsoCurve/ProcessIsoCurve.js\n"); + +/***/ }), + +/***/ "./src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js": +/*!************************************************************************!*\ + !*** ./src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js ***! + \************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _model_ProcessIsoCurveParam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./model/ProcessIsoCurveParam */ \"./src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js\");\n\n\n\n\n/**\n * @classdesc\n * Classe de gestion des requêtes sur le service de calcul d'isoschrone/isodistance.\n * Les requêtes peuvent être en mode GET ou POST,\n * et le format de sorti est en JSON.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveRequest\n * @param {Object} options - options\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * graph : \"car\",\n * method : 'time',\n * time : 1000, //distance : 200\n * reverse : false,\n * srs : 'EPSG:4326'\n * };\n *\n * try {\n *\n * var oIsoCurve = new ProcessIsoCurveRequest (options);\n * if (!oIsoCurve.processRequestString ()) {\n * // error\n * }\n *\n * var request = oIsoCurve.requestString;\n *\n * } catch (e) {\n * // error\n * }\n * @private\n */\nfunction ProcessIsoCurveRequest(options) {\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"ProcessIsoCurveRequest\");\n this.logger.trace(\"[Constructeur ProcessIsoCurveRequest ()]\");\n if (!(this instanceof ProcessIsoCurveRequest)) {\n throw new TypeError(\"ProcessIsoCurveRequest constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /**\n * Liste des options\n */\n this.settings = options;\n\n /**\n * Mode HTPP.\n * Par defaut, \"GET\".\n * @type {String}\n */\n this.mode = this.settings.httpMethod || \"GET\";\n}\nProcessIsoCurveRequest.prototype = {\n /**\n * @lends module:ProcessIsoCurveRequest#\n */\n\n /**\n * Requête\n * @type {String}\n */\n requestString: null,\n /**\n * Constructeur (alias)\n */\n constructor: ProcessIsoCurveRequest,\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // (http://wxs.ign.fr/KEY/isochrone?)\n * // resource=&\n * // point=&\n * // costValue=&\n * // costType=&\n * // profile=&\n * // constraints=&\n * // direction=&\n * // crs=\n *\n * // POST out :\n * {\n * resource: \"bduni-idf-pgr\",\n * point: \"2.337306,48.849319\",\n * costValue: 100,\n * costType: \"time\",\n * profile: \"car\",\n * constraints: [{\n * constraintType: \"banned\",\n * key: \"ways_type\",\n * operator: \"=\",\n * value: \"autoroute\"\n * }]\n * }\n *\n * @returns {String} request\n */\n processRequestString: function processRequestString() {\n var request = \"\";\n var i = 0;\n switch (this.mode) {\n case \"GET\":\n this.logger.trace(\"Process GET Request\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new _model_ProcessIsoCurveParam__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.settings);\n var params = oParams.getParams();\n for (i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n break;\n case \"POST\":\n this.logger.trace(\"Process POST Request\");\n // creation du JSON\n var postRequest = {};\n postRequest.resource = this.settings.resource;\n postRequest.point = this.settings.position.x + \",\" + this.settings.position.y;\n if (this.settings.method === \"distance\") {\n postRequest.costType = \"distance\";\n postRequest.costValue = this.settings.distance;\n } else {\n postRequest.costType = \"time\";\n postRequest.costValue = this.settings.time;\n }\n postRequest.profile = this.settings.graph;\n if (this.settings.reverse) {\n postRequest.direction = \"arrival\";\n } else {\n postRequest.direction = \"departure\";\n }\n postRequest.constraints = this.settings.constraints;\n postRequest.distanceUnit = this.settings.distanceUnit;\n postRequest.timeUnit = this.settings.timeUnit;\n postRequest.crs = this.settings.srs;\n\n // conversion en chaîne de caractères\n request = JSON.stringify(postRequest);\n break;\n default:\n this.logger.error(\"No other HTTP method supported by the service !\");\n }\n this.logger.trace(request);\n this.requestString = request;\n return this.requestString;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProcessIsoCurveRequest);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUmVxdWVzdC9Qcm9jZXNzSXNvQ3VydmVSZXF1ZXN0LmpzPzcwMzQiXSwibmFtZXMiOlsiUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdCIsIm9wdGlvbnMiLCJsb2dnZXIiLCJMb2dnZXIiLCJnZXRMb2dnZXIiLCJ0cmFjZSIsIlR5cGVFcnJvciIsIkVycm9yIiwiXyIsImdldE1lc3NhZ2UiLCJzZXR0aW5ncyIsIm1vZGUiLCJodHRwTWV0aG9kIiwicHJvdG90eXBlIiwicmVxdWVzdFN0cmluZyIsImNvbnN0cnVjdG9yIiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJyZXF1ZXN0IiwiaSIsIm9QYXJhbXMiLCJQcm9jZXNzSXNvQ3VydmVQYXJhbSIsInBhcmFtcyIsImdldFBhcmFtcyIsImxlbmd0aCIsIm8iLCJrIiwidiIsInBvc3RSZXF1ZXN0IiwicmVzb3VyY2UiLCJwb2ludCIsInBvc2l0aW9uIiwieCIsInkiLCJtZXRob2QiLCJjb3N0VHlwZSIsImNvc3RWYWx1ZSIsImRpc3RhbmNlIiwidGltZSIsInByb2ZpbGUiLCJncmFwaCIsInJldmVyc2UiLCJkaXJlY3Rpb24iLCJjb25zdHJhaW50cyIsImRpc3RhbmNlVW5pdCIsInRpbWVVbml0IiwiY3JzIiwic3JzIiwiSlNPTiIsInN0cmluZ2lmeSIsImVycm9yIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFvRDtBQUNIO0FBQ2U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLHNCQUFzQkEs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QVcsQ0FBQ1EsU0FBUyxHQUFHLElBQUksQ0FBQ3pCLFFBQVEsQ0FBQzJCLElBQUk7UUFDOUM7UUFFQVYsV0FBVyxDQUFDVyxPQUFPLEdBQUcsSUFBSSxDQUFDNUIsUUFBUSxDQUFDNkIsS0FBSztRQUV6QyxJQUFJLElBQUksQ0FBQzdCLFFBQVEsQ0FBQzhCLE9BQU8sRUFBRTtVQUN2QmIsV0FBVyxDQUFDYyxTQUFTLEdBQUcsU0FBUztRQUNyQyxDQUFDLE1BQU07VUFDSGQsV0FBVyxDQUFDYyxTQUFTLEdBQUcsV0FBVztRQUN2QztRQUVBZCxXQUFXLENBQUNlLFdBQVcsR0FBRyxJQUFJLENBQUNoQyxRQUFRLENBQUNnQyxXQUFXO1FBRW5EZixXQUFXLENBQUNnQixZQUFZLEdBQUcsSUFBSSxDQUFDakMsUUFBUSxDQUFDaUMsWUFBWTtRQUVyRGhCLFdBQVcsQ0FBQ2lCLFFBQVEsR0FBRyxJQUFJLENBQUNsQyxRQUFRLENBQUNrQyxRQUFRO1FBRTdDakIsV0FBVyxDQUFDa0IsR0FBRyxHQUFHLElBQUksQ0FBQ25DLFFBQVEsQ0FBQ29DLEdBQUc7O1FBRW5DO1FBQ0E3QixPQUFPLEdBQUc4QixJQUFJLENBQUNDLFNBQVMsQ0FBQ3JCLFdBQVcsQ0FBQztRQUNyQztNQUVKO1FBQ0ksSUFBSSxDQUFDekIsTUFBTSxDQUFDK0MsS0FBSyxDQUFDLGlEQUFpRCxDQUFDO0lBQzVFO0lBRUEsSUFBSSxDQUFDL0MsTUFBTSxDQUFDRyxLQUFLLENBQUNZLE9BQU8sQ0FBQztJQUMxQixJQUFJLENBQUNILGFBQWEsR0FBR0csT0FBTztJQUU1QixPQUFPLElBQUksQ0FBQ0gsYUFBYTtFQUM3QjtBQUNKLENBQUM7QUFFY2QscUZBQXNCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL1Byb2Nlc3NJc29DdXJ2ZS9SZXF1ZXN0L1Byb2Nlc3NJc29DdXJ2ZVJlcXVlc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uLy4uLy4uL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzXCI7XG5pbXBvcnQgUHJvY2Vzc0lzb0N1cnZlUGFyYW0gZnJvbSBcIi4vbW9kZWwvUHJvY2Vzc0lzb0N1cnZlUGFyYW1cIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBDbGFzc2UgZGUgZ2VzdGlvbiBkZXMgcmVxdcOqdGVzIHN1ciBsZSBzZXJ2aWNlIGRlIGNhbGN1bCBkJ2lzb3NjaHJvbmUvaXNvZGlzdGFuY2UuXG4gKiAgTGVzIHJlcXXDqnRlcyBwZXV2ZW50IMOqdHJlIGVuIG1vZGUgR0VUIG91IFBPU1QsXG4gKiAgZXQgbGUgZm9ybWF0IGRlIHNvcnRpIGVzdCBlbiBKU09OLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIEdwLlNlcnZpY2VzLlByb2Nlc3NJc29DdXJ2ZS5SZXF1ZXN0LlByb2Nlc3NJc29DdXJ2ZVJlcXVlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgb3B0aW9ucyA9IHtcbiAqICAgICAgaHR0cE1ldGhvZCA6ICdHRVQnLCAvLyBHRVR8UE9TVFxuICogICAgICAvLyBzcMOpY2lmaXF1ZSBhdSBzZXJ2aWNlXG4gKiAgICAgIHBvc2l0aW9uIDoge1xuICogICAgICAgICAgeCA6IDIuMzI0MjY2NDI5ODA1ODA1MyxcbiAqICAgICAgICAgIHkgOiA0OC44NjExODAxNzMyNDc0NVxuICogICAgICB9LFxuICogICAgICBncmFwaCA6IFwiY2FyXCIsXG4gKiAgICAgIG1ldGhvZCA6ICd0aW1lJyxcbiAqICAgICAgdGltZSA6IDEwMDAsIC8vZGlzdGFuY2UgOiAyMDBcbiAqICAgICAgcmV2ZXJzZSA6IGZhbHNlLFxuICogICAgICBzcnMgOiAnRVBTRzo0MzI2J1xuICogIH07XG4gKlxuICogdHJ5IHtcbiAqXG4gKiAgICAgIHZhciBvSXNvQ3VydmUgPSBuZXcgUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdCAob3B0aW9ucyk7XG4gKiAgICAgIGlmICghb0lzb0N1cnZlLnByb2Nlc3NSZXF1ZXN0U3RyaW5nICgpKSB7XG4gKiAgICAgICAgICAvLyBlcnJvclxuICogICAgICB9XG4gKlxuICogICAgICB2YXIgcmVxdWVzdCA9IG9Jc29DdXJ2ZS5yZXF1ZXN0U3RyaW5nO1xuICpcbiAqIH0gY2F0Y2ggKGUpIHtcbiAqICAgICAgLy8gZXJyb3JcbiAqIH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFByb2Nlc3NJc29DdXJ2ZVJlcXVlc3QgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJQcm9jZXNzSXNvQ3VydmVSZXF1ZXN0XCIpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiW0NvbnN0cnVjdGV1ciBQcm9jZXNzSXNvQ3VydmVSZXF1ZXN0ICgpXVwiKTtcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9jZXNzSXNvQ3VydmVSZXF1ZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgIH1cblxuICAgIC8vIGV4aXN0YW5jZSBkZXMgb3B0aW9uc1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fRU1QVFlcIiwgXCJvcHRpb25zXCIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZSBkZXMgb3B0aW9uc1xuICAgICAqL1xuICAgIHRoaXMuc2V0dGluZ3MgPSBvcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogTW9kZSBIVFBQLlxuICAgICAqIFBhciBkZWZhdXQsIFwiR0VUXCIuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSB0aGlzLnNldHRpbmdzLmh0dHBNZXRob2QgfHwgXCJHRVRcIjtcbn1cblxuUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdC5wcm90b3R5cGUgPSB7XG5cbiAgICAvKipcbiAgICAgKiBAbGVuZHMgbW9kdWxlOlByb2Nlc3NJc29DdXJ2ZVJlcXVlc3QjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBSZXF1w6p0ZVxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgcmVxdWVzdFN0cmluZyA6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIDogUHJvY2Vzc0lzb0N1cnZlUmVxdWVzdCxcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdGlvbiBkZSBsYSByZXF1w6p0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gR0VUICBvdXQgOlxuICAgICAqICAgLy8gIChodHRwOi8vd3hzLmlnbi5mci9LRVkvaXNvY2hyb25lPylcbiAgICAgKiAgIC8vICByZXNvdXJjZT0mXG4gICAgICogICAvLyAgcG9pbnQ9JlxuICAgICAqICAgLy8gIGNvc3RWYWx1ZT0mXG4gICAgICogICAvLyAgY29zdFR5cGU9JlxuICAgICAqICAgLy8gIHByb2ZpbGU9JlxuICAgICAqICAgLy8gIGNvbnN0cmFpbnRzPSZcbiAgICAgKiAgIC8vICBkaXJlY3Rpb249JlxuICAgICAqICAgLy8gIGNycz1cbiAgICAgKlxuICAgICAqIC8vIFBPU1Qgb3V0IDpcbiAgICAgKiB7XG4gICAgICogIHJlc291cmNlOiBcImJkdW5pLWlkZi1wZ3JcIixcbiAgICAgKiAgcG9pbnQ6IFwiMi4zMzczMDYsNDguODQ5MzE5XCIsXG4gICAgICogIGNvc3RWYWx1ZTogMTAwLFxuICAgICAqICBjb3N0VHlwZTogXCJ0aW1lXCIsXG4gICAgICogIHByb2ZpbGU6IFwiY2FyXCIsXG4gICAgICogIGNvbnN0cmFpbnRzOiBbe1xuICAgICAqICAgICAgY29uc3RyYWludFR5cGU6IFwiYmFubmVkXCIsXG4gICAgICogICAgICBrZXk6IFwid2F5c190eXBlXCIsXG4gICAgICogICAgICBvcGVyYXRvcjogXCI9XCIsXG4gICAgICogICAgICB2YWx1ZTogXCJhdXRvcm91dGVcIlxuICAgICAqICB9XVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm9jZXNzUmVxdWVzdFN0cmluZyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBcIlwiO1xuICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJHRVRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIlByb2Nlc3MgR0VUIFJlcXVlc3RcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBNYXBwaW5nIGRlcyBvcHRpb25zIGF2ZWMgbGUgc2VydmljZSBkZSBsJ0FQSSBSRVNUXG4gICAgICAgICAgICAgICAgdmFyIG9QYXJhbXMgPSBuZXcgUHJvY2Vzc0lzb0N1cnZlUGFyYW0odGhpcy5zZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG9QYXJhbXMuZ2V0UGFyYW1zKCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvID0gcGFyYW1zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCArPSBcIiZcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ICs9IG8uayArIFwiPVwiICsgby52O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiUE9TVFwiOlxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiUHJvY2VzcyBQT1NUIFJlcXVlc3RcIik7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRpb24gZHUgSlNPTlxuICAgICAgICAgICAgICAgIHZhciBwb3N0UmVxdWVzdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgcG9zdFJlcXVlc3QucmVzb3VyY2UgPSB0aGlzLnNldHRpbmdzLnJlc291cmNlO1xuXG4gICAgICAgICAgICAgICAgcG9zdFJlcXVlc3QucG9pbnQgPSB0aGlzLnNldHRpbmdzLnBvc2l0aW9uLnggKyBcIixcIiArIHRoaXMuc2V0dGluZ3MucG9zaXRpb24ueTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1ldGhvZCA9PT0gXCJkaXN0YW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc3RSZXF1ZXN0LmNvc3RUeXBlID0gXCJkaXN0YW5jZVwiO1xuICAgICAgICAgICAgICAgICAgICBwb3N0UmVxdWVzdC5jb3N0VmFsdWUgPSB0aGlzLnNldHRpbmdzLmRpc3RhbmNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc3RSZXF1ZXN0LmNvc3RUeXBlID0gXCJ0aW1lXCI7XG4gICAgICAgICAgICAgICAgICAgIHBvc3RSZXF1ZXN0LmNvc3RWYWx1ZSA9IHRoaXMuc2V0dGluZ3MudGltZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwb3N0UmVxdWVzdC5wcm9maWxlID0gdGhpcy5zZXR0aW5ncy5ncmFwaDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnJldmVyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdFJlcXVlc3QuZGlyZWN0aW9uID0gXCJhcnJpdmFsXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdFJlcXVlc3QuZGlyZWN0aW9uID0gXCJkZXBhcnR1cmVcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwb3N0UmVxdWVzdC5jb25zdHJhaW50cyA9IHRoaXMuc2V0dGluZ3MuY29uc3RyYWludHM7XG5cbiAgICAgICAgICAgICAgICBwb3N0UmVxdWVzdC5kaXN0YW5jZVVuaXQgPSB0aGlzLnNldHRpbmdzLmRpc3RhbmNlVW5pdDtcblxuICAgICAgICAgICAgICAgIHBvc3RSZXF1ZXN0LnRpbWVVbml0ID0gdGhpcy5zZXR0aW5ncy50aW1lVW5pdDtcblxuICAgICAgICAgICAgICAgIHBvc3RSZXF1ZXN0LmNycyA9IHRoaXMuc2V0dGluZ3Muc3JzO1xuXG4gICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBlbiBjaGHDrm5lIGRlIGNhcmFjdMOocmVzXG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IEpTT04uc3RyaW5naWZ5KHBvc3RSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIk5vIG90aGVyIEhUVFAgbWV0aG9kIHN1cHBvcnRlZCBieSB0aGUgc2VydmljZSAhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UocmVxdWVzdCk7XG4gICAgICAgIHRoaXMucmVxdWVzdFN0cmluZyA9IHJlcXVlc3Q7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFN0cmluZztcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9jZXNzSXNvQ3VydmVSZXF1ZXN0O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js\n"); + +/***/ }), + +/***/ "./src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js": +/*!****************************************************************************!*\ + !*** ./src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js ***! + \****************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes du service de calcul des iso.\n * Permet le mapping avec les options du service.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveParam\n * @param {Object} options - options\n * @private\n *\n */\nfunction ProcessIsoCurveParam(options) {\n if (!(this instanceof ProcessIsoCurveParam)) {\n throw new TypeError(\"ProcessIsoCurveParam constructor cannot be called as a function.\");\n }\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur ProcessIsoCurveParam ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Identifiant de l’isochrone */\n this.id = this.options.id;\n\n /** Resource */\n this.resource = this.options.resource;\n\n /** Coordonnées de départ (ou arrivée si le reverse est à true). */\n this.point = this.options.position;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /**\n * Profil de véhicule à utiliser pour le calcul.\n * Voiture ou Pieton\n */\n this.profile = this.options.graph;\n\n /** Liste des règles de restrictions à utiliser */\n this.constraints = this.options.constraints;\n this.reverse = this.options.reverse;\n this.timeUnit = this.options.timeUnit;\n this.distanceUnit = this.options.distanceUnit;\n\n /**\n * \"time\" pour isochrone ou \"distance\" for isodistance.\n * Par defaut, time...\n */\n if (this.options.method === \"distance\") {\n this.costType = \"distance\";\n this.costValue = this.options.distance;\n if (this.distanceUnit === \"m\" && this.costValue >= 50000) {\n this.distanceUnit = \"km\";\n this.costValue /= 1000;\n }\n } else {\n this.costType = \"time\";\n this.costValue = this.options.time;\n }\n}\n\n/**\n * CLASSNAME\n */\nProcessIsoCurveParam.CLASSNAME = \"ProcessIsoCurveParam\";\nProcessIsoCurveParam.prototype = {\n /**\n * @lends module:ProcessIsoCurveParam#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor: ProcessIsoCurveParam,\n /**\n * Retourne le point\n * @returns {String} x,y\n */\n getLocation: function getLocation() {\n return this.point.x + \",\" + this.point.y;\n },\n /**\n * Retourne l'unité de la distance\n * @returns {String}\n */\n getDistanceUnit: function getDistanceUnit() {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n /**\n * Retourne la liste des contraintes\n * @returns {String}\n */\n getConstraints: function getConstraints() {\n var constraintArray = [];\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n },\n /**\n * Retourne la direction\n * @returns {String}\n */\n getDirection: function getDirection() {\n if (this.reverse) {\n return \"arrival\";\n } else {\n return \"departure\";\n }\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]} KVP\n */\nProcessIsoCurveParam.prototype.getParams = function () {\n var map = [];\n map.push({\n k: \"resource\",\n v: this.resource\n });\n map.push({\n k: \"point\",\n v: this.getLocation()\n });\n map.push({\n k: \"direction\",\n v: this.getDirection()\n });\n map.push({\n k: \"costType\",\n v: this.costType\n });\n map.push({\n k: \"costValue\",\n v: this.costValue\n });\n map.push({\n k: \"profile\",\n v: this.profile\n });\n map.push({\n k: \"timeUnit\",\n v: this.timeUnit\n });\n map.push({\n k: \"distanceUnit\",\n v: this.getDistanceUnit()\n });\n if (this.crs) {\n map.push({\n k: \"crs\",\n v: this.crs\n });\n }\n if (this.constraints) {\n map.push({\n k: \"constraints\",\n v: this.getConstraints()\n });\n }\n return map;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProcessIsoCurveParam);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUmVxdWVzdC9tb2RlbC9Qcm9jZXNzSXNvQ3VydmVQYXJhbS5qcz85NzI1Il0sIm5hbWVzIjpbIlByb2Nlc3NJc29DdXJ2ZVBhcmFtIiwib3B0aW9ucyIsIlR5cGVFcnJvciIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwiaWQiLCJyZXNvdXJjZSIsInBvaW50IiwicG9zaXRpb24iLCJjcnMiLCJzcnMiLCJwcm9maWxlIiwiZ3JhcGgiLCJjb25zdHJhaW50cyIsInJldmVyc2UiLCJ0aW1lVW5pdCIsImRpc3RhbmNlVW5pdCIsIm1ldGhvZCIsImNvc3RUeXBlIiwiY29zdFZhbHVlIiwiZGlzdGFuY2UiLCJ0aW1lIiwiQ0xBU1NOQU1FIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJnZXRMb2NhdGlvbiIsIngiLCJ5IiwiZ2V0RGlzdGFuY2VVbml0IiwiZ2V0Q29uc3RyYWludHMiLCJjb25zdHJhaW50QXJyYXkiLCJsZW5ndGgiLCJrIiwicHVzaCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwiZ2V0RGlyZWN0aW9uIiwiZ2V0UGFyYW1zIiwibWFwIiwidiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0Esb0JBQW9CQSxDQUFFQyxPQUFPLEVBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksWUFBWUQsb0JBQW9CLENBQUMsRUFBRTtJQUN6QyxNQUFNLElBQUlFLFNBQVMsQ0FBQyxrRUFBa0UsQ0FBQztFQUMzRjtFQUVBLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztFQUNoQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLHdDQUF3QyxDQUFDOztFQUUzRDtBQUNKO0FB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RyxTQUFTO0lBQ2JRLENBQUMsRUFBRyxJQUFJLENBQUM3QjtFQUNiLENBQUMsQ0FBQztFQUVGNEIsR0FBRyxDQUFDTixJQUFJLENBQUM7SUFDTEQsQ0FBQyxFQUFHLFVBQVU7SUFDZFEsQ0FBQyxFQUFHLElBQUksQ0FBQ3pCO0VBQ2IsQ0FBQyxDQUFDO0VBRUZ3QixHQUFHLENBQUNOLElBQUksQ0FBQztJQUNMRCxDQUFDLEVBQUcsY0FBYztJQUNsQlEsQ0FBQyxFQUFHLElBQUksQ0FBQ1osZUFBZSxDQUFDO0VBQzdCLENBQUMsQ0FBQztFQUVGLElBQUksSUFBSSxDQUFDbkIsR0FBRyxFQUFFO0lBQ1Y4QixHQUFHLENBQUNOLElBQUksQ0FBQztNQUNMRCxDQUFDLEVBQUcsS0FBSztNQUNUUSxDQUFDLEVBQUcsSUFBSSxDQUFDL0I7SUFDYixDQUFDLENBQUM7RUFDTjtFQUVBLElBQUksSUFBSSxDQUFDSSxXQUFXLEVBQUU7SUFDbEIwQixHQUFHLENBQUNOLElBQUksQ0FBQztNQUNMRCxDQUFDLEVBQUcsYUFBYTtNQUNqQlEsQ0FBQyxFQUFHLElBQUksQ0FBQ1gsY0FBYyxDQUFDO0lBQzVCLENBQUMsQ0FBQztFQUNOO0VBRUEsT0FBT1UsR0FBRztBQUNkLENBQUM7QUFFY3pDLG1GQUFvQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUmVxdWVzdC9tb2RlbC9Qcm9jZXNzSXNvQ3VydmVQYXJhbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIENsYXNzZSBkZSBnZXN0aW9uIGRlcyBwYXJhbS4gZGVzIHJlcXXDqnRlcyBkdSBzZXJ2aWNlIGRlIGNhbGN1bCBkZXMgaXNvLlxuICogUGVybWV0IGxlIG1hcHBpbmcgYXZlYyBsZXMgb3B0aW9ucyBkdSBzZXJ2aWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIEdwLlNlcnZpY2VzLlByb2Nlc3NJc29DdXJ2ZS5SZXF1ZXN0LlByb2Nlc3NJc29DdXJ2ZVBhcmFtXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAqIEBwcml2YXRlXG4gKlxuICovXG5mdW5jdGlvbiBQcm9jZXNzSXNvQ3VydmVQYXJhbSAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9jZXNzSXNvQ3VydmVQYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb2Nlc3NJc29DdXJ2ZVBhcmFtIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCk7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIFByb2Nlc3NJc29DdXJ2ZVBhcmFtICgpXVwiKTtcblxuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgZW4gcGFyYW3DqnRyZXMgZHUgY29uc3RydWN0ZXVyLlxuICAgICAqL1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBtYXBwaW5nIGRlcyBvcHRpb25zIGF2ZWMgbCdBUEkgUkVTVFxuXG4gICAgLyoqIElkZW50aWZpYW50IGRlIGzigJlpc29jaHJvbmUgKi9cbiAgICB0aGlzLmlkID0gdGhpcy5vcHRpb25zLmlkO1xuXG4gICAgLyoqIFJlc291cmNlICovXG4gICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMub3B0aW9ucy5yZXNvdXJjZTtcblxuICAgIC8qKiBDb29yZG9ubsOpZXMgZGUgZMOpcGFydCAob3UgYXJyaXbDqWUgc2kgbGUgcmV2ZXJzZSBlc3Qgw6AgdHJ1ZSkuICovXG4gICAgdGhpcy5wb2ludCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbjtcblxuICAgIC8qKiBwcm9qZWN0aW9uIChjb2RlIEVQU0cgY29tbWUgZXBzZzo0MzI2IG91IHdnczg0KSAqL1xuICAgIHRoaXMuY3JzID0gdGhpcy5vcHRpb25zLnNycztcblxuICAgIC8qKlxuICAgICAqIFByb2ZpbCBkZSB2w6loaWN1bGUgw6AgdXRpbGlzZXIgcG91ciBsZSBjYWxjdWwuXG4gICAgICogVm9pdHVyZSBvdSBQaWV0b25cbiAgICAgKi9cbiAgICB0aGlzLnByb2ZpbGUgPSB0aGlzLm9wdGlvbnMuZ3JhcGg7XG5cbiAgICAvKiogTGlzdGUgZGVzIHLDqGdsZXMgZGUgcmVzdHJpY3Rpb25zIMOgIHV0aWxpc2VyICovXG4gICAgdGhpcy5jb25zdHJhaW50cyA9IHRoaXMub3B0aW9ucy5jb25zdHJhaW50cztcblxuICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMub3B0aW9ucy5yZXZlcnNlO1xuXG4gICAgdGhpcy50aW1lVW5pdCA9IHRoaXMub3B0aW9ucy50aW1lVW5pdDtcblxuICAgIHRoaXMuZGlzdGFuY2VVbml0ID0gdGhpcy5vcHRpb25zLmRpc3RhbmNlVW5pdDtcblxuICAgIC8qKlxuICAgICAqIFwidGltZVwiIHBvdXIgaXNvY2hyb25lIG91IFwiZGlzdGFuY2VcIiBmb3IgaXNvZGlzdGFuY2UuXG4gICAgICogUGFyIGRlZmF1dCwgdGltZS4uLlxuICAgICAqL1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWV0aG9kID09PSBcImRpc3RhbmNlXCIpIHtcbiAgICAgICAgdGhpcy5jb3N0VHlwZSA9IFwiZGlzdGFuY2VcIjtcbiAgICAgICAgdGhpcy5jb3N0VmFsdWUgPSB0aGlzLm9wdGlvbnMuZGlzdGFuY2U7XG4gICAgICAgIGlmICh0aGlzLmRpc3RhbmNlVW5pdCA9PT0gXCJtXCIgJiYgdGhpcy5jb3N0VmFsdWUgPj0gNTAwMDApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VVbml0ID0gXCJrbVwiO1xuICAgICAgICAgICAgdGhpcy5jb3N0VmFsdWUgLz0gMTAwMDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29zdFR5cGUgPSBcInRpbWVcIjtcbiAgICAgICAgdGhpcy5jb3N0VmFsdWUgPSB0aGlzLm9wdGlvbnMudGltZTtcbiAgICB9XG59XG5cbi8qKlxuICogQ0xBU1NOQU1FXG4gKi9cblByb2Nlc3NJc29DdXJ2ZVBhcmFtLkNMQVNTTkFNRSA9IFwiUHJvY2Vzc0lzb0N1cnZlUGFyYW1cIjtcblxuUHJvY2Vzc0lzb0N1cnZlUGFyYW0ucHJvdG90eXBlID0ge1xuXG4gICAgLyoqXG4gICAgICogQGxlbmRzIG1vZHVsZTpQcm9jZXNzSXNvQ3VydmVQYXJhbSNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgOiBQcm9jZXNzSXNvQ3VydmVQYXJhbSxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIGxlIHBvaW50XG4gICAgICogQHJldHVybnMge1N0cmluZ30geCx5XG4gICAgICovXG4gICAgZ2V0TG9jYXRpb24gOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50LnggKyBcIixcIiArIHRoaXMucG9pbnQueTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0b3VybmUgbCd1bml0w6kgZGUgbGEgZGlzdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuICAgIGdldERpc3RhbmNlVW5pdCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2VVbml0ID09PSBcIm1cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwibWV0ZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXN0YW5jZVVuaXQgPT09IFwia21cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwia2lsb21ldGVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIGxhIGxpc3RlIGRlcyBjb250cmFpbnRlc1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAgICovXG4gICAgZ2V0Q29uc3RyYWludHMgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb25zdHJhaW50QXJyYXkgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5jb25zdHJhaW50cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5jb25zdHJhaW50cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRBcnJheS5wdXNoKEpTT04uc3RyaW5naWZ5KHRoaXMuY29uc3RyYWludHNba10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29uc3RyYWludEFycmF5LmpvaW4oXCJ8XCIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXRvdXJuZSBsYSBkaXJlY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAqL1xuICAgIGdldERpcmVjdGlvbiA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucmV2ZXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYXJyaXZhbFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiZGVwYXJ0dXJlXCI7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFRhYmxlYXUgZGUgY2xlZnMvdmFsZXVycyBwb3VyIHBhcmFtLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3RbXX0gS1ZQXG4gKi9cblByb2Nlc3NJc29DdXJ2ZVBhcmFtLnByb3RvdHlwZS5nZXRQYXJhbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1hcCA9IFtdO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJyZXNvdXJjZVwiLFxuICAgICAgICB2IDogdGhpcy5yZXNvdXJjZVxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJwb2ludFwiLFxuICAgICAgICB2IDogdGhpcy5nZXRMb2NhdGlvbigpXG4gICAgfSk7XG5cbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcImRpcmVjdGlvblwiLFxuICAgICAgICB2IDogdGhpcy5nZXREaXJlY3Rpb24oKVxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJjb3N0VHlwZVwiLFxuICAgICAgICB2IDogdGhpcy5jb3N0VHlwZVxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJjb3N0VmFsdWVcIixcbiAgICAgICAgdiA6IHRoaXMuY29zdFZhbHVlXG4gICAgfSk7XG5cbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcInByb2ZpbGVcIixcbiAgICAgICAgdiA6IHRoaXMucHJvZmlsZVxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJ0aW1lVW5pdFwiLFxuICAgICAgICB2IDogdGhpcy50aW1lVW5pdFxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJkaXN0YW5jZVVuaXRcIixcbiAgICAgICAgdiA6IHRoaXMuZ2V0RGlzdGFuY2VVbml0KClcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNycykge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJjcnNcIixcbiAgICAgICAgICAgIHYgOiB0aGlzLmNyc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cykge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJjb25zdHJhaW50c1wiLFxuICAgICAgICAgICAgdiA6IHRoaXMuZ2V0Q29uc3RyYWludHMoKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvY2Vzc0lzb0N1cnZlUGFyYW07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js\n"); + +/***/ }), + +/***/ "./src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js": +/*!*********************************************************************************!*\ + !*** ./src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js ***! + \*********************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./model/ProcessIsoCurveResponse */ \"./src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js\");\n\n\n\n\n\n/**\n * Factory pour générer une reponse JSON à partir d'un JSON\n * (Factory)\n *\n * @module ProcessIsoCurveResponseFactory\n * @alias Gp.Services.ProcessIsoCurve.Response.ProcessIsoCurveResponseFactory\n * @private\n */\nvar ProcessIsoCurveResponseFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant ProcessIsoCurve\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"ProcessIsoCurveResponseFactory\");\n logger.trace([\"ProcessIsoCurveResponseFactory::build()\"]);\n var data = null;\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la reponse\n // création de l'objet de réponse\n data = new _model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n\n // remplissage de l'objet créé avec les attribtuts de la réponse du service\n if (JSONResponse) {\n if (JSONResponse.costType === \"distance\") {\n data.time = \"\";\n data.distance = JSONResponse.costValue;\n } else {\n data.time = JSONResponse.costValue;\n data.distance = \"\";\n }\n data.message = \"\";\n data.id = \"\";\n data.srs = JSONResponse.crs;\n data.geometry = JSONResponse.geometry;\n var coords = JSONResponse.point.split(\",\");\n if (data.location) {\n data.location.x = coords[0];\n data.location.y = coords[1];\n }\n } else {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_ANALYSE\", options.response)));\n return;\n }\n\n // info : en cas de problèmes de droits (clé invalide ou autre), la réponse est au format XML !!\n // ex. Key does not exist or has expired\n // mais le statut est 403, l'erreur est donc remontée plus tôt.\n if (data.exceptionReport) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"].TYPE_SRVERR,\n status: 200\n }));\n return;\n }\n }\n } else {\n // si la réponse est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProcessIsoCurveResponseFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUmVzcG9uc2UvUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2VGYWN0b3J5LmpzP2RkNTAiXSwibmFtZXMiOlsiUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2VGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJkYXRhIiwicmVzcG9uc2UiLCJyYXdSZXNwb25zZSIsIkpTT05SZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsIlByb2Nlc3NJc29DdXJ2ZVJlc3BvbnNlIiwiY29zdFR5cGUiLCJ0aW1lIiwiZGlzdGFuY2UiLCJjb3N0VmFsdWUiLCJtZXNzYWdlIiwiaWQiLCJzcnMiLCJjcnMiLCJnZW9tZXRyeSIsImNvb3JkcyIsInBvaW50Iiwic3BsaXQiLCJsb2NhdGlvbiIsIngiLCJ5Iiwib25FcnJvciIsImNhbGwiLCJzY29wZSIsIkVycm9yU2VydmljZSIsIk1SZXMiLCJnZXRNZXNzYWdlIiwiZXhjZXB0aW9uUmVwb3J0IiwidHlwZSIsIlRZUEVfU1JWRVJSIiwic3RhdHVzIiwib25TdWNjZXNzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW9EO0FBQ0E7QUFDUTtBQUNVOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsOEJBQThCLEdBQUc7RUFFakM7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lDLEtBQUssRUFBRyxTQUFSQSxLQUFLQSxDQUFhQyxPQUFPLEVBQUU7SUFDdkI7SUFDQSxJQUFJQyxNQUFNLEdBQUdDLDhEQUFNLENBQUNDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMvREYsTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FB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QUksQ0FBQztFQUMvQztBQUNKLENBQUM7QUFFY1AsNkZBQThCIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL1Byb2Nlc3NJc29DdXJ2ZS9SZXNwb25zZS9Qcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi9VdGlscy9Mb2dnZXJCeURlZmF1bHRcIjtcbmltcG9ydCBNUmVzIGZyb20gXCIuLi8uLi8uLi9VdGlscy9NZXNzYWdlc1Jlc291cmNlc1wiO1xuaW1wb3J0IEVycm9yU2VydmljZSBmcm9tIFwiLi4vLi4vLi4vRXhjZXB0aW9ucy9FcnJvclNlcnZpY2VcIjtcbmltcG9ydCBQcm9jZXNzSXNvQ3VydmVSZXNwb25zZSBmcm9tIFwiLi9tb2RlbC9Qcm9jZXNzSXNvQ3VydmVSZXNwb25zZVwiO1xuXG4vKipcbiAqIEZhY3RvcnkgcG91ciBnw6luw6lyZXIgdW5lIHJlcG9uc2UgSlNPTiDDoCBwYXJ0aXIgZCd1biBKU09OXG4gKiAoRmFjdG9yeSlcbiAqXG4gKiBAbW9kdWxlIFByb2Nlc3NJc29DdXJ2ZVJlc3BvbnNlRmFjdG9yeVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLlByb2Nlc3NJc29DdXJ2ZS5SZXNwb25zZS5Qcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3RvcnlcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBQcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBQcm9jZXNzSXNvQ3VydmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgKiAgICAgIHJlc3BvbnNlIDpcbiAgICAgKiAgICAgIG91dHB1dEZvcm1hdCA6XG4gICAgICogICAgICByYXdSZXNwb25zZSA6XG4gICAgICogICAgICBzY29wZSA6XG4gICAgICogICAgICBvblN1Y2Nlc3MgOlxuICAgICAqICAgICAgb25FcnJvciA6XG4gICAgICogICB9O1xuICAgICAqXG4gICAgICovXG4gICAgYnVpbGQgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBsb2dnZXJcbiAgICAgICAgdmFyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJQcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3RvcnlcIik7XG4gICAgICAgIGxvZ2dlci50cmFjZShbXCJQcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3Rvcnk6OmJ1aWxkKClcIl0pO1xuXG4gICAgICAgIHZhciBkYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAob3B0aW9ucy5yZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmF3UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJhbmFseXplIHJlc3BvbnNlIDogcmF3XCIpO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJhbmFseXplIHJlc3BvbnNlIDoganNvblwiKTtcblxuICAgICAgICAgICAgICAgIHZhciBKU09OUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlc3BvbnNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIEpTT05SZXNwb25zZSA9IEpTT04ucGFyc2Uob3B0aW9ucy5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgSlNPTlJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhbmFseXNlIGRlIGxhIHJlcG9uc2VcbiAgICAgICAgICAgICAgICAvLyBjcsOpYXRpb24gZGUgbCdvYmpldCBkZSByw6lwb25zZVxuICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2UoKTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbXBsaXNzYWdlIGRlIGwnb2JqZXQgY3LDqcOpIGF2ZWMgbGVzIGF0dHJpYnR1dHMgZGUgbGEgcsOpcG9uc2UgZHUgc2VydmljZVxuICAgICAgICAgICAgICAgIGlmIChKU09OUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT05SZXNwb25zZS5jb3N0VHlwZSA9PT0gXCJkaXN0YW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRpbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5kaXN0YW5jZSA9IEpTT05SZXNwb25zZS5jb3N0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRpbWUgPSBKU09OUmVzcG9uc2UuY29zdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5kaXN0YW5jZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmlkID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zcnMgPSBKU09OUmVzcG9uc2UuY3JzO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmdlb21ldHJ5ID0gSlNPTlJlc3BvbnNlLmdlb21ldHJ5O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gSlNPTlJlc3BvbnNlLnBvaW50LnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubG9jYXRpb24ueCA9IGNvb3Jkc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubG9jYXRpb24ueSA9IGNvb3Jkc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2UoTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9BTkFMWVNFXCIsIG9wdGlvbnMucmVzcG9uc2UpKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpbmZvIDogZW4gY2FzIGRlIHByb2Jsw6htZXMgZGUgZHJvaXRzIChjbMOpIGludmFsaWRlIG91IGF1dHJlKSwgbGEgcsOpcG9uc2UgZXN0IGF1IGZvcm1hdCBYTUwgISFcbiAgICAgICAgICAgICAgICAvLyBleC4gPEV4Y2VwdGlvblJlcG9ydD48RXhjZXB0aW9uIGV4Y2VwdGlvbkNvZGU9XCJNaXNzaW5nUGFyYW1ldGVyXCI+S2V5IGRvZXMgbm90IGV4aXN0IG9yIGhhcyBleHBpcmVkPC9FeGNlcHRpb24+PC9FeGNlcHRpb25SZXBvcnQ+XG4gICAgICAgICAgICAgICAgLy8gbWFpcyBsZSBzdGF0dXQgZXN0IDQwMywgbCdlcnJldXIgZXN0IGRvbmMgcmVtb250w6llIHBsdXMgdMO0dC5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5leGNlcHRpb25SZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogTVJlcy5nZXRNZXNzYWdlKFwiU0VSVklDRV9SRVNQT05TRV9FWENFUFRJT05cIiwgZGF0YS5leGNlcHRpb25SZXBvcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA6IEVycm9yU2VydmljZS5UWVBFX1NSVkVSUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA6IDIwMFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzaSBsYSByw6lwb25zZSBlc3QgdmlkZSwgb24gYXBwZWxsZSBsZSBjYWxsYmFjayBkJ2VycmV1clxuICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZShNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VNUFRZXCIpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaSB0b3V0IHMnZXN0IGJpZW4gcGFzc8OpLCBvbiBhcHBlbGxlIGxlIGNhbGxiYWNrIGRlIHN1Y2PDqHNcbiAgICAgICAgb3B0aW9ucy5vblN1Y2Nlc3MuY2FsbChvcHRpb25zLnNjb3BlLCBkYXRhKTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9jZXNzSXNvQ3VydmVSZXNwb25zZUZhY3Rvcnk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js": +/*!********************************************************************************!*\ + !*** ./src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js ***! + \********************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Response object for {@link module:Services~isoCurve Gp.Services.isoCurve ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Float} distance - distance (expressed in meters) used for the request.\n * @property {Float} time - time (expressed in seconds) used for the request.\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the isocurve.\n * @property {String} id - request id (used by underlying webservice).\n * @property {Gp.Point} location - Position of the start or end point used for the request (expressed in \"srs\" coordinates system).\n * @property {String} message - message\n * @property {String} srs - Identifier of the coordinates system used for the isocurve.\n *\n * @namespace\n * @alias Gp.Services.IsoCurveResponse\n *\n */\nfunction ProcessIsoCurveResponse() {\n if (!(this instanceof ProcessIsoCurveResponse)) {\n throw new TypeError(\"ProcessIsoCurveResponse constructor cannot be called as a function.\");\n }\n this.message = null;\n this.id = null;\n this.location = {};\n this.location.x = null;\n this.location.y = null;\n this.srs = null;\n this.geometry = null;\n this.time = null;\n this.distance = null;\n}\nProcessIsoCurveResponse.prototype = {\n constructor: ProcessIsoCurveResponse\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (ProcessIsoCurveResponse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUmVzcG9uc2UvbW9kZWwvUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2UuanM/OTMyNCJdLCJuYW1lcyI6WyJQcm9jZXNzSXNvQ3VydmVSZXNwb25zZSIsIlR5cGVFcnJvciIsIm1lc3NhZ2UiLCJpZCIsImxvY2F0aW9uIiwieCIsInkiLCJzcnMiLCJnZW9tZXRyeSIsInRpbWUiLCJkaXN0YW5jZSIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLHVCQUF1QkEsQ0FBQSxFQUFJO0VBQ2hDLElBQUksRUFBRSxJQUFJLFlBQVlBLHVCQUF1QixDQUFDLEVBQUU7SUFDNUMsTUFBTSxJQUFJQyxTQUFTLENBQUMscUVBQXFFLENBQUM7RUFDOUY7RUFFQSxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJO0VBRW5CLElBQUksQ0FBQ0MsRUFBRSxHQUFHLElBQUk7RUFFZCxJQUFJLENBQUNDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDbEIsSUFBSSxDQUFDQSxRQUFRLENBQUNDLENBQUMsR0FBRyxJQUFJO0VBQ3RCLElBQUksQ0FBQ0QsUUFBUSxDQUFDRSxDQUFDLEdBQUcsSUFBSTtFQUV0QixJQUFJLENBQUNDLEdBQUcsR0FBRyxJQUFJO0VBRWYsSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSTtFQUVwQixJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJO0VBRWhCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUk7QUFDeEI7QUFFQVYsdUJBQXVCLENBQUNXLFNBQVMsR0FBRztFQUVoQ0MsV0FBVyxFQUFHWjtBQUVsQixDQUFDO0FBRWNBLHNGQUF1QiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Qcm9jZXNzSXNvQ3VydmUvUmVzcG9uc2UvbW9kZWwvUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogUmVzcG9uc2Ugb2JqZWN0IGZvciB7QGxpbmsgbW9kdWxlOlNlcnZpY2Vzfmlzb0N1cnZlIEdwLlNlcnZpY2VzLmlzb0N1cnZlICgpfSBpbnZvY2F0aW9uIHdoZW4gc3VjY2Vzc2Z1bC4gUmVjZWl2ZWQgYXMgdGhlIGFyZ3VtZW50IG9mIG9uU3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcHJvcGVydHkge0Zsb2F0fSBkaXN0YW5jZSAtIGRpc3RhbmNlIChleHByZXNzZWQgaW4gbWV0ZXJzKSB1c2VkIGZvciB0aGUgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IHRpbWUgLSB0aW1lIChleHByZXNzZWQgaW4gc2Vjb25kcykgdXNlZCBmb3IgdGhlIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge09iamVjdH0gZ2VvbWV0cnkgLSBHZW9tZXRyeSAoZXhwcmVzc2VkIGluIFtHZW9KU09OXXtAbGluayBodHRwOi8vZ2VvanNvbi5vcmcvfSkgb2YgdGhlIGlzb2N1cnZlLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGlkIC0gcmVxdWVzdCBpZCAodXNlZCBieSB1bmRlcmx5aW5nIHdlYnNlcnZpY2UpLlxuICogQHByb3BlcnR5IHtHcC5Qb2ludH0gbG9jYXRpb24gLSBQb3NpdGlvbiBvZiB0aGUgc3RhcnQgb3IgZW5kIHBvaW50IHVzZWQgZm9yIHRoZSByZXF1ZXN0IChleHByZXNzZWQgaW4gXCJzcnNcIiBjb29yZGluYXRlcyBzeXN0ZW0pLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IG1lc3NhZ2UgLSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gc3JzIC0gSWRlbnRpZmllciBvZiB0aGUgY29vcmRpbmF0ZXMgc3lzdGVtIHVzZWQgZm9yIHRoZSBpc29jdXJ2ZS5cbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuSXNvQ3VydmVSZXNwb25zZVxuICpcbiAqL1xuZnVuY3Rpb24gUHJvY2Vzc0lzb0N1cnZlUmVzcG9uc2UgKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9jZXNzSXNvQ3VydmVSZXNwb25zZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb2Nlc3NJc29DdXJ2ZVJlc3BvbnNlIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5tZXNzYWdlID0gbnVsbDtcblxuICAgIHRoaXMuaWQgPSBudWxsO1xuXG4gICAgdGhpcy5sb2NhdGlvbiA9IHt9O1xuICAgIHRoaXMubG9jYXRpb24ueCA9IG51bGw7XG4gICAgdGhpcy5sb2NhdGlvbi55ID0gbnVsbDtcblxuICAgIHRoaXMuc3JzID0gbnVsbDtcblxuICAgIHRoaXMuZ2VvbWV0cnkgPSBudWxsO1xuXG4gICAgdGhpcy50aW1lID0gbnVsbDtcblxuICAgIHRoaXMuZGlzdGFuY2UgPSBudWxsO1xufVxuXG5Qcm9jZXNzSXNvQ3VydmVSZXNwb25zZS5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvciA6IFByb2Nlc3NJc29DdXJ2ZVJlc3BvbnNlXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2Nlc3NJc29DdXJ2ZVJlc3BvbnNlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Request/RouteRequestFactory.js": +/*!***********************************************************!*\ + !*** ./src/Services/Route/Request/RouteRequestFactory.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _RouteRequestREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RouteRequestREST */ \"./src/Services/Route/Request/RouteRequestREST.js\");\n\n\n\n\n/**\n * Creation d'une requête REST en mode POST ou GET\n * (Factory)\n *\n * @module RouteRequestFactory\n * @alias Gp.Services.Route.Request.RouteRequestFactory\n * @private\n */\nvar RouteRequestFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * // utilisation avec les callback\n * var options = {\n * (...)\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * // spécifique au service\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : false,\n * exclusions : [\"bridge\", \"tunnel\", \"toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : false,\n * routePreference : \"fastest\"\n * };\n * RouteRequestFactory.build(options);\n *\n * // utilisation sans callback\n * var options = {...};\n * try {\n * var result = RouteRequestFactory.build(options);\n * if (! result) { throw new Error(\"...\"):}\n * } catch (e) {\n * // todo\n * }\n * @returns {String} request\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"RouteRequestFactory\");\n logger.trace([\"RouteRequestFactory::build()\"]);\n var request = null;\n var settings = options || {};\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\");\n var message = null;\n\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new _RouteRequestREST__WEBPACK_IMPORTED_MODULE_2__[\"default\"](settings);\n if (!myReq.processRequestString()) {\n message = \"Error process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__[\"default\"](message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n return request;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (RouteRequestFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXF1ZXN0L1JvdXRlUmVxdWVzdEZhY3RvcnkuanM/MWQzMCJdLCJuYW1lcyI6WyJSb3V0ZVJlcXVlc3RGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJyZXF1ZXN0Iiwic2V0dGluZ3MiLCJiT25FcnJvciIsIm9uRXJyb3IiLCJtZXNzYWdlIiwibXlSZXEiLCJSb3V0ZVJlcXVlc3RSRVNUIiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJjYWxsIiwic2NvcGUiLCJFcnJvclNlcnZpY2UiLCJFcnJvciIsInJlcXVlc3RTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW9EO0FBQ1E7QUFDVjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLG1CQUFtQixHQUFHO0VBRXRCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsS0FBSyxFQUFHLFNBQVJBLEtBQUtBLENBQWFDLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUlDLE1BQU0sR0FBR0MsOERBQU0sQ0FBQ0MsU0FBUyxDQUFDLHFCQUFxQixDQUFDO0lBQ3BERixNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFOUMsSUFBSUMsT0FBTyxHQUFHLElBQUk7SUFFbEIsSUFBSUMsUUFBUSxHQUFHTixPQUFPLElBQUksQ0FBQyxDQUFDOztJQUU1QjtJQUNBLElBQUlPLFFBQVEsR0FBRyxDQUFDLEVBQUVQLE9BQU8sQ0FBQ1EsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPUixPQUFPLENBQUNRLE9BQU8sS0FBSyxVQUFVLENBQUM7SUFFcEYsSUFBSUMsT0FBTyxHQUFHLElBQUk7O0lBRWxCO0lBQ0EsSUFBSUMsS0FBSyxHQUFHLElBQUlDLHlEQUFnQixDQUFDTCxRQUFRLENBQUM7SUFDMUMsSUFBSSxDQUFDSSxLQUFLLENBQUNFLG9CQUFvQixDQUFDLENBQUMsRUFBRTtNQUMvQkgsT0FBTyxHQUFHLGdDQUFnQztNQUMxQyxJQUFJRixRQUFRLEVBQUU7UUFDVlAsT0FBTyxDQUFDUSxPQUFPLENBQUNLLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUUsSUFBSUMsZ0VBQVksQ0FBQ04sT0FBTyxDQUFDLENBQUM7UUFDOUQ7TUFDSjtNQUNBLE1BQU0sSUFBSU8sS0FBSyxDQUFDUCxPQUFPLENBQUM7SUFDNUI7SUFDQUosT0FBTyxHQUFHSyxLQUFLLENBQUNPLGFBQWE7SUFFN0IsT0FBT1osT0FBTztFQUNsQjtBQUNKLENBQUM7QUFFY1Asa0ZBQW1CIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL1JvdXRlL1JlcXVlc3QvUm91dGVSZXF1ZXN0RmFjdG9yeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IEVycm9yU2VydmljZSBmcm9tIFwiLi4vLi4vLi4vRXhjZXB0aW9ucy9FcnJvclNlcnZpY2VcIjtcbmltcG9ydCBSb3V0ZVJlcXVlc3RSRVNUIGZyb20gXCIuL1JvdXRlUmVxdWVzdFJFU1RcIjtcblxuLyoqXG4gKiBDcmVhdGlvbiBkJ3VuZSByZXF1w6p0ZSBSRVNUIGVuIG1vZGUgUE9TVCBvdSBHRVRcbiAqIChGYWN0b3J5KVxuICpcbiAqIEBtb2R1bGUgUm91dGVSZXF1ZXN0RmFjdG9yeVxuICogQGFsaWFzIEdwLlNlcnZpY2VzLlJvdXRlLlJlcXVlc3QuUm91dGVSZXF1ZXN0RmFjdG9yeVxuICogQHByaXZhdGVcbiAqL1xudmFyIFJvdXRlUmVxdWVzdEZhY3RvcnkgPSB7XG5cbiAgICAvKipcbiAgICAgKiBpbnRlcmZhY2UgdW5pcXVlXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGJ1aWxkXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBkZWZpbmllcyBkYW5zIGxlIGNvbXBvc2FudCBSb3V0ZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIC8vIHV0aWxpc2F0aW9uIGF2ZWMgbGVzIGNhbGxiYWNrXG4gICAgICogICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgKiAgICAgICguLi4pXG4gICAgICogICAgICBvblN1Y2Nlc3MgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHt9LFxuICAgICAqICAgICAgb25FcnJvciA6IGZ1bmN0aW9uIChlcnJvcikge30sXG4gICAgICogICAgICAvLyBzcMOpY2lmaXF1ZSBhdSBzZXJ2aWNlXG4gICAgICogICAgICBzdGFydFBvaW50IDoge1xuICAgICAqICAgICAgICAgIHggOiA0Mi4xMTIxLFxuICAgICAqICAgICAgICAgIHkgOiAxLjU1NTdcbiAgICAgKiAgICAgIH0sXG4gICAgICogICAgICBlbmRQb2ludCA6IHtcbiAgICAgKiAgICAgICAgICB4IDogNDIuMTEyMSxcbiAgICAgKiAgICAgICAgICB5IDogMS41NTU3XG4gICAgICogICAgICB9LFxuICAgICAqICAgICAgcHJvdmlkZUJib3ggOiBmYWxzZSxcbiAgICAgKiAgICAgIGV4Y2x1c2lvbnMgOiBbXCJicmlkZ2VcIiwgXCJ0dW5uZWxcIiwgXCJ0b2xsXCJdLFxuICAgICAqICAgICAgZGlzdGFuY2VVbml0IDogXCJrbVwiLFxuICAgICAqICAgICAgZ3JhcGggOiBcIlZvaXR1cmVcIixcbiAgICAgKiAgICAgIGdlb21ldHJ5SW5JbnN0cnVjdGlvbnMgOiBmYWxzZSxcbiAgICAgKiAgICAgIHJvdXRlUHJlZmVyZW5jZSA6IFwiZmFzdGVzdFwiXG4gICAgICogICB9O1xuICAgICAqICAgUm91dGVSZXF1ZXN0RmFjdG9yeS5idWlsZChvcHRpb25zKTtcbiAgICAgKlxuICAgICAqICAgLy8gdXRpbGlzYXRpb24gc2FucyBjYWxsYmFja1xuICAgICAqICAgdmFyIG9wdGlvbnMgPSB7Li4ufTtcbiAgICAgKiAgIHRyeSB7XG4gICAgICogICAgICB2YXIgcmVzdWx0ID0gUm91dGVSZXF1ZXN0RmFjdG9yeS5idWlsZChvcHRpb25zKTtcbiAgICAgKiAgICAgIGlmICghIHJlc3VsdCkgeyB0aHJvdyBuZXcgRXJyb3IoXCIuLi5cIik6fVxuICAgICAqICAgfSBjYXRjaCAoZSkge1xuICAgICAqICAgICAgLy8gdG9kb1xuICAgICAqICAgfVxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHJlcXVlc3RcbiAgICAgKi9cbiAgICBidWlsZCA6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIC8vIGxvZ2dlclxuICAgICAgICB2YXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihcIlJvdXRlUmVxdWVzdEZhY3RvcnlcIik7XG4gICAgICAgIGxvZ2dlci50cmFjZShbXCJSb3V0ZVJlcXVlc3RGYWN0b3J5OjpidWlsZCgpXCJdKTtcblxuICAgICAgICB2YXIgcmVxdWVzdCA9IG51bGw7XG5cbiAgICAgICAgdmFyIHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICAvLyBnZXN0aW9uIGRlcyBjYWxsYmFja1xuICAgICAgICB2YXIgYk9uRXJyb3IgPSAhIShvcHRpb25zLm9uRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMub25FcnJvciA9PT0gXCJmdW5jdGlvblwiKTtcblxuICAgICAgICB2YXIgbWVzc2FnZSA9IG51bGw7XG5cbiAgICAgICAgLy8gRklYTUUgbGVzIGV4Y2VwdGlvbnMgbmUgc29udCBwYXMgJ2NhdGNow6llcycgc3VyIGxlIGNvbnN0cnVjdGV1ciAhXG4gICAgICAgIHZhciBteVJlcSA9IG5ldyBSb3V0ZVJlcXVlc3RSRVNUKHNldHRpbmdzKTtcbiAgICAgICAgaWYgKCFteVJlcS5wcm9jZXNzUmVxdWVzdFN0cmluZygpKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJFcnJvciBwcm9jZXNzIHJlcXVlc3QgKHJlc3QpICFcIjtcbiAgICAgICAgICAgIGlmIChiT25FcnJvcikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub25FcnJvci5jYWxsKG9wdGlvbnMuc2NvcGUsIG5ldyBFcnJvclNlcnZpY2UobWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0ID0gbXlSZXEucmVxdWVzdFN0cmluZztcblxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZVJlcXVlc3RGYWN0b3J5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/Route/Request/RouteRequestFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Request/RouteRequestREST.js": +/*!********************************************************!*\ + !*** ./src/Services/Route/Request/RouteRequestREST.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _model_RouteParamREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./model/RouteParamREST */ \"./src/Services/Route/Request/model/RouteParamREST.js\");\n\n\n\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Route.Request.RouteRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction RouteRequestREST(options) {\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"RouteRequestREST\");\n this.logger.trace(\"[Constructeur RouteRequestREST ()]\");\n if (!(this instanceof RouteRequestREST)) {\n throw new TypeError(\"RouteRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\nRouteRequestREST.prototype = {\n /**\n * @lends module:RouteRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString: null,\n /**\n * Constructeur (alias)\n */\n constructor: RouteRequestREST,\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : origin=2.416907353809513,48.8465772142297&destination=2.4248037771493673,48.84591353161838\n * // POST out : Not yet supported method POST !\n * @returns {String} request\n */\n processRequestString: function processRequestString() {\n // INFO\n // construction simple sans template...,\n // mais en attendant que les services soient fixés, on taggue ce composant en mode PROTOTYPE !\n this.logger.warn(\" PROTOTYPE !\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new _model_RouteParamREST__WEBPACK_IMPORTED_MODULE_2__[\"default\"](this.settings);\n var params = oParams.getParams();\n var request = \"\";\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n // Exemple :\n // http://wxs.ign.fr/KEY/itineraire/rest/route.json?\n // origin=&\n // destination=&\n // waypoints=&\n // method=DISTANCE&\n // graph=Pieton&\n // graphName=Pieton&\n // exclusions=&\n // tolerance=10&\n // srs=\n\n this.logger.trace(request);\n this.requestString = request;\n return this.requestString;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (RouteRequestREST);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXF1ZXN0L1JvdXRlUmVxdWVzdFJFU1QuanM/MjBlZCJdLCJuYW1lcyI6WyJSb3V0ZVJlcXVlc3RSRVNUIiwib3B0aW9ucyIsImxvZ2dlciIsIkxvZ2dlciIsImdldExvZ2dlciIsInRyYWNlIiwiVHlwZUVycm9yIiwiRXJyb3IiLCJfIiwiZ2V0TWVzc2FnZSIsInNldHRpbmdzIiwicHJvdG90eXBlIiwicmVxdWVzdFN0cmluZyIsImNvbnN0cnVjdG9yIiwicHJvY2Vzc1JlcXVlc3RTdHJpbmciLCJ3YXJuIiwib1BhcmFtcyIsIlJvdXRlUGFyYW1SRVNUIiwicGFyYW1zIiwiZ2V0UGFyYW1zIiwicmVxdWVzdCIsImkiLCJsZW5ndGgiLCJvIiwiayIsInYiXSwibWFwcGluZ3MiOiJBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQW9EO0FBQ0g7QUFDRzs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxnQkFBZ0JBLENBQUVDLE9BQU8sRUFBRTtFQUNoQyxJQUFJLENBQUNDLE1BQU0sR0FBR0MsOERBQU0sQ0FBQ0MsU0FBUyxDQUFDLGtCQUFrQixDQUFDO0VBQ2xELElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxLQUFLLENBQUMsb0NBQW9DLENBQUM7RUFFdkQsSUFBSSxFQUFFLElBQUksWUFBWUwsZ0JBQWdCLENBQUMsRUFBRTtJQUNyQyxNQUFNLElBQUlNLFNBQVMsQ0FBQyw4REFBOEQsQ0FBQztFQUN2Rjs7RUFFQTtFQUNBLElBQUksQ0FBQ0wsT0FBTyxFQUFFO0lBQ1YsTUFBTSxJQUFJTSxLQUFLLENBQUNDLGdFQUFDLENBQUNDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7RUFDM0Q7O0VBRUE7RUFDQSxJQUFJLENBQUNDLFFBQVEsR0FBR1QsT0FBTztBQUMzQjtBQUVBRCxnQkFBZ0IsQ0FBQ1csU0FBUyxHQUFHO0VBRXpCO0FBQ0o7QUFDQTs7RUFFSTtBQUNKO0FBQ0E7QUFDQTtFQUNJQyxhQUFhLEVBQUcsSUFBSTtFQUVwQjtBQUNKO0FBQ0E7RUFDSUMsV0FBVyxFQUFHYixnQkFBZ0I7RUFFOUI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJYyxvQkFBb0IsRUFBRyxTQUF2QkEsb0JBQW9CQSxDQUFBLEVBQWU7SUFDL0I7SUFDQTtJQUNBO0lBQ0EsSUFBSSxDQUFDWixNQUFNLENBQUNhLElBQUksQ0FBQyxjQUFjLENBQUM7O0lBRWhDO0lBQ0EsSUFBSUMsT0FBTyxHQUFHLElBQUlDLDZEQUFjLENBQUMsSUFBSSxDQUFDUCxRQUFRLENBQUM7SUFDL0MsSUFBSVEsTUFBTSxHQUFHRixPQUFPLENBQUNHLFNBQVMsQ0FBQyxDQUFDO0lBRWhDLElBQUlDLE9BQU8sR0FBRyxFQUFFO0lBQ2hCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxNQUFNLENBQUNJLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7TUFDcEMsSUFBSUUsQ0FBQyxHQUFHTCxNQUFNLENBQUNHLENBQUMsQ0FBQztNQUNqQixJQUFJRCxPQUFPLEVBQUU7UUFDVEEsT0FBTyxJQUFJLEdBQUc7TUFDbEI7TUFDQUEsT0FBTyxJQUFJRyxDQUFDLENBQUNDLENBQUMsR0FBRyxHQUFHLEdBQUdELENBQUMsQ0FBQ0UsQ0FBQztJQUM5Qjs7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBLElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQ0csS0FBSyxDQUFDZSxPQUFPLENBQUM7SUFDMUIsSUFBSSxDQUFDUixhQUFhLEdBQUdRLE9BQU87SUFFNUIsT0FBTyxJQUFJLENBQUNSLGFBQWE7RUFDN0I7QUFDSixDQUFDO0FBRWNaLCtFQUFnQiIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXF1ZXN0L1JvdXRlUmVxdWVzdFJFU1QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uLy4uLy4uL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzXCI7XG5pbXBvcnQgUm91dGVQYXJhbVJFU1QgZnJvbSBcIi4vbW9kZWwvUm91dGVQYXJhbVJFU1RcIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBDbGFzc2UgZGUgZ2VzdGlvbiBkZXMgcmVxdcOqdGVzIGRlIHR5cGUgUkVTVCBzdXIgbGUgc2VydmljZSBkZSBjYWxjdWwgZCdpdGluZXJhaXJlXG4gKiAodW5pcXVlbWVudCBlbiBHRVQpXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuUm91dGUuUmVxdWVzdC5Sb3V0ZVJlcXVlc3RSRVNUXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgZGVmaW5pZXMgZGFucyBsZSBjb21wb3NhbnQgUm91dGVcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIG9wdGlvbnMgPSB7XG4gKiAgICAgICguLi4pXG4gKiB9O1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFJvdXRlUmVxdWVzdFJFU1QgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJSb3V0ZVJlcXVlc3RSRVNUXCIpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiW0NvbnN0cnVjdGV1ciBSb3V0ZVJlcXVlc3RSRVNUICgpXVwiKTtcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZVJlcXVlc3RSRVNUKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUm91dGVSZXF1ZXN0UkVTVCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgIH1cblxuICAgIC8vIGV4aXN0YW5jZSBkZXMgb3B0aW9uc1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fRU1QVFlcIiwgXCJvcHRpb25zXCIpKTtcbiAgICB9XG5cbiAgICAvKiogbGlzdGUgZGVzIG9wdGlvbnMgKi9cbiAgICB0aGlzLnNldHRpbmdzID0gb3B0aW9ucztcbn1cblxuUm91dGVSZXF1ZXN0UkVTVC5wcm90b3R5cGUgPSB7XG5cbiAgICAvKipcbiAgICAgKiBAbGVuZHMgbW9kdWxlOlJvdXRlUmVxdWVzdFJFU1QjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiByZXF1ZXN0XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICByZXF1ZXN0U3RyaW5nIDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdGV1ciAoYWxpYXMpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgOiBSb3V0ZVJlcXVlc3RSRVNULFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0aW9uIGRlIGxhIHJlcXXDqnRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHRVQgIG91dCA6IG9yaWdpbj0yLjQxNjkwNzM1MzgwOTUxMyw0OC44NDY1NzcyMTQyMjk3JmRlc3RpbmF0aW9uPTIuNDI0ODAzNzc3MTQ5MzY3Myw0OC44NDU5MTM1MzE2MTgzOFxuICAgICAqIC8vIFBPU1Qgb3V0IDogTm90IHlldCBzdXBwb3J0ZWQgbWV0aG9kIFBPU1QgIVxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHJlcXVlc3RcbiAgICAgKi9cbiAgICBwcm9jZXNzUmVxdWVzdFN0cmluZyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSU5GT1xuICAgICAgICAvLyBjb25zdHJ1Y3Rpb24gc2ltcGxlIHNhbnMgdGVtcGxhdGUuLi4sXG4gICAgICAgIC8vIG1haXMgZW4gYXR0ZW5kYW50IHF1ZSBsZXMgc2VydmljZXMgc29pZW50IGZpeMOpcywgb24gdGFnZ3VlIGNlIGNvbXBvc2FudCBlbiBtb2RlIFBST1RPVFlQRSAhXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCIgUFJPVE9UWVBFICFcIik7XG5cbiAgICAgICAgLy8gTWFwcGluZyBkZXMgb3B0aW9ucyBhdmVjIGxlIHNlcnZpY2UgZGUgbCdBUEkgUkVTVFxuICAgICAgICB2YXIgb1BhcmFtcyA9IG5ldyBSb3V0ZVBhcmFtUkVTVCh0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgdmFyIHBhcmFtcyA9IG9QYXJhbXMuZ2V0UGFyYW1zKCk7XG5cbiAgICAgICAgdmFyIHJlcXVlc3QgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG8gPSBwYXJhbXNbaV07XG4gICAgICAgICAgICBpZiAocmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QgKz0gXCImXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXF1ZXN0ICs9IG8uayArIFwiPVwiICsgby52O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhlbXBsZSA6XG4gICAgICAgIC8vICBodHRwOi8vd3hzLmlnbi5mci9LRVkvaXRpbmVyYWlyZS9yZXN0L3JvdXRlLmpzb24/XG4gICAgICAgIC8vICBvcmlnaW49JlxuICAgICAgICAvLyAgZGVzdGluYXRpb249JlxuICAgICAgICAvLyAgd2F5cG9pbnRzPSZcbiAgICAgICAgLy8gIG1ldGhvZD1ESVNUQU5DRSZcbiAgICAgICAgLy8gIGdyYXBoPVBpZXRvbiZcbiAgICAgICAgLy8gIGdyYXBoTmFtZT1QaWV0b24mXG4gICAgICAgIC8vICBleGNsdXNpb25zPSZcbiAgICAgICAgLy8gIHRvbGVyYW5jZT0xMCZcbiAgICAgICAgLy8gIHNycz1cblxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShyZXF1ZXN0KTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RyaW5nID0gcmVxdWVzdDtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0U3RyaW5nO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlUmVxdWVzdFJFU1Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Route/Request/RouteRequestREST.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Request/model/RouteParamREST.js": +/*!************************************************************!*\ + !*** ./src/Services/Route/Request/model/RouteParamREST.js ***! + \************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction RouteParamREST(options) {\n if (!(this instanceof RouteParamREST)) {\n throw new TypeError(\"RouteParamREST constructor cannot be called as a function.\");\n }\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger();\n this.logger.trace(\"[Constructeur RouteParamREST ()]\");\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Ressource utilisée */\n this.resource = this.options.resource;\n\n /** Coordonnées du point de départ. */\n this.start = this.options.startPoint.x + \",\" + this.options.startPoint.y;\n\n /** Coordonnées du point d’arrivée. */\n this.end = this.options.endPoint.x + \",\" + this.options.endPoint.y;\n\n /** Coordonnées des étapes point de départ. */\n this.intermediates = this.options.viaPoints;\n\n /** Nom du profile à utiliser */\n this.profile = this.options.graph;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /** Liste des contraintes */\n this.constraints = this.options.constraints;\n\n /** Nom de l'optimisation à utiliser */\n this.optimization = this.options.routePreference;\n\n /** Format de sortie (résumé de l’itinéraire) */\n this.getSteps = this.options.geometryInInstructions ? \"true\" : \"false\";\n\n /** Unité des distances */\n this.distanceUnit = this.options.distanceUnit;\n\n /** Unité des durées */\n this.timeUnit = this.options.timeUnit;\n\n /** Attributs des voies */\n this.waysAttributes = this.options.waysAttributes;\n}\n\n/**\n * CLASSNAME\n */\nRouteParamREST.CLASSNAME = \"RouteParamREST\";\nRouteParamREST.prototype = {\n /**\n * @lends module:RouteParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor: RouteParamREST,\n /**\n * Retourne une liste de points\n * @returns {String} une liste de points (sep '|')\n */\n getIntermediates: function getIntermediates() {\n var array = [];\n if (this.intermediates.length !== 0) {\n for (var i = 0; i < this.intermediates.length; i++) {\n var obj = this.intermediates[i];\n array.push(obj.x + \",\" + obj.y);\n }\n }\n return array.join(\"|\");\n },\n /**\n * Retourne une liste d'attributs\n * @returns {String} une liste d'attributs (sep '|')\n */\n getWaysAttributes: function getWaysAttributes() {\n return this.waysAttributes.join(\"|\");\n },\n /**\n * Retourne un profile\n * @returns {String} profile\n */\n getProfile: function getProfile() {\n return this.profile;\n },\n /**\n * Retourne un distanceUnit\n * @returns {String} distanceUnit\n */\n getDistanceUnit: function getDistanceUnit() {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n /**\n * Retourne une optimisation\n * @returns {String} optimization\n */\n getOptimization: function getOptimization() {\n if (this.optimization) {\n return this.optimization;\n } else {\n return \"\";\n }\n },\n /**\n * Retourne la liste des constraints\n * @returns {String} une liste des constraints (sep '|')\n */\n getConstraints: function getConstraints() {\n var constraintArray = [];\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nRouteParamREST.prototype.getParams = function () {\n var map = [];\n map.push({\n k: \"resource\",\n v: this.resource\n });\n map.push({\n k: \"start\",\n v: this.start\n });\n map.push({\n k: \"end\",\n v: this.end\n });\n map.push({\n k: \"geometryFormat\",\n v: \"geojson\"\n });\n if (this.optimization) {\n map.push({\n k: \"optimization\",\n v: this.getOptimization()\n });\n }\n if (this.intermediates) {\n map.push({\n k: \"intermediates\",\n v: this.getIntermediates()\n });\n }\n if (this.profile) {\n map.push({\n k: \"profile\",\n v: this.getProfile()\n });\n }\n if (this.constraints) {\n map.push({\n k: \"constraints\",\n v: this.getConstraints()\n });\n }\n if (this.crs) {\n map.push({\n k: \"crs\",\n v: this.crs\n });\n }\n if (this.distanceUnit) {\n map.push({\n k: \"distanceUnit\",\n v: this.getDistanceUnit()\n });\n }\n if (this.timeUnit) {\n map.push({\n k: \"timeUnit\",\n v: this.timeUnit\n });\n }\n if (this.waysAttributes) {\n map.push({\n k: \"waysAttributes\",\n v: this.getWaysAttributes()\n });\n }\n return map;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (RouteParamREST);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXF1ZXN0L21vZGVsL1JvdXRlUGFyYW1SRVNULmpzPzczODMiXSwibmFtZXMiOlsiUm91dGVQYXJhbVJFU1QiLCJvcHRpb25zIiwiVHlwZUVycm9yIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJyZXNvdXJjZSIsInN0YXJ0Iiwic3RhcnRQb2ludCIsIngiLCJ5IiwiZW5kIiwiZW5kUG9pbnQiLCJpbnRlcm1lZGlhdGVzIiwidmlhUG9pbnRzIiwicHJvZmlsZSIsImdyYXBoIiwiY3JzIiwic3JzIiwiY29uc3RyYWludHMiLCJvcHRpbWl6YXRpb24iLCJyb3V0ZVByZWZlcmVuY2UiLCJnZXRTdGVwcyIsImdlb21ldHJ5SW5JbnN0cnVjdGlvbnMiLCJkaXN0YW5jZVVuaXQiLCJ0aW1lVW5pdCIsIndheXNBdHRyaWJ1dGVzIiwiQ0xBU1NOQU1FIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJnZXRJbnRlcm1lZGlhdGVzIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwib2JqIiwicHVzaCIsImpvaW4iLCJnZXRXYXlzQXR0cmlidXRlcyIsImdldFByb2ZpbGUiLCJnZXREaXN0YW5jZVVuaXQiLCJnZXRPcHRpbWl6YXRpb24iLCJnZXRDb25zdHJhaW50cyIsImNvbnN0cmFpbnRBcnJheSIsImsiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0UGFyYW1zIiwibWFwIiwidiJdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxjQUFjQSxDQUFFQyxPQUFPLEVBQUU7RUFDOUIsSUFBSSxFQUFFLElBQUksWUFBWUQsY0FBYyxDQUFDLEVBQUU7SUFDbkMsTUFBTSxJQUFJRSxTQUFTLENBQUMsNERBQTRELENBQUM7RUFDckY7RUFFQSxJQUFJLENBQUNDLE1BQU0sR0FBR0Ms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LEVBQUcsSUFBSSxDQUFDUCxjQUFjLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0VBQ047RUFFQSxJQUFJLElBQUksQ0FBQ3hCLEdBQUcsRUFBRTtJQUNWOEIsR0FBRyxDQUFDWixJQUFJLENBQUM7TUFDTFEsQ0FBQyxFQUFHLEtBQUs7TUFDVEssQ0FBQyxFQUFHLElBQUksQ0FBQy9CO0lBQ2IsQ0FBQyxDQUFDO0VBQ047RUFFQSxJQUFJLElBQUksQ0FBQ08sWUFBWSxFQUFFO0lBQ25CdUIsR0FBRyxDQUFDWixJQUFJLENBQUM7TUFDTFEsQ0FBQyxFQUFHLGNBQWM7TUFDbEJLLENBQUMsRUFBRyxJQUFJLENBQUNULGVBQWUsQ0FBQztJQUM3QixDQUFDLENBQUM7RUFDTjtFQUVBLElBQUksSUFBSSxDQUFDZCxRQUFRLEVBQUU7SUFDZnNCLEdBQUcsQ0FBQ1osSUFBSSxDQUFDO01BQ0xRLENBQUMsRUFBRyxVQUFVO01BQ2RLLENBQUMsRUFBRyxJQUFJLENBQUN2QjtJQUNiLENBQUMsQ0FBQztFQUNOO0VBRUEsSUFBSSxJQUFJLENBQUNDLGNBQWMsRUFBRTtJQUNyQnFCLEdBQUcsQ0FBQ1osSUFBSSxDQUFDO01BQ0xRLENBQUMsRUFBRyxnQkFBZ0I7TUFDcEJLLENBQUMsRUFBRyxJQUFJLENBQUNYLGlCQUFpQixDQUFDO0lBQy9CLENBQUMsQ0FBQztFQUNOO0VBRUEsT0FBT1UsR0FBRztBQUNkLENBQUM7QUFFY2hELDZFQUFjIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL1JvdXRlL1JlcXVlc3QvbW9kZWwvUm91dGVQYXJhbVJFU1QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uLy4uLy4uL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdFwiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqIENsYXNzZSBkZSBnZXN0aW9uIGRlcyBwYXJhbS4gZGVzIHJlcXXDqnRlcyBkdSBzZXJ2aWNlIGRlIGNhbGN1bCBkJ2l0aW5lcmFpcmUgKFJFU1QpLlxuICogICAgICBQZXJtZXQgbGUgbWFwcGluZyBhdmVjIGxlcyBvcHRpb25zIGR1IHNlcnZpY2UuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5Sb3V0ZS5SZXF1ZXN0LlJvdXRlUGFyYW1SRVNUXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBSb3V0ZVBhcmFtUkVTVCAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZVBhcmFtUkVTVCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJvdXRlUGFyYW1SRVNUIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCk7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoXCJbQ29uc3RydWN0ZXVyIFJvdXRlUGFyYW1SRVNUICgpXVwiKTtcbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGVuIHBhcmFtw6p0cmVzIGR1IGNvbnN0cnVjdGV1ci5cbiAgICAgKi9cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gbWFwcGluZyBkZXMgb3B0aW9ucyBhdmVjIGwnQVBJIFJFU1RcblxuICAgIC8qKiBSZXNzb3VyY2UgdXRpbGlzw6llICovXG4gICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMub3B0aW9ucy5yZXNvdXJjZTtcblxuICAgIC8qKiBDb29yZG9ubsOpZXMgZHUgcG9pbnQgZGUgZMOpcGFydC4gKi9cbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5vcHRpb25zLnN0YXJ0UG9pbnQueCArIFwiLFwiICsgdGhpcy5vcHRpb25zLnN0YXJ0UG9pbnQueTtcblxuICAgIC8qKiBDb29yZG9ubsOpZXMgZHUgcG9pbnQgZOKAmWFycml2w6llLiAqL1xuICAgIHRoaXMuZW5kID0gdGhpcy5vcHRpb25zLmVuZFBvaW50LnggKyBcIixcIiArIHRoaXMub3B0aW9ucy5lbmRQb2ludC55O1xuXG4gICAgLyoqIENvb3Jkb25uw6llcyBkZXMgw6l0YXBlcyBwb2ludCBkZSBkw6lwYXJ0LiAqL1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlcyA9IHRoaXMub3B0aW9ucy52aWFQb2ludHM7XG5cbiAgICAvKiogTm9tIGR1IHByb2ZpbGUgw6AgdXRpbGlzZXIgKi9cbiAgICB0aGlzLnByb2ZpbGUgPSB0aGlzLm9wdGlvbnMuZ3JhcGg7XG5cbiAgICAvKiogcHJvamVjdGlvbiAoY29kZSBFUFNHIGNvbW1lIGVwc2c6NDMyNiBvdSB3Z3M4NCkgKi9cbiAgICB0aGlzLmNycyA9IHRoaXMub3B0aW9ucy5zcnM7XG5cbiAgICAvKiogTGlzdGUgZGVzIGNvbnRyYWludGVzICovXG4gICAgdGhpcy5jb25zdHJhaW50cyA9IHRoaXMub3B0aW9ucy5jb25zdHJhaW50cztcblxuICAgIC8qKiBOb20gZGUgbCdvcHRpbWlzYXRpb24gw6AgdXRpbGlzZXIgKi9cbiAgICB0aGlzLm9wdGltaXphdGlvbiA9IHRoaXMub3B0aW9ucy5yb3V0ZVByZWZlcmVuY2U7XG5cbiAgICAvKiogRm9ybWF0IGRlIHNvcnRpZSAocsOpc3Vtw6kgZGUgbOKAmWl0aW7DqXJhaXJlKSAqL1xuICAgIHRoaXMuZ2V0U3RlcHMgPSAodGhpcy5vcHRpb25zLmdlb21ldHJ5SW5JbnN0cnVjdGlvbnMpID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG5cbiAgICAvKiogVW5pdMOpIGRlcyBkaXN0YW5jZXMgKi9cbiAgICB0aGlzLmRpc3RhbmNlVW5pdCA9IHRoaXMub3B0aW9ucy5kaXN0YW5jZVVuaXQ7XG5cbiAgICAvKiogVW5pdMOpIGRlcyBkdXLDqWVzICovXG4gICAgdGhpcy50aW1lVW5pdCA9IHRoaXMub3B0aW9ucy50aW1lVW5pdDtcblxuICAgIC8qKiBBdHRyaWJ1dHMgZGVzIHZvaWVzICovXG4gICAgdGhpcy53YXlzQXR0cmlidXRlcyA9IHRoaXMub3B0aW9ucy53YXlzQXR0cmlidXRlcztcbn1cblxuLyoqXG4gKiBDTEFTU05BTUVcbiAqL1xuUm91dGVQYXJhbVJFU1QuQ0xBU1NOQU1FID0gXCJSb3V0ZVBhcmFtUkVTVFwiO1xuXG5Sb3V0ZVBhcmFtUkVTVC5wcm90b3R5cGUgPSB7XG5cbiAgICAvKipcbiAgICAgKiBAbGVuZHMgbW9kdWxlOlJvdXRlUGFyYW1SRVNUI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0ZXVyIChhbGlhcylcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciA6IFJvdXRlUGFyYW1SRVNULFxuXG4gICAgLyoqXG4gICAgICogUmV0b3VybmUgdW5lIGxpc3RlIGRlIHBvaW50c1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHVuZSBsaXN0ZSBkZSBwb2ludHMgKHNlcCAnfCcpXG4gICAgICovXG4gICAgZ2V0SW50ZXJtZWRpYXRlcyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgIGlmICh0aGlzLmludGVybWVkaWF0ZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJtZWRpYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmludGVybWVkaWF0ZXNbaV07XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChvYmoueCArIFwiLFwiICsgb2JqLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5LmpvaW4oXCJ8XCIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXRvdXJuZSB1bmUgbGlzdGUgZCdhdHRyaWJ1dHNcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB1bmUgbGlzdGUgZCdhdHRyaWJ1dHMgKHNlcCAnfCcpXG4gICAgICovXG4gICAgZ2V0V2F5c0F0dHJpYnV0ZXMgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndheXNBdHRyaWJ1dGVzLmpvaW4oXCJ8XCIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXRvdXJuZSB1biBwcm9maWxlXG4gICAgICogQHJldHVybnMge1N0cmluZ30gcHJvZmlsZVxuICAgICAqL1xuICAgIGdldFByb2ZpbGUgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2ZpbGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIHVuIGRpc3RhbmNlVW5pdFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IGRpc3RhbmNlVW5pdFxuICAgICAqL1xuICAgIGdldERpc3RhbmNlVW5pdCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2VVbml0ID09PSBcIm1cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwibWV0ZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXN0YW5jZVVuaXQgPT09IFwia21cIikge1xuICAgICAgICAgICAgcmV0dXJuIFwia2lsb21ldGVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldG91cm5lIHVuZSBvcHRpbWlzYXRpb25cbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBvcHRpbWl6YXRpb25cbiAgICAgKi9cbiAgICBnZXRPcHRpbWl6YXRpb24gOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGltaXphdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW1pemF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0b3VybmUgbGEgbGlzdGUgZGVzIGNvbnN0cmFpbnRzXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdW5lIGxpc3RlIGRlcyBjb25zdHJhaW50cyAoc2VwICd8JylcbiAgICAgKi9cbiAgICBnZXRDb25zdHJhaW50cyA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRBcnJheSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludEFycmF5LnB1c2goSlNPTi5zdHJpbmdpZnkodGhpcy5jb25zdHJhaW50c1trXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25zdHJhaW50QXJyYXkuam9pbihcInxcIik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUYWJsZWF1IGRlIGNsZWZzL3ZhbGV1cnMgcG91ciBwYXJhbS5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9IGxpc3RlIGRlIHBhcmFtw6p0cmVzXG4gKi9cblJvdXRlUGFyYW1SRVNULnByb3RvdHlwZS5nZXRQYXJhbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1hcCA9IFtdO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJyZXNvdXJjZVwiLFxuICAgICAgICB2IDogdGhpcy5yZXNvdXJjZVxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJzdGFydFwiLFxuICAgICAgICB2IDogdGhpcy5zdGFydFxuICAgIH0pO1xuXG4gICAgbWFwLnB1c2goe1xuICAgICAgICBrIDogXCJlbmRcIixcbiAgICAgICAgdiA6IHRoaXMuZW5kXG4gICAgfSk7XG5cbiAgICBtYXAucHVzaCh7XG4gICAgICAgIGsgOiBcImdlb21ldHJ5Rm9ybWF0XCIsXG4gICAgICAgIHYgOiBcImdlb2pzb25cIlxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW1pemF0aW9uKSB7XG4gICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICAgIGsgOiBcIm9wdGltaXphdGlvblwiLFxuICAgICAgICAgICAgdiA6IHRoaXMuZ2V0T3B0aW1pemF0aW9uKClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlcykge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJpbnRlcm1lZGlhdGVzXCIsXG4gICAgICAgICAgICB2IDogdGhpcy5nZXRJbnRlcm1lZGlhdGVzKClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvZmlsZSkge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJwcm9maWxlXCIsXG4gICAgICAgICAgICB2IDogdGhpcy5nZXRQcm9maWxlKClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uc3RyYWludHMpIHtcbiAgICAgICAgbWFwLnB1c2goe1xuICAgICAgICAgICAgayA6IFwiY29uc3RyYWludHNcIixcbiAgICAgICAgICAgIHYgOiB0aGlzLmdldENvbnN0cmFpbnRzKClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JzKSB7XG4gICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICAgIGsgOiBcImNyc1wiLFxuICAgICAgICAgICAgdiA6IHRoaXMuY3JzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRpc3RhbmNlVW5pdCkge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJkaXN0YW5jZVVuaXRcIixcbiAgICAgICAgICAgIHYgOiB0aGlzLmdldERpc3RhbmNlVW5pdCgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRpbWVVbml0KSB7XG4gICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICAgIGsgOiBcInRpbWVVbml0XCIsXG4gICAgICAgICAgICB2IDogdGhpcy50aW1lVW5pdFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53YXlzQXR0cmlidXRlcykge1xuICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICBrIDogXCJ3YXlzQXR0cmlidXRlc1wiLFxuICAgICAgICAgICAgdiA6IHRoaXMuZ2V0V2F5c0F0dHJpYnV0ZXMoKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUm91dGVQYXJhbVJFU1Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Route/Request/model/RouteParamREST.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Response/RouteResponseFactory.js": +/*!*************************************************************!*\ + !*** ./src/Services/Route/Response/RouteResponseFactory.js ***! + \*************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _model_RouteResponse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./model/RouteResponse */ \"./src/Services/Route/Response/model/RouteResponse.js\");\n/* harmony import */ var _model_RouteInstruction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./model/RouteInstruction */ \"./src/Services/Route/Response/model/RouteInstruction.js\");\n\n\n\n\n\n\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module RouteResponseFactory\n * @alias Gp.Services.Route.Response.RouteResponseFactory\n * @private\n */\nvar RouteResponseFactory = {\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build: function build(options) {\n // logger\n var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"RouteResponseFactory\");\n logger.trace(\"RouteResponseFactory::build()\");\n var data = null;\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // construction de l'objet réponse JSON\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.message) {\n // ex. {\"message\":\"message not null\", \"status\":\"ERROR\"}\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.message)));\n return;\n }\n var legs = [];\n var legSteps = [];\n var steps = [];\n data = new _model_RouteResponse__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n if (data.hasOwnProperty(\"totalTime\")) {\n data.totalTime = parseFloat(JSONResponse.duration);\n }\n if (data.hasOwnProperty(\"totalDistance\")) {\n data.totalDistance = parseFloat(JSONResponse.distance);\n }\n if (data.hasOwnProperty(\"bbox\")) {\n data.bbox.left = parseFloat(JSONResponse.bbox[0]);\n data.bbox.bottom = parseFloat(JSONResponse.bbox[1]);\n data.bbox.right = parseFloat(JSONResponse.bbox[2]);\n data.bbox.top = parseFloat(JSONResponse.bbox[3]);\n }\n if (data.hasOwnProperty(\"routeGeometry\") && !options.geometryInInstructions) {\n data.routeGeometry = JSONResponse.geometry;\n }\n if (data.hasOwnProperty(\"routeInstructions\") && options.geometryInInstructions) {\n var legList = JSONResponse.portions;\n var i;\n if (Array.isArray(legList) && legList.length) {\n for (i = 0; i < legList.length; i++) {\n legs.push(legList[i]);\n }\n }\n if (legs.length) {\n for (i = 0; i < legs.length; i++) {\n legSteps.push(legs[i].steps);\n }\n }\n if (legSteps.length) {\n for (i = 0; i < legSteps.length; i++) {\n steps = steps.concat(legSteps[i]);\n }\n }\n steps.forEach(function (step) {\n data.routeInstructions.push(new _model_RouteInstruction__WEBPACK_IMPORTED_MODULE_4__[\"default\"]());\n data.routeInstructions[data.routeInstructions.length - 1].duration = step.duration;\n data.routeInstructions[data.routeInstructions.length - 1].distance = step.distance;\n data.routeInstructions[data.routeInstructions.length - 1].code = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].geometry = step.geometry;\n\n // on ne souhaite pas de ce type de valeur...\n if (step.name === \"Valeur non renseignée\") {\n step.name = \"\";\n }\n switch (step.instruction.type) {\n case \"turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Tourner\";\n break;\n case \"new name\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer tout droit\";\n break;\n case \"depart\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Départ\";\n break;\n case \"arrive\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Arrivée\";\n break;\n case \"merge\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Rejoindre\";\n break;\n case \"ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"on ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"off ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la sortie\";\n break;\n case \"fork\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Sur la bifurcation, prendre\";\n break;\n case \"end of road\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"À la fin de la route, prendre\";\n break;\n case \"use lane\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Utiliser la file\";\n break;\n case \"continue\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer\";\n break;\n case \"roundabout\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"rotary\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"roundabout turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond point, tourner\";\n break;\n case \"notification\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"?\" + step.instruction.type + \"?\";\n break;\n }\n if (step.instruction.modifier) {\n switch (step.instruction.modifier) {\n case \"uturn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Faire demi-tour\";\n break;\n case \"sharp right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à droite\";\n break;\n case \"right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à droite\";\n break;\n case \"slight right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" légèrement à droite\";\n break;\n case \"straight\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Continuer tout droit\";\n break;\n case \"slight left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" lègèrement à gauche\";\n break;\n case \"left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à gauche\";\n break;\n case \"sharp left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à gauche\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" ?\" + step.instruction.modifier + \"?\";\n break;\n }\n }\n if (step.instruction.exit) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"\".concat(step.instruction.exit, \"e sortie\");\n }\n if (step.attributes.name) {\n if (step.attributes.name.nom_1_droite || step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" sur\";\n }\n if (step.attributes.name.nom_1_droite) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" \".concat(step.attributes.name.nom_1_droite);\n }\n if (step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" \".concat(step.attributes.name.toponyme);\n }\n }\n });\n }\n }\n if (!data) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_ANALYSE\", \"json\")));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\")));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n options.onSuccess.call(options.scope, data);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (RouteResponseFactory);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXNwb25zZS9Sb3V0ZVJlc3BvbnNlRmFjdG9yeS5qcz8zMTg2Il0sIm5hbWVzIjpbIlJvdXRlUmVzcG9uc2VGYWN0b3J5IiwiYnVpbGQiLCJvcHRpb25zIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJkYXRhIiwicmVzcG9uc2UiLCJyYXdSZXNwb25zZSIsIkpTT05SZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsIm1lc3NhZ2UiLCJvbkVycm9yIiwiY2FsbCIsInNjb3BlIiwiRXJyb3JTZXJ2aWNlIiwiTVJlcyIsImdldE1lc3NhZ2UiLCJsZWdzIiwibGVnU3RlcHMiLCJzdGVwcyIsIlJvdXRlUmVzcG9uc2UiLCJoYXNPd25Qcm9wZXJ0eSIsInRvdGFsVGltZSIsInBhcnNlRmxvYXQiLCJkdXJhdGlvbiIsInRvdGFsRGlzdGFuY2UiLCJkaXN0YW5jZSIsImJib3giLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiLCJ0b3AiLCJnZW9tZXRyeUluSW5zdHJ1Y3Rpb25zIiwicm91dGVHZW9tZXRyeSIsImdlb21ldHJ5IiwibGVnTGlzdCIsInBvcnRpb25zIiwiaSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInB1c2giLCJjb25jYXQiLCJmb3JFYWNoIiwic3RlcCIsInJvdXRlSW5zdHJ1Y3Rpb25zIiwiUm91dGVJbnN0cnVjdGlvbiIsImNvZGUiLCJpbnN0cnVjdGlvbiIsIm5hbWUiLCJ0eXBlIiwibW9kaWZpZXIiLCJleGl0IiwiYXR0cmlidXRlcyIsIm5vbV8xX2Ryb2l0ZSIsInRvcG9ueW1lIiwiZXhjZXB0aW9uUmVwb3J0Iiwib25TdWNjZXNzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBb0Q7QUFDQTtBQUNRO0FBQ1Y7QUFDTTs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLG9CQUFvQixHQUFHO0VBRXZCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxLQUFLLEVBQUcsU0FBUkEsS0FBS0EsQ0FBYUMsT0FBTyxFQUFFO0lBQ3ZCO0lBQ0EsSUFBSUMsTUFBTSxHQUFHQyw4REFBTSxDQUFDQyxTQUFTLENBQUMsc0JBQXNCLENBQUM7SUFDckRGLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLCtCQUErQixDQUFDO0lBRTdDLElBQUlDLElBQUksR0FBRyxJQUFJO0lBRWYsSUFBSUwsT0FBTyxDQUFDTSxRQUFRLEVBQUU7TUFDbEIsSUFBSU4sT0FBTyxDQUFDTyxXQUFXLEVBQUU7UUFDckJOLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLHdCQUF3QixDQUFDO1FBQ3RDQyxJQUFJLEdBQUdMLE9BQU8sQ0FBQ00sUUFBUTtNQUMzQixDQUFDLE1BQU07UUFDSEwsTUFBTSxDQUFDRyxLQUFLLENBQUMseUJBQXlCLENBQUM7UUFFdkMsSUFBSUksWUFBWTtRQUNoQixJQUFJLE9BQU9SLE9BQU8sQ0FBQ00sUUFBUSxLQUFLLFFBQVEsRUFBRTtVQUN0Q0UsWUFBWSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ1YsT0FBTyxDQUFDTSxRQUFRLENBQUM7UUFDL0MsQ0FBQyxNQUFNO1VBQ0hFLFlBQVksR0FBR1IsT0FBTyxDQUFDTSxRQUFRO1FBQ25DOztRQUVBO1FBQ0EsSUFBSUUsWUFBWSxFQUFFO1VBQ2Q7VUFDQSxJQUFJQSxZQUFZLENBQUNHLE9BQU8sRUFBRTtZQUN0QjtZQUNBWCxPQUFPLENBQUNZLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDYixPQUFPLENBQUNjLEtBQUssRUFBRSxJQUFJQyxnRUFBWSxDQUFDQyxnRUFBSSxDQUFDQyxVQUFVLENBQUMsNEJBQTRCLEVBQUVULFlBQVksQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMxSDtVQUNKO1VBQ0EsSUFBSU8sSUFBSSxHQUFHLEVBQUU7VUFDYixJQUFJQyxRQUFRLEdBQUcsRUFBRTtVQUNqQixJQUFJQyxLQUFLLEdBQUcsRUFBRTtVQUVkZixJQUFJLEdBQUcsSUFBSWdCLDREQUFhLENBQUMsQ0FBQztVQUUxQixJQUFJaEIsSUFBSSxDQUFDaUIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2xDakIsSUFBSSxDQUFDa0IsU0FBUyxHQUFHQyxVQUFVLENBQUNoQixZQUFZLENBQUNpQixRQUFRLENBQUM7VUFDdEQ7VUFDQSxJQUFJcEIsSUFBSSxDQUFDaUIsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3RDakIsSUFBSSxDQUFDcUIsYUFBYSxHQUFHRixVQUFVLENBQUNoQixZQUFZLENBQUNtQixRQUFRLENBQUM7VUFDMUQ7VUFFQSxJQUFJdEIsSUFBSSxDQUFDaUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdCakIsSUFBSSxDQUFDdUIsSUFBSSxDQUFDQyxJQUFJLEdBQUdMLFVBQVUsQ0FBQ2hCLFlBQVksQ0FBQ29CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRHZCLElBQUksQ0FBQ3VCLElBQUksQ0FBQ0UsTUFBTSxHQUFHTixVQUFVLENBQUNoQixZQUFZLENBQUNvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkR2QixJQUFJLENBQUN1QixJQUFJLENBQUNHLEtBQUssR0FBR1AsVUFBVSxDQUFDaEIsWUFBWSxDQUFDb0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xEdkIsSUFBSSxDQUFDdUIsSUFBSSxDQUFDSSxHQUFHLEdBQUdSLFVBQVUsQ0FBQ2hCLFlBQVksQ0FBQ29CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNwRDtVQUVBLElBQUl2QixJQUFJLENBQUNpQixjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQ3RCLE9BQU8sQ0FBQ2lDLHNCQUFzQixFQUFFO1lBQ3pFNUIsSUFBSSxDQUFDNkIsYUFBYSxHQUFHMUIsWUFBWSxDQUFDMkIsUUFBUTtVQUM5QztVQUVBLElBQUk5QixJQUFJLENBQUNpQixjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSXRCLE9BQU8sQ0FBQ2lDLHNCQUFzQixFQUFFO1lBQzVFLElBQUlHLE9BQU8sR0FBRzVCLFlBQVksQ0FBQzZCLFFBQVE7WUFDbkMsSUFBSUMsQ0FBQztZQUNMLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixPQUFPLENBQUMsSUFBSUEsT0FBTyxDQUFDSyxNQUFNLEVBQUU7Y0FDMUMsS0FBS0gsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixPQUFPLENBQUNLLE1BQU0sRUFBRUgsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDcEIsSUFBSSxDQUFDd0IsSUFBSSxDQUFDTixPQUFPLENBQUNFLENBQUMsQ0FBQyxDQUFDO2NBQ3pCO1lBQ0o7WUFDQSxJQUFJcEIsSUFBSSxDQUFDdUIsTUFBTSxFQUFFO2NBQ2IsS0FBS0gsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHcEIsSUFBSSxDQUFDdUIsTUFBTSxFQUFFSCxDQUFDLEVBQUUsRUFBRTtnQkFDOUJuQixRQUFRLENBQUN1QixJQUFJLENBQUN4QixJQUFJLENBQUNvQixDQUFDLENBQUMsQ0FBQ2xCLEtBQUssQ0FBQztjQUNoQztZQUNKO1lBQ0EsSUFBSUQsUUFBUSxDQUFDc0IsTUFBTSxFQUFFO2NBQ2pCLEtBQUtILENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR25CLFFBQVEsQ0FBQ3NCLE1BQU0sRUFBRUgsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDbEIsS0FBSyxHQUFHQSxLQUFLLENBQUN1QixNQUFNLENBQUN4QixRQUFRLENBQUNtQixDQUFDLENBQUMsQ0FBQztjQUNyQztZQUNKO1lBRUFsQixLQUFLLENBQUN3QixPQUFPLENBQUMsVUFBVUMsSUFBSSxFQUFFO2NBQzFCeEMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNKLElBQUksQ0FBQyxJQUFJSywrREFBZ0IsQ0FBQyxDQUFDLENBQUM7Y0FDbkQxQyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNoQixRQUFRLEdBQUdvQixJQUFJLENBQUNwQixRQUFRO2NBQ2xGcEIsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDZCxRQUFRLEdBQUdrQixJQUFJLENBQUNsQixRQUFRO2NBQ2xGdEIsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDTyxJQUFJLEdBQUcsRUFBRTtjQUNuRTNDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxHQUFHLEVBQUU7Y0FDMUU1QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNOLFFBQVEsR0FBR1UsSUFBSSxDQUFDVixRQUFROztjQUVsRjtjQUNBLElBQUlVLElBQUksQ0FBQ0ssSUFBSSxLQUFLLHVCQUF1QixFQUFFO2dCQUN2Q0wsSUFBSSxDQUFDSyxJQUFJLEdBQUcsRUFBRTtjQUNsQjtjQUVBLFFBQVFMLElBQUksQ0FBQ0ksV0FBVyxDQUFDRSxJQUFJO2dCQUN6QixLQUFLLE1BQU07a0JBQ1A5QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsSUFBSSxTQUFTO2tCQUNsRjtnQkFDSixLQUFLLFVBQVU7a0JBQ1g1QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsSUFBSSxzQkFBc0I7a0JBQy9GO2dCQUNKLEtBQUssUUFBUTtrQkFDVDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLFFBQVE7a0JBQ2pGO2dCQUNKLEtBQUssUUFBUTtrQkFDVDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLFNBQVM7a0JBQ2xGO2dCQUNKLEtBQUssT0FBTztrQkFDUjVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLFdBQVc7a0JBQ3BGO2dCQUNKLEtBQUssTUFBTTtrQkFDUDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLHFCQUFxQjtrQkFDOUY7Z0JBQ0osS0FBSyxTQUFTO2tCQUNWNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUkscUJBQXFCO2tCQUM5RjtnQkFDSixLQUFLLFVBQVU7a0JBQ1g1QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsSUFBSSxtQkFBbUI7a0JBQzVGO2dCQUNKLEtBQUssTUFBTTtrQkFDUDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLDZCQUE2QjtrQkFDdEc7Z0JBQ0osS0FBSyxhQUFhO2tCQUNkNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksK0JBQStCO2tCQUN4RztnQkFDSixLQUFLLFVBQVU7a0JBQ1g1QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsSUFBSSxrQkFBa0I7a0JBQzNGO2dCQUNKLEtBQUssVUFBVTtrQkFDWDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLFdBQVc7a0JBQ3BGO2dCQUNKLEtBQUssWUFBWTtrQkFDYjVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLGVBQWU7a0JBQ3hGO2dCQUNKLEtBQUssUUFBUTtrQkFDVDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLGVBQWU7a0JBQ3hGO2dCQUNKLEtBQUssaUJBQWlCO2tCQUNsQjVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLHdCQUF3QjtrQkFDakc7Z0JBQ0osS0FBSyxjQUFjO2tCQUNmNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksRUFBRTtrQkFDM0U7Z0JBQ0o7a0JBQ0k1QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsSUFBSSxHQUFHLEdBQUdKLElBQUksQ0FBQ0ksV0FBVyxDQUFDRSxJQUFJLEdBQUcsR0FBRztrQkFDMUc7Y0FDUjtjQUVBLElBQUlOLElBQUksQ0FBQ0ksV0FBVyxDQUFDRyxRQUFRLEVBQUU7Z0JBQzNCLFFBQVFQLElBQUksQ0FBQ0ksV0FBVyxDQUFDRyxRQUFRO2tCQUM3QixLQUFLLE9BQU87b0JBQ1IvQyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsR0FBRyxpQkFBaUI7b0JBQ3pGO2tCQUNKLEtBQUssYUFBYTtvQkFDZDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLHdCQUF3QjtvQkFDakc7a0JBQ0osS0FBSyxPQUFPO29CQUNSNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksV0FBVztvQkFDcEY7a0JBQ0osS0FBSyxjQUFjO29CQUNmNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksc0JBQXNCO29CQUMvRjtrQkFDSixLQUFLLFVBQVU7b0JBQ1g1QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsR0FBRyxzQkFBc0I7b0JBQzlGO2tCQUNKLEtBQUssYUFBYTtvQkFDZDVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLHNCQUFzQjtvQkFDL0Y7a0JBQ0osS0FBSyxNQUFNO29CQUNQNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksV0FBVztvQkFDcEY7a0JBQ0osS0FBSyxZQUFZO29CQUNiNUMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksd0JBQXdCO29CQUNqRztrQkFDSjtvQkFDSTVDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxJQUFJLElBQUksR0FBR0osSUFBSSxDQUFDSSxXQUFXLENBQUNHLFFBQVEsR0FBRyxHQUFHO29CQUMvRztnQkFDUjtjQUNKO2NBRUEsSUFBSVAsSUFBSSxDQUFDSSxXQUFXLENBQUNJLElBQUksRUFBRTtnQkFDdkJoRCxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ3pDLElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNRLFdBQVcsT0FBQU4sTUFBQSxDQUFPRSxJQUFJLENBQUNJLFdBQVcsQ0FBQ0ksSUFBSSxhQUFVO2NBQy9HO2NBRUEsSUFBSVIsSUFBSSxDQUFDUyxVQUFVLENBQUNKLElBQUksRUFBRTtnQkFDdEIsSUFBSUwsSUFBSSxDQUFDUyxVQUFVLENBQUNKLElBQUksQ0FBQ0ssWUFBWSxJQUFJVixJQUFJLENBQUNTLFVBQVUsQ0FBQ0osSUFBSSxDQUFDTSxRQUFRLEVBQUU7a0JBQ3BFbkQsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUN6QyxJQUFJLENBQUN5QyxpQkFBaUIsQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDUSxXQUFXLElBQUksTUFBTTtnQkFDbkY7Z0JBRUEsSUFBSUosSUFBSSxDQUFDUyxVQUFVLENBQUNKLElBQUksQ0FBQ0ssWUFBWSxFQUFFO2tCQUNuQ2xELElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxRQUFBTixNQUFBLENBQVFFLElBQUksQ0FBQ1MsVUFBVSxDQUFDSixJQUFJLENBQUNLLFlBQVksQ0FBRTtnQkFDcEg7Z0JBRUEsSUFBSVYsSUFBSSxDQUFDUyxVQUFVLENBQUNKLElBQUksQ0FBQ00sUUFBUSxFQUFFO2tCQUMvQm5ELElBQUksQ0FBQ3lDLGlCQUFpQixDQUFDekMsSUFBSSxDQUFDeUMsaUJBQWlCLENBQUNMLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ1EsV0FBVyxRQUFBTixNQUFBLENBQVFFLElBQUksQ0FBQ1MsVUFBVSxDQUFDSixJQUFJLENBQUNNLFFBQVEsQ0FBRTtnQkFDaEg7Y0FDSjtZQUNKLENBQUMsQ0FBQztVQUNOO1FBQ0o7UUFFQSxJQUFJLENBQUNuRCxJQUFJLEVBQUU7VUFDUEwsT0FBTyxDQUFDWSxPQUFPLENBQUNDLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUUsSUFBSUMsZ0VBQVksQ0FBQ0MsZ0VBQUksQ0FBQ0MsVUFBVSxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7VUFDMUc7UUFDSjs7UUFFQTtRQUNBLElBQUlaLElBQUksQ0FBQ29ELGVBQWUsRUFBRTtVQUN0QnpELE9BQU8sQ0FBQ1ksT0FBTyxDQUFDQyxJQUFJLENBQUNiLE9BQU8sQ0FBQ2MsS0FBSyxFQUFFLElBQUlDLGdFQUFZLENBQUNDLGdFQUFJLENBQUNDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7VUFDdEc7UUFDSjtNQUNKO0lBQ0osQ0FBQyxNQUFNO01BQ0hqQixPQUFPLENBQUNZLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDYixPQUFPLENBQUNjLEtBQUssRUFBRSxJQUFJQyxnRUFBWSxDQUFDQyxnRUFBSSxDQUFDQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO01BQ2hHO0lBQ0o7SUFFQWpCLE9BQU8sQ0FBQzBELFNBQVMsQ0FBQzdDLElBQUksQ0FBQ2IsT0FBTyxDQUFDYyxLQUFLLEVBQUVULElBQUksQ0FBQztFQUMvQztBQUNKLENBQUM7QUFFY1AsbUZBQW9CIiwiZmlsZSI6Ii4vc3JjL1NlcnZpY2VzL1JvdXRlL1Jlc3BvbnNlL1JvdXRlUmVzcG9uc2VGYWN0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgTVJlcyBmcm9tIFwiLi4vLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uLy4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgUm91dGVSZXNwb25zZSBmcm9tIFwiLi9tb2RlbC9Sb3V0ZVJlc3BvbnNlXCI7XG5pbXBvcnQgUm91dGVJbnN0cnVjdGlvbiBmcm9tIFwiLi9tb2RlbC9Sb3V0ZUluc3RydWN0aW9uXCI7XG5cbi8qKlxuICogRmFjdG9yeSBwb3VyIGfDqW7DqXJlciB1bmUgcmVwb25zZSBKU09OIMOgIHBhcnRpciBkJ3VuIFhNTCBvdSBkJ3VuIEpTT05cbiAqIChGYWN0b3J5KVxuICpcbiAqIEBtb2R1bGUgUm91dGVSZXNwb25zZUZhY3RvcnlcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5Sb3V0ZS5SZXNwb25zZS5Sb3V0ZVJlc3BvbnNlRmFjdG9yeVxuICogQHByaXZhdGVcbiAqL1xudmFyIFJvdXRlUmVzcG9uc2VGYWN0b3J5ID0ge1xuXG4gICAgLyoqXG4gICAgICogaW50ZXJmYWNlIHVuaXF1ZVxuICAgICAqXG4gICAgICogQG1ldGhvZCBidWlsZFxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgZGVmaW5pZXMgZGFucyBsZSBjb21wb3NhbnQgUm91dGVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgKiAgICAgIHJlc3BvbnNlIDpcbiAgICAgKiAgICAgIG91dHB1dEZvcm1hdCA6XG4gICAgICogICAgICByYXdSZXNwb25zZSA6XG4gICAgICogICAgICBzY29wZSA6XG4gICAgICogICAgICBvblN1Y2Nlc3MgOlxuICAgICAqICAgICAgb25FcnJvciA6XG4gICAgICogICB9O1xuICAgICAqXG4gICAgICovXG4gICAgYnVpbGQgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAvLyBsb2dnZXJcbiAgICAgICAgdmFyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJSb3V0ZVJlc3BvbnNlRmFjdG9yeVwiKTtcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFwiUm91dGVSZXNwb25zZUZhY3Rvcnk6OmJ1aWxkKClcIik7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yYXdSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcImFuYWx5emUgcmVzcG9uc2UgOiByYXdcIik7XG4gICAgICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcImFuYWx5emUgcmVzcG9uc2UgOiBqc29uXCIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEpTT05SZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVzcG9uc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgSlNPTlJlc3BvbnNlID0gSlNPTi5wYXJzZShvcHRpb25zLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBKU09OUmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNvbnN0cnVjdGlvbiBkZSBsJ29iamV0IHLDqXBvbnNlIEpTT05cbiAgICAgICAgICAgICAgICBpZiAoSlNPTlJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxlIHNlcnZpY2UgcmVudm9pZSB0IGlsIHVuZSBlcnJldXIgP1xuICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTlJlc3BvbnNlLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4LiB7XCJtZXNzYWdlXCI6XCJtZXNzYWdlIG5vdCBudWxsXCIsIFwic3RhdHVzXCI6XCJFUlJPUlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZShNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTlwiLCBKU09OUmVzcG9uc2UubWVzc2FnZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVnU3RlcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXBzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBSb3V0ZVJlc3BvbnNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJ0b3RhbFRpbWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudG90YWxUaW1lID0gcGFyc2VGbG9hdChKU09OUmVzcG9uc2UuZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwidG90YWxEaXN0YW5jZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50b3RhbERpc3RhbmNlID0gcGFyc2VGbG9hdChKU09OUmVzcG9uc2UuZGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJiYm94XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmJib3gubGVmdCA9IHBhcnNlRmxvYXQoSlNPTlJlc3BvbnNlLmJib3hbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5iYm94LmJvdHRvbSA9IHBhcnNlRmxvYXQoSlNPTlJlc3BvbnNlLmJib3hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5iYm94LnJpZ2h0ID0gcGFyc2VGbG9hdChKU09OUmVzcG9uc2UuYmJveFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmJib3gudG9wID0gcGFyc2VGbG9hdChKU09OUmVzcG9uc2UuYmJveFszXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInJvdXRlR2VvbWV0cnlcIikgJiYgIW9wdGlvbnMuZ2VvbWV0cnlJbkluc3RydWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUdlb21ldHJ5ID0gSlNPTlJlc3BvbnNlLmdlb21ldHJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJyb3V0ZUluc3RydWN0aW9uc1wiKSAmJiBvcHRpb25zLmdlb21ldHJ5SW5JbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZWdMaXN0ID0gSlNPTlJlc3BvbnNlLnBvcnRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsZWdMaXN0KSAmJiBsZWdMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZWdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZ3MucHVzaChsZWdMaXN0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdTdGVwcy5wdXNoKGxlZ3NbaV0uc3RlcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWdTdGVwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVnU3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgPSBzdGVwcy5jb25jYXQobGVnU3RlcHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnMucHVzaChuZXcgUm91dGVJbnN0cnVjdGlvbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uZHVyYXRpb24gPSBzdGVwLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5kaXN0YW5jZSA9IHN0ZXAuZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmNvZGUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmdlb21ldHJ5ID0gc3RlcC5nZW9tZXRyeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIG5lIHNvdWhhaXRlIHBhcyBkZSBjZSB0eXBlIGRlIHZhbGV1ci4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLm5hbWUgPT09IFwiVmFsZXVyIG5vbiByZW5zZWlnbsOpZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGVwLmluc3RydWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInR1cm5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIlRvdXJuZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibmV3IG5hbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIkNvbnRpbnVlciB0b3V0IGRyb2l0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRlcGFydFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiRMOpcGFydFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJpdmVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIkFycml2w6llXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lcmdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCJSZWpvaW5kcmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmFtcFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiUHJlbmRyZSBsYSBicmV0ZWxsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJvbiByYW1wXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCJQcmVuZHJlIGxhIGJyZXRlbGxlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZiByYW1wXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCJQcmVuZHJlIGxhIHNvcnRpZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmb3JrXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCJTdXIgbGEgYmlmdXJjYXRpb24sIHByZW5kcmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kIG9mIHJvYWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIsOAIGxhIGZpbiBkZSBsYSByb3V0ZSwgcHJlbmRyZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1c2UgbGFuZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiVXRpbGlzZXIgbGEgZmlsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjb250aW51ZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiQ29udGludWVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJvdW5kYWJvdXRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIkF1IHJvbmQtcG9pbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicm90YXJ5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCJBdSByb25kLXBvaW50XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJvdW5kYWJvdXQgdHVyblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiQXUgcm9uZCBwb2ludCwgdG91cm5lclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJub3RpZmljYXRpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCI/XCIgKyBzdGVwLmluc3RydWN0aW9uLnR5cGUgKyBcIj9cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmluc3RydWN0aW9uLm1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RlcC5pbnN0cnVjdGlvbi5tb2RpZmllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInV0dXJuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uID0gXCJGYWlyZSBkZW1pLXRvdXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzaGFycCByaWdodFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIiBjb21wbMOodGVtZW50IMOgIGRyb2l0ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiIMOgIGRyb2l0ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNsaWdodCByaWdodFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIiBsw6lnw6hyZW1lbnQgw6AgZHJvaXRlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyYWlnaHRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gPSBcIkNvbnRpbnVlciB0b3V0IGRyb2l0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2xpZ2h0IGxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCIgbMOoZ8OocmVtZW50IMOgIGdhdWNoZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCIgw6AgZ2F1Y2hlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2hhcnAgbGVmdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucm91dGVJbnN0cnVjdGlvbnNbZGF0YS5yb3V0ZUluc3RydWN0aW9ucy5sZW5ndGggLSAxXS5pbnN0cnVjdGlvbiArPSBcIiBjb21wbMOodGVtZW50IMOgIGdhdWNoZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gXCIgP1wiICsgc3RlcC5pbnN0cnVjdGlvbi5tb2RpZmllciArIFwiP1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAuaW5zdHJ1Y3Rpb24uZXhpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zW2RhdGEucm91dGVJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV0uaW5zdHJ1Y3Rpb24gKz0gYCR7c3RlcC5pbnN0cnVjdGlvbi5leGl0fWUgc29ydGllYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5hdHRyaWJ1dGVzLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAuYXR0cmlidXRlcy5uYW1lLm5vbV8xX2Ryb2l0ZSB8fCBzdGVwLmF0dHJpYnV0ZXMubmFtZS50b3BvbnltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IFwiIHN1clwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAuYXR0cmlidXRlcy5uYW1lLm5vbV8xX2Ryb2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IGAgJHtzdGVwLmF0dHJpYnV0ZXMubmFtZS5ub21fMV9kcm9pdGV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmF0dHJpYnV0ZXMubmFtZS50b3BvbnltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yb3V0ZUluc3RydWN0aW9uc1tkYXRhLnJvdXRlSW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDFdLmluc3RydWN0aW9uICs9IGAgJHtzdGVwLmF0dHJpYnV0ZXMubmFtZS50b3BvbnltZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZShNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0FOQUxZU0VcIiwgXCJqc29uXCIpKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaSBsYSByw6lwb25zZSBjb250ZW5haXQgdW5lIGV4Y2VwdGlvbiByZW52b3nDqWUgcGFyIGxlIHNlcnZpY2VcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5leGNlcHRpb25SZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yLmNhbGwob3B0aW9ucy5zY29wZSwgbmV3IEVycm9yU2VydmljZShNUmVzLmdldE1lc3NhZ2UoXCJTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTl8yXCIpKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLm9uRXJyb3IuY2FsbChvcHRpb25zLnNjb3BlLCBuZXcgRXJyb3JTZXJ2aWNlKE1SZXMuZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlcIikpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMub25TdWNjZXNzLmNhbGwob3B0aW9ucy5zY29wZSwgZGF0YSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUm91dGVSZXNwb25zZUZhY3Rvcnk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Route/Response/RouteResponseFactory.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Response/model/RouteInstruction.js": +/*!***************************************************************!*\ + !*** ./src/Services/Route/Response/model/RouteInstruction.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Single Route Instruction object.\n *\n * @property {String} code - Instruction code :\n *\n * - \"F\" : Straight forward\n * - \"B\" : U-turn\n * - \"L\" : turn left\n * - \"R\" : turn right\n * - \"BL\" : turn left strongly\n * - \"BR\" : turn right strongly\n * - \"FL\" : turn lightly to the left\n * - \"FR\" : turn lightly to the right\n * - \"round_about_entry\" : round about entry\n * - \"round_about_exit\" : round about exit\n *\n * @property {String} instruction - Instruction text : translated code + street name\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the street.\n * @property {Float} distance - Length of the instruction. Expressed in km or m, depending on distanceUnit parameter.\n * @property {Float} duration - Instruction duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.Route.RouteInstruction\n */\nfunction RouteInstruction() {\n if (!(this instanceof RouteInstruction)) {\n throw new TypeError(\"RouteInstruction constructor cannot be called as a function.\");\n }\n this.duration = null;\n this.distance = null;\n this.code = null;\n this.instruction = null;\n this.geometry = null; // FIXME can be null if option 'geometryInInstructions' is false !\n}\nRouteInstruction.prototype = {\n constructor: RouteInstruction\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (RouteInstruction);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXNwb25zZS9tb2RlbC9Sb3V0ZUluc3RydWN0aW9uLmpzPzFlOTciXSwibmFtZXMiOlsiUm91dGVJbnN0cnVjdGlvbiIsIlR5cGVFcnJvciIsImR1cmF0aW9uIiwiZGlzdGFuY2UiLCJjb2RlIiwiaW5zdHJ1Y3Rpb24iLCJnZW9tZXRyeSIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLGdCQUFnQkEsQ0FBQSxFQUFJO0VBQ3pCLElBQUksRUFBRSxJQUFJLFlBQVlBLGdCQUFnQixDQUFDLEVBQUU7SUFDckMsTUFBTSxJQUFJQyxTQUFTLENBQUMsOERBQThELENBQUM7RUFDdkY7RUFFQSxJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJO0VBRXBCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUk7RUFFcEIsSUFBSSxDQUFDQyxJQUFJLEdBQUcsSUFBSTtFQUVoQixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJO0VBRXZCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFCO0FBRUFOLGdCQUFnQixDQUFDTyxTQUFTLEdBQUc7RUFFekJDLFdBQVcsRUFBR1I7QUFFbEIsQ0FBQztBQUVjQSwrRUFBZ0IiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvUm91dGUvUmVzcG9uc2UvbW9kZWwvUm91dGVJbnN0cnVjdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBTaW5nbGUgUm91dGUgSW5zdHJ1Y3Rpb24gb2JqZWN0LlxuICpcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBjb2RlIC0gSW5zdHJ1Y3Rpb24gY29kZSA6XG4gKlxuICogLSBcIkZcIiA6IFN0cmFpZ2h0IGZvcndhcmRcbiAqIC0gXCJCXCIgOiBVLXR1cm5cbiAqIC0gXCJMXCIgOiB0dXJuIGxlZnRcbiAqIC0gXCJSXCIgOiB0dXJuIHJpZ2h0XG4gKiAtIFwiQkxcIiA6IHR1cm4gbGVmdCBzdHJvbmdseVxuICogLSBcIkJSXCIgOiB0dXJuIHJpZ2h0IHN0cm9uZ2x5XG4gKiAtIFwiRkxcIiA6IHR1cm4gbGlnaHRseSB0byB0aGUgbGVmdFxuICogLSBcIkZSXCIgOiB0dXJuIGxpZ2h0bHkgdG8gdGhlIHJpZ2h0XG4gKiAtIFwicm91bmRfYWJvdXRfZW50cnlcIiA6IHJvdW5kIGFib3V0IGVudHJ5XG4gKiAtIFwicm91bmRfYWJvdXRfZXhpdFwiIDogcm91bmQgYWJvdXQgZXhpdFxuICpcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBpbnN0cnVjdGlvbiAtIEluc3RydWN0aW9uIHRleHQgOiB0cmFuc2xhdGVkIGNvZGUgKyBzdHJlZXQgbmFtZVxuICogQHByb3BlcnR5IHtPYmplY3R9IGdlb21ldHJ5IC0gR2VvbWV0cnkgKGV4cHJlc3NlZCBpbiBbR2VvSlNPTl17QGxpbmsgaHR0cDovL2dlb2pzb24ub3JnL30pIG9mIHRoZSBzdHJlZXQuXG4gKiBAcHJvcGVydHkge0Zsb2F0fSBkaXN0YW5jZSAtIExlbmd0aCBvZiB0aGUgaW5zdHJ1Y3Rpb24uIEV4cHJlc3NlZCBpbiBrbSBvciBtLCBkZXBlbmRpbmcgb24gZGlzdGFuY2VVbml0IHBhcmFtZXRlci5cbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IGR1cmF0aW9uIC0gSW5zdHJ1Y3Rpb24gZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuUm91dGUuUm91dGVJbnN0cnVjdGlvblxuICovXG5mdW5jdGlvbiBSb3V0ZUluc3RydWN0aW9uICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUm91dGVJbnN0cnVjdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJvdXRlSW5zdHJ1Y3Rpb24gY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmR1cmF0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuZGlzdGFuY2UgPSBudWxsO1xuXG4gICAgdGhpcy5jb2RlID0gbnVsbDtcblxuICAgIHRoaXMuaW5zdHJ1Y3Rpb24gPSBudWxsO1xuXG4gICAgdGhpcy5nZW9tZXRyeSA9IG51bGw7IC8vIEZJWE1FIGNhbiBiZSBudWxsIGlmIG9wdGlvbiAnZ2VvbWV0cnlJbkluc3RydWN0aW9ucycgaXMgZmFsc2UgIVxufVxuXG5Sb3V0ZUluc3RydWN0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yIDogUm91dGVJbnN0cnVjdGlvblxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZUluc3RydWN0aW9uO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/Services/Route/Response/model/RouteInstruction.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Response/model/RouteResponse.js": +/*!************************************************************!*\ + !*** ./src/Services/Route/Response/model/RouteResponse.js ***! + \************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Response object for {@link module:Services~route Gp.Services.route ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Gp.BBox} bbox - Bounding Box of the route. Given when provideBBox parameter is used in function call.\n * @property {Object} routeGeometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the route.\n * @property {Array.} routeInstructions - Instructions of the route.\n * @property {String} totalDistance - Length of the route. If distanceUnit parameter was set to \"km\" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by \" Km\" (e.g. : \"19.6 Km\"). If distanceUnit parameter was set to \"m\", totalDistance is a string containing the total distance expressed in meters (e.g. : \"19599.14\").\n * @property {Float} totalTime - Route duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.RouteResponse\n */\nfunction RouteResponse() {\n if (!(this instanceof RouteResponse)) {\n throw new TypeError(\"RouteResponse constructor cannot be called as a function.\");\n }\n this.totalTime = null;\n this.totalDistance = null;\n this.bbox = {\n left: null,\n right: null,\n top: null,\n bottom: null\n };\n this.routeGeometry = null; // FIXME can be null if option 'geometryInInstructions' is true !\n\n this.routeInstructions = [];\n}\nRouteResponse.prototype = {\n constructor: RouteResponse\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (RouteResponse);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9SZXNwb25zZS9tb2RlbC9Sb3V0ZVJlc3BvbnNlLmpzPzg5ZTciXSwibmFtZXMiOlsiUm91dGVSZXNwb25zZSIsIlR5cGVFcnJvciIsInRvdGFsVGltZSIsInRvdGFsRGlzdGFuY2UiLCJiYm94IiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwicm91dGVHZW9tZXRyeSIsInJvdXRlSW5zdHJ1Y3Rpb25zIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsYUFBYUEsQ0FBQSxFQUFJO0VBQ3RCLElBQUksRUFBRSxJQUFJLFlBQVlBLGFBQWEsQ0FBQyxFQUFFO0lBQ2xDLE1BQU0sSUFBSUMsU0FBUyxDQUFDLDJEQUEyRCxDQUFDO0VBQ3BGO0VBRUEsSUFBSSxDQUFDQyxTQUFTLEdBQUcsSUFBSTtFQUVyQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJO0VBRXpCLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ1JDLElBQUksRUFBRyxJQUFJO0lBQ1hDLEtBQUssRUFBRyxJQUFJO0lBQ1pDLEdBQUcsRUFBRyxJQUFJO0lBQ1ZDLE1BQU0sRUFBRztFQUNiLENBQUM7RUFFRCxJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQzs7RUFFM0IsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxFQUFFO0FBQy9CO0FBRUFWLGFBQWEsQ0FBQ1csU0FBUyxHQUFHO0VBRXRCQyxXQUFXLEVBQUdaO0FBRWxCLENBQUM7QUFFY0EsNEVBQWEiLCJmaWxlIjoiLi9zcmMvU2VydmljZXMvUm91dGUvUmVzcG9uc2UvbW9kZWwvUm91dGVSZXNwb25zZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzcG9uc2Ugb2JqZWN0IGZvciB7QGxpbmsgbW9kdWxlOlNlcnZpY2VzfnJvdXRlIEdwLlNlcnZpY2VzLnJvdXRlICgpfSBpbnZvY2F0aW9uIHdoZW4gc3VjY2Vzc2Z1bC4gUmVjZWl2ZWQgYXMgdGhlIGFyZ3VtZW50IG9mIG9uU3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcHJvcGVydHkge0dwLkJCb3h9IGJib3ggLSBCb3VuZGluZyBCb3ggb2YgdGhlIHJvdXRlLiBHaXZlbiB3aGVuIHByb3ZpZGVCQm94IHBhcmFtZXRlciBpcyB1c2VkIGluIGZ1bmN0aW9uIGNhbGwuXG4gKiBAcHJvcGVydHkge09iamVjdH0gcm91dGVHZW9tZXRyeSAtIEdlb21ldHJ5IChleHByZXNzZWQgaW4gW0dlb0pTT05de0BsaW5rIGh0dHA6Ly9nZW9qc29uLm9yZy99KSBvZiB0aGUgcm91dGUuXG4gKiBAcHJvcGVydHkge0FycmF5LjxHcC5TZXJ2aWNlcy5Sb3V0ZS5Sb3V0ZUluc3RydWN0aW9uPn0gcm91dGVJbnN0cnVjdGlvbnMgLSBJbnN0cnVjdGlvbnMgb2YgdGhlIHJvdXRlLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHRvdGFsRGlzdGFuY2UgLSBMZW5ndGggb2YgdGhlIHJvdXRlLiBJZiBkaXN0YW5jZVVuaXQgcGFyYW1ldGVyIHdhcyBzZXQgdG8gXCJrbVwiIChkZWZhdWx0KSwgdG90YWxEaXN0YW5jZSBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB0b3RhbCBkaXN0YW5jZSBleHByZXNzZWQgaW4ga2lsb21ldGVycywgZm9sbG93ZWQgYnkgXCIgS21cIiAoZS5nLiA6IFwiMTkuNiBLbVwiKS4gSWYgZGlzdGFuY2VVbml0IHBhcmFtZXRlciB3YXMgc2V0IHRvIFwibVwiLCB0b3RhbERpc3RhbmNlIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRvdGFsIGRpc3RhbmNlIGV4cHJlc3NlZCBpbiBtZXRlcnMgKGUuZy4gOiBcIjE5NTk5LjE0XCIpLlxuICogQHByb3BlcnR5IHtGbG9hdH0gdG90YWxUaW1lIC0gUm91dGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgR3AuU2VydmljZXMuUm91dGVSZXNwb25zZVxuICovXG5mdW5jdGlvbiBSb3V0ZVJlc3BvbnNlICgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUm91dGVSZXNwb25zZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJvdXRlUmVzcG9uc2UgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsVGltZSA9IG51bGw7XG5cbiAgICB0aGlzLnRvdGFsRGlzdGFuY2UgPSBudWxsO1xuXG4gICAgdGhpcy5iYm94ID0ge1xuICAgICAgICBsZWZ0IDogbnVsbCxcbiAgICAgICAgcmlnaHQgOiBudWxsLFxuICAgICAgICB0b3AgOiBudWxsLFxuICAgICAgICBib3R0b20gOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMucm91dGVHZW9tZXRyeSA9IG51bGw7IC8vIEZJWE1FIGNhbiBiZSBudWxsIGlmIG9wdGlvbiAnZ2VvbWV0cnlJbkluc3RydWN0aW9ucycgaXMgdHJ1ZSAhXG5cbiAgICB0aGlzLnJvdXRlSW5zdHJ1Y3Rpb25zID0gW107XG59XG5cblJvdXRlUmVzcG9uc2UucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3IgOiBSb3V0ZVJlc3BvbnNlXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlUmVzcG9uc2U7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/Services/Route/Response/model/RouteResponse.js\n"); + +/***/ }), + +/***/ "./src/Services/Route/Route.js": +/*!*************************************!*\ + !*** ./src/Services/Route/Route.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils/LoggerByDefault */ \"./src/Utils/LoggerByDefault.js\");\n/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Utils/MessagesResources */ \"./src/Utils/MessagesResources.js\");\n/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Exceptions/ErrorService */ \"./src/Exceptions/ErrorService.js\");\n/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CommonService */ \"./src/Services/CommonService.js\");\n/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../DefaultUrlService */ \"./src/Services/DefaultUrlService.js\");\n/* harmony import */ var _Request_RouteRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Request/RouteRequestFactory */ \"./src/Services/Route/Request/RouteRequestFactory.js\");\n/* harmony import */ var _Response_RouteResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Response/RouteResponseFactory */ \"./src/Services/Route/Response/RouteResponseFactory.js\");\n\n\n\n\n\n\n\n\n/**\n * @classdesc\n * Appel du service d'itinéraire du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n * @alias Gp.Services.Route\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service itineraire : 'json' uniquement et par défaut.\n *\n * @param {String} [options.routePreference = \"fastest\"] - Mode de calcul à utiliser :\n * - le plus rapide « fastest »\n * - le plus court « shortest »\n * Par défaut : « fastest ».\n *\n * @param {Object} options.startPoint - Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.startPoint.x - Abcisse du point de départ du calcul d'itinéraire.\n * @param {Float} options.startPoint.y - Ordonnée du point de départ du calcul d'itinéraire.\n *\n * @param {Object} options.endPoint - Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.endPoint.x - Abcisse du point d'arrivée du calcul d'itinéraire.\n * @param {Float} options.endPoint.y - Ordonnée du point d'arrivée du calcul d'itinéraire.\n *\n * @param {Object[]} [options.viaPoints] - Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float}\n *\n * @param {String} [options.graph = \"voiture\"] - Type de graphe utilisé : \"Voiture\" ou \"Pieton\".\n * Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non.\n * Par défaut, c'est la valeur \"Voiture\" qui sera utilisée.\n *\n * @param {String[]} [options.exclusions] - DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre \"avoidFeature\" d'OpenLS)\n * On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n * Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {Boolean} [options.geometryInInstructions = false] - Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions.\n * (correspond au paramètre \"provideGeometry\" d'OpenLS) Par défaut : false.\n *\n * @param {Boolean} [options.provideBbox = true] - Indique si les instructions doivent être localisées par une bbox dans la réponse.\n * Par défaut : true.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse.\n * Par défaut : m.\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard.\n * Les valeurs possibles sont \"standard\", \"second\", \"minute\" ou \"hour\".\n * Par défaut : \"standard\".\n *\n * @param {String} [options.srs] - Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'.\n *\n * @param {String[]} [options.waysAttributes] - Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'XHR',\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * resource : 'bdtopo'\n * outputFormat : 'json',\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : true,\n * exclusions : [\"Bridge\", \"Tunnel\", \"Toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : true,\n * routePreference : \"fastest\"\n * };\n *\n */\nfunction Route(options) {\n if (!(this instanceof Route)) {\n throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"CLASS_CONSTRUCTOR\", \"Route\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Route\";\n\n // appel du constructeur par heritage\n _CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].apply(this, arguments);\n this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getLogger(\"Gp.Services.Route\");\n this.logger.trace(\"[Constructeur Route (options)]\");\n if (!options.startPoint) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"startPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.startPoint.x === null) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"startPoint.x\"));\n }\n if (options.startPoint.y === null) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"startPoint.y\"));\n }\n if (!options.endPoint) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"endPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.endPoint.x === null) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"endPoint.x\"));\n }\n if (options.endPoint.y === null) {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_MISSING\", \"endPoint.y\"));\n }\n\n // options par defaut\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n if (options.outputFormat && options.outputFormat !== \"json\") {\n this.logger.warn(\"options.outputFormat could only be json\");\n }\n this.options.outputFormat = \"json\";\n this.options.resource = options.resource || \"bdtopo-osrm\";\n this.options.startPoint = options.startPoint;\n this.options.endPoint = options.endPoint;\n this.options.viaPoints = options.viaPoints || [];\n this.options.routePreference = options.routePreference || \"fastest\";\n /** Gestion des anciennes valeurs de graph */\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n /** Gestion de l'ancien paramètre exclusion */\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n this.options.geometryInInstructions = options.geometryInInstructions || false;\n this.options.provideBbox = options.provideBbox || true;\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n this.options.expectedStartTime = null; // FIXME not yet implemented !\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.waysAttributes = options.waysAttributes || [];\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var UrlByDefault = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Route.newUrl();\n if (!UrlByDefault) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = UrlByDefault;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:Route#\n */\nRoute.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nRoute.prototype.constructor = Route;\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.buildRequest = function (error, success) {\n var options = {\n // spécifique au service\n resource: this.options.resource,\n startPoint: this.options.startPoint,\n endPoint: this.options.endPoint,\n viaPoints: this.options.viaPoints,\n provideBbox: this.options.provideBbox,\n constraints: this.options.constraints,\n distanceUnit: this.options.distanceUnit,\n timeUnit: this.options.timeUnit,\n graph: this.options.graph,\n geometryInInstructions: this.options.geometryInInstructions,\n routePreference: this.options.routePreference,\n srs: this.options.srs,\n waysAttributes: this.options.waysAttributes\n };\n this.request = _Request_RouteRequestFactory__WEBPACK_IMPORTED_MODULE_5__[\"default\"].build(options);\n\n // on teste si la requete a bien été construite !\n if (!this.request) {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_REQUEST_BUILD\")));\n } else {\n success.call(this, this.request);\n }\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service\n\n if (this.response) {\n var options = {\n distanceUnit: this.options.distanceUnit,\n timeUnit: this.options.timeUnit,\n response: this.response,\n outputFormat: this.options.outputFormat,\n // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse: this.options.rawResponse,\n onError: error,\n onSuccess: success,\n scope: this,\n geometryInInstructions: this.options.geometryInInstructions\n };\n _Response_RouteResponseFactory__WEBPACK_IMPORTED_MODULE_6__[\"default\"].build(options);\n } else {\n error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__[\"default\"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Route);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9Sb3V0ZS5qcz9lYjIwIl0sIm5hbWVzIjpbIlJvdXRlIiwib3B0aW9ucyIsIlR5cGVFcnJvciIsIl8iLCJnZXRNZXNzYWdlIiwiQ0xBU1NOQU1FIiwiQ29tbW9uU2VydmljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9nZ2VyIiwiTG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidHJhY2UiLCJzdGFydFBvaW50IiwiRXJyb3IiLCJ4IiwieSIsImVuZFBvaW50Iiwib3V0cHV0Rm9ybWF0Iiwid2FybiIsInJlc291cmNlIiwidmlhUG9pbnRzIiwicm91dGVQcmVmZXJlbmNlIiwiZ3JhcGgiLCJjb25zdHJhaW50cyIsIkFycmF5IiwiaXNBcnJheSIsImsiLCJsZW5ndGgiLCJwdXNoIiwiY29uc3RyYWludFR1bm5lbCIsImNvbnN0cmFpbnRQb250IiwiY29uc3RyYWludEF1dG9yb3V0ZSIsImV4Y2x1c2lvbnMiLCJjIiwidG9Mb3dlckNhc2UiLCJjb25zdHJhaW50VHlwZSIsImtleSIsIm9wZXJhdG9yIiwidmFsdWUiLCJnZW9tZXRyeUluSW5zdHJ1Y3Rpb25zIiwicHJvdmlkZUJib3giLCJkaXN0YW5jZVVuaXQiLCJ0aW1lVW5pdCIsImV4cGVjdGVkU3RhcnRUaW1lIiwic3JzIiwid2F5c0F0dHJpYnV0ZXMiLCJzZXJ2ZXJVcmwiLCJVcmxCeURlZmF1bHQiLCJEZWZhdWx0VXJsU2VydmljZSIsIm5ld1VybCIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiYnVpbGRSZXF1ZXN0IiwiZXJyb3IiLCJzdWNjZXNzIiwicmVxdWVzdCIsIlJvdXRlUmVxdWVzdEZhY3RvcnkiLCJidWlsZCIsImNhbGwiLCJFcnJvclNlcnZpY2UiLCJhbmFseXplUmVzcG9uc2UiLCJyZXNwb25zZSIsInJhd1Jlc3BvbnNlIiwib25FcnJvciIsIm9uU3VjY2VzcyIsInNjb3BlIiwiUm91dGVSZXNwb25z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SHFELE9BQU8sQ0FBQ0ksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUNILE9BQU8sQ0FBQztFQUNwQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTFELEtBQUssQ0FBQ21ELFNBQVMsQ0FBQ1ksZUFBZSxHQUFHLFVBQVVQLEtBQUssRUFBRUMsT0FBTyxFQUFFO0VBQ3hEO0VBQ0E7O0VBRUEsSUFBSSxJQUFJLENBQUNPLFFBQVEsRUFBRTtJQUNmLElBQUkvRCxPQUFPLEdBQUc7TUFDVnlDLFlBQVksRUFBRyxJQUFJLENBQUN6QyxPQUFPLENBQUN5QyxZQUFZO01BQ3hDQyxRQUFRLEVBQUcsSUFBSSxDQUFDMUMsT0FBTyxDQUFDMEMsUUFBUTtNQUNoQ3FCLFFBQVEsRUFBRyxJQUFJLENBQUNBLFFBQVE7TUFDeEI5QyxZQUFZLEVBQUcsSUFBSSxDQUFDakIsT0FBTyxDQUFDaUIsWUFBWTtNQUFFO01BQzFDK0MsV0FBVyxFQUFHLElBQUksQ0FBQ2hFLE9BQU8sQ0FBQ2dFLFdBQVc7TUFDdENDLE9BQU8sRUFBR1YsS0FBSztNQUNmVyxTQUFTLEVBQUdWLE9BQU87TUFDbkJXLEtBQUssRUFBRyxJQUFJO01BQ1o1QixzQkFBc0IsRUFBRyxJQUFJLENBQUN2QyxPQUFPLENBQUN1QztJQUMxQyxDQUFDO0lBRUQ2QixzRUFBb0IsQ0FBQ1QsS0FBSyxDQUFDM0QsT0FBTyxDQUFDO0VBQ3ZDLENBQUMsTUFBTTtJQUNIdUQsS0FBSyxDQUFDSyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUlDLGdFQUFZLENBQUMzRCxnRUFBQyxDQUFDQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0VBQzlFO0FBQ0osQ0FBQztBQUVjSixvRUFBSyIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9Sb3V0ZS9Sb3V0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vVXRpbHMvTG9nZ2VyQnlEZWZhdWx0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vLi4vVXRpbHMvTWVzc2FnZXNSZXNvdXJjZXNcIjtcbmltcG9ydCBFcnJvclNlcnZpY2UgZnJvbSBcIi4uLy4uL0V4Y2VwdGlvbnMvRXJyb3JTZXJ2aWNlXCI7XG5pbXBvcnQgQ29tbW9uU2VydmljZSBmcm9tIFwiLi4vQ29tbW9uU2VydmljZVwiO1xuaW1wb3J0IERlZmF1bHRVcmxTZXJ2aWNlIGZyb20gXCIuLi9EZWZhdWx0VXJsU2VydmljZVwiO1xuaW1wb3J0IFJvdXRlUmVxdWVzdEZhY3RvcnkgZnJvbSBcIi4vUmVxdWVzdC9Sb3V0ZVJlcXVlc3RGYWN0b3J5XCI7XG5pbXBvcnQgUm91dGVSZXNwb25zZUZhY3RvcnkgZnJvbSBcIi4vUmVzcG9uc2UvUm91dGVSZXNwb25zZUZhY3RvcnlcIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBBcHBlbCBkdSBzZXJ2aWNlIGQnaXRpbsOpcmFpcmUgZHUgR8Opb3BvcnRhaWwgOlxuICogICAgIGVudm9pIGRlIGxhIHJlcXXDqnRlIGNvbnN0cnVpdGUgc2Vsb24gbGVzIHBhcmFtw6h0cmVzIGVuIG9wdGlvbnMsXG4gKiAgICAgw6l2ZW50dWVsbGVtZW50IHBhcnNpbmcgZXQgYW5hbHlzZSAgZGUgbGEgcsOpcG9uc2UsXG4gKiAgICAgcmV0b3VyIGQndW5lIHLDqXBvbnNlIGVuIHBhcmFtw6h0cmUgZGUgbGEgZm9uY3Rpb24gb25TdWNjZXNzLlxuICpcbiAqIEBhbGlhcyBHcC5TZXJ2aWNlcy5Sb3V0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyB7R3AuU2VydmljZXMuQ29tbW9uU2VydmljZX1cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyBzcMOpY2lmaXF1ZXMgYXUgc2VydmljZSAoKyBsZXMgb3B0aW9ucyBoZXJpdMOpZXMpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucmVzb3VyY2UgLSBMYSByZXNzb3VyY2UgdXRpbGlzw6llIHBvdXIgbGUgY2FsY3VsLiBDZSBwYXJhbcOodHJlIGRldnJhaXQgw6p0cmUgb2JsaWdhdG9pcmUgY2FyIGlsIGwnZXN0IGRhbnMgbCdhcHBlbCBhdSBzZXJ2aWNlLiBNYWlzIGlsIG5lIGwnZXN0IHBhcyBwb3VyIGRlcyByYWlzb25zIGRlIHLDqXRyb2NvbXBhdGliaWxpdMOpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLm91dHB1dEZvcm1hdCAtIExlIGZvcm1hdCBkZSBsYSByw6lwb25zZSBkdSBzZXJ2aWNlIGl0aW5lcmFpcmUgOiAnanNvbicgdW5pcXVlbWVudCBldCBwYXIgZMOpZmF1dC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucm91dGVQcmVmZXJlbmNlID0gXCJmYXN0ZXN0XCJdIC0gTW9kZSBkZSBjYWxjdWwgw6AgdXRpbGlzZXIgOlxuICogLSBsZSBwbHVzIHJhcGlkZSDCqyBmYXN0ZXN0IMK7XG4gKiAtIGxlIHBsdXMgY291cnQgwqsgc2hvcnRlc3QgwrtcbiAqIFBhciBkw6lmYXV0IDogwqsgZmFzdGVzdCDCuy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5zdGFydFBvaW50IC0gUG9pbnQgZGUgZMOpcGFydCBkdSBjYWxjdWwuIENvb3Jkb25uw6llcyBleHByaW3DqWVzIGVuIGxvbmdpdHVkZXMsIGxhdGl0dWRlcyAoRVBTRzo0MzI2KVxuICogQHBhcmFtIHtGbG9hdH0gb3B0aW9ucy5zdGFydFBvaW50LnggLSBBYmNpc3NlIGR1IHBvaW50IGRlIGTDqXBhcnQgZHUgY2FsY3VsIGQnaXRpbsOpcmFpcmUuXG4gKiBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnN0YXJ0UG9pbnQueSAtIE9yZG9ubsOpZSBkdSBwb2ludCBkZSBkw6lwYXJ0IGR1IGNhbGN1bCBkJ2l0aW7DqXJhaXJlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmVuZFBvaW50IC0gUG9pbnQgZCdhcnJpdsOpZSBkdSBjYWxjdWwuIENvb3Jkb25uw6llcyBleHByaW3DqWVzIGVuIGxvbmdpdHVkZXMsIGxhdGl0dWRlcyAoRVBTRzo0MzI2KVxuICogQHBhcmFtIHtGbG9hdH0gb3B0aW9ucy5lbmRQb2ludC54IC0gQWJjaXNzZSBkdSBwb2ludCBkJ2Fycml2w6llIGR1IGNhbGN1bCBkJ2l0aW7DqXJhaXJlLlxuICogQHBhcmFtIHtGbG9hdH0gb3B0aW9ucy5lbmRQb2ludC55IC0gT3Jkb25uw6llIGR1IHBvaW50IGQnYXJyaXbDqWUgZHUgY2FsY3VsIGQnaXRpbsOpcmFpcmUuXG4gKlxuICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMudmlhUG9pbnRzXSAtIExpc3RlIGRlIHBvaW50ICh7eDpGbG9hdCx5OkZsb2F0fSkgaW50ZXJtw6lkYWlyZXMgcXVlIGwnaXRpbsOpcmFpcmUgZG9pdCBlbXBydW50ZXIgZGFucyBsJ29yZHJlIGR1IHRhYmxlYXUuXG4gKiAgICAgIENvb3Jkb25uw6llcyBleHByaW3DqWVzIGVuIGxvbmdpdHVkZXMsIGxhdGl0dWRlcyAoRVBTRzo0MzI2KSA6e3g6ZmxvYXQsIHk6ZmxvYXR9XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmdyYXBoID0gXCJ2b2l0dXJlXCJdIC0gVHlwZSBkZSBncmFwaGUgdXRpbGlzw6kgOiBcIlZvaXR1cmVcIiBvdSBcIlBpZXRvblwiLlxuICogICAgICBEw6l0ZXJtaW5lIGxlIHByb2ZpbCBkZSB2aXRlc3NlcyB1dGlsaXPDqSBwb3VyIGxlIGNhbGN1bCBhaW5zaSBxdWUgbGVzIHRyb27Dp29ucyBhdXRvcmlzw6lzIG91IG5vbi5cbiAqICAgICAgUGFyIGTDqWZhdXQsIGMnZXN0IGxhIHZhbGV1ciBcIlZvaXR1cmVcIiBxdWkgc2VyYSB1dGlsaXPDqWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmdbXX0gW29wdGlvbnMuZXhjbHVzaW9uc10gLSBERVBSRUNBVEVEOiBDcml0w6hyZXMgZCdleGNsdXNpb25zIMOgIGFwcGxpcXVlciBwb3VyIGxlIGNhbGN1bC4gKGNvcnJlc3BvbmQgYXUgcGFyYW3DqHRyZSBcImF2b2lkRmVhdHVyZVwiIGQnT3BlbkxTKVxuICogICAgICBPbiBwcsOpY2lzZSBpY2kgbGUgdHlwZSBkZSB0cm9uw6dvbnMgcXVlIGwnb24gbmUgdmV1dCBwYXMgcXVlIGwnaXRpbsOpcmFpcmUgZW1wcnVudGVcbiAqICAgICAgKHZhbGV1cnMgcG9zc2libGVzIDogwqsgdG9sbCDCuyAow6l2aXRlciBsZXMgcMOpYWdlcyksIMKrIGJyaWRnZSDCuywgwqsgdHVubmVsIMK7KS5cbiAqICAgICAgQ2UgcGFyYW3DqHRyZSBlc3QgY29uc2VydsOpIHBvdXIgdW5lIHLDqXRyb2NvbXBhdGliaWxpdMOpIGRlIGwnYXBpLiBMZSBub3V2ZWF1IHBhcmFtw6h0cmUgw6AgdXRpbGlzZXIgZXN0IG9wdGlvbnMuY29uc3RyYWludHNcbiAqXG4gKiBAcGFyYW0ge09iamVjdFtdfSBbb3B0aW9ucy5jb25zdHJhaW50c10gLSBDcml0w6hyZXMgZGUgY29udHJhaW50ZXMgw6AgYXBwbGlxdWVyIHN1ciB1biBpdGluw6lyYWlyZS4gTGVzIHZhbGV1cnMgZGlzcG9uaWJsZXMgZMOpcGVuZGVudCBkZSBsYSByZXNzb3VyY2UgdXRpbGlzw6llLiBJbCBlc3QgZG9uYyB1dGlsZSBkZSByZWdhcmRlciBsZSBnZXRDYXBhYmlsaXRpZXMuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29uc3RyYWludHMuY29uc3RyYWludFR5cGVdIC0gVHlwZSBkZSBsYSBjb250cmFpbnRlLiBHw6luw6lyYWxlbWVudCBcImJhbm5lZFwiLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbnN0cmFpbnRzLmtleV0gLSBDbMOpIGRlIGxhIGNvbnRyYWludGUuIEfDqW7DqXJhbGVtZW50IFwid2F5VHlwZVwiLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbnN0cmFpbnRzLm9wZXJhdG9yXSAtIE9ww6lyYXRldXIgZGUgbGEgY29udHJhaW50ZS4gR8OpbsOpcmFsZW1lbnQgXCI9XCIuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29uc3RyYWludHMudmFsdWVdIC0gVmFsZXVyIGRlIGxhIGNvbnRyYWludGUuIEfDqW7DqXJhbGVtZW50IFwiYXV0b3JvdXRlXCIuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5nZW9tZXRyeUluSW5zdHJ1Y3Rpb25zID0gZmFsc2VdIC0gSW5kaXF1ZSBzaSBsYSBnw6lvbcOpdHJpZSBkZSBsJ2l0aW7DqXJhaXJlIGRvaXQgw6p0cmUgcmVwcmlzZSBtb3JjZWF1IHBhciBtb3JjZWF1IGRhbnMgbGVzIGluc3RydWN0aW9ucy5cbiAqICAgICAgKGNvcnJlc3BvbmQgYXUgcGFyYW3DqHRyZSBcInByb3ZpZGVHZW9tZXRyeVwiIGQnT3BlbkxTKSBQYXIgZMOpZmF1dCA6IGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucHJvdmlkZUJib3ggPSB0cnVlXSAtIEluZGlxdWUgc2kgbGVzIGluc3RydWN0aW9ucyBkb2l2ZW50IMOqdHJlIGxvY2FsaXPDqWVzIHBhciB1bmUgYmJveCBkYW5zIGxhIHLDqXBvbnNlLlxuICogICAgICBQYXIgZMOpZmF1dCA6IHRydWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRpc3RhbmNlVW5pdCA9IFwibVwiXSAtIEluZGlxdWUgc2kgbGEgZGlzdGFuY2UgZG9pdCDDqnRyZSBleHByaW3DqWUgZW4ga20gb3UgbSBkYW5zIGxhIHLDqXBvbnNlLlxuICogICAgICBQYXIgZMOpZmF1dCA6IG0uXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVVuaXQgPSBcInNlY29uZFwiXSAtIEluZGlxdWUgc2kgbGEgZHVyw6llIGRvaXQgw6p0cmUgZXhwcmltw6llIGVuIHNlY29uZGUsIG1pbnV0ZSBvdSBoZXVyZSBkYW5zIGxhIHLDqXBvbnNlLiBJbCBwZXV0LcOqdHJlIGZvcm1hdHTDqSBoaDptbTo6c3MgYXZlYyBsYSB2YWxldXIgc3RhbmRhcmQuXG4gKiAgICAgIExlcyB2YWxldXJzIHBvc3NpYmxlcyBzb250IFwic3RhbmRhcmRcIiwgXCJzZWNvbmRcIiwgXCJtaW51dGVcIiBvdSBcImhvdXJcIi5cbiAqICAgICAgUGFyIGTDqWZhdXQgOiBcInN0YW5kYXJkXCIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNyc10gLSBTeXN0w6htZSBkZSBjb29yZG9ubsOpZXMgZGFucyBsZXF1ZWwgbGVzIHBhcmFtw6h0cmVzIGfDqW9ncmFwaGlxdWVzIGVuIGVudHLDqWUgZXQgbGEgcsOpcG9uc2UgZHUgc2VydmljZSBzb250IGV4cHJpbcOpcy5cbiAqICAgICAgUGFzIGRlIHZhbGV1ciBwYXIgZMOpZmF1dC4gU2kgbGUgc2VydmV1ciBjb25zdWx0w6kgZXN0IGNlbHVpIGR1IEfDqW9wb3J0YWlsLCBsYSB2YWxldXIgcGFyIGTDqWZhdXQgc2VyYSBkb25jIGNlbGxlIGR1IHNlcnZpY2UgOiAnRVBTRzo0MzI2Jy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ1tdfSBbb3B0aW9ucy53YXlzQXR0cmlidXRlc10gLSBOb20gZGVzIGF0dHJpYnV0cyBkZXMgdm9pZXMuIExlcyB2YWxldXJzIGRpc3BvbmlibGVzIGTDqXBlbmRlbnQgZGUgbGEgcmVzc291cmNlIHV0aWxpc8OpZS4gSWwgZXN0IGRvbmMgdXRpbGUgZGUgcmVnYXJkZXIgbGUgZ2V0Q2FwYWJpbGl0aWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAgdmFyIG9wdGlvbnMgPSB7XG4gKiAgICAgIC8vIG9wdGlvbnMgY29tbXVuZXMgYXV4IHNlcnZpY2VzXG4gKiAgICAgIGFwaUtleSA6IG51bGwsXG4gKiAgICAgIHNlcnZlclVybCA6ICdodHRwOi8vbG9jYWxob3N0L3NlcnZpY2UvJyxcbiAqICAgICAgcHJvdG9jb2wgOiAnWEhSJyxcbiAqICAgICAgcHJveHlVUkwgOiBudWxsLFxuICogICAgICBodHRwTWV0aG9kIDogJ0dFVCcsIC8vIEdFVHxQT1NUXG4gKiAgICAgIHRpbWVPdXQgOiAxMDAwMCwgLy8gbXNcbiAqICAgICAgcmF3UmVzcG9uc2UgOiBmYWxzZSwgLy8gdHJ1ZXxmYWxzZVxuICogICAgICBzY29wZSA6IG51bGwsIC8vIHRoaXNcbiAqICAgICAgb25TdWNjZXNzIDogZnVuY3Rpb24gKHJlc3BvbnNlKSB7fSxcbiAqICAgICAgb25GYWlsdXJlIDogZnVuY3Rpb24gKGVycm9yKSB7fSxcbiAqICAgICAgLy8gc3DDqWNpZmlxdWUgYXUgc2VydmljZVxuICogICAgICByZXNvdXJjZSA6ICdiZHRvcG8nXG4gKiAgICAgIG91dHB1dEZvcm1hdCA6ICdqc29uJyxcbiAqICAgICAgc3RhcnRQb2ludCA6IHtcbiAqICAgICAgICAgIHggOiA0Mi4xMTIxLFxuICogICAgICAgICAgeSA6IDEuNTU1N1xuICogICAgICB9LFxuICogICAgICBlbmRQb2ludCA6IHtcbiAqICAgICAgICAgIHggOiA0Mi4xMTIxLFxuICogICAgICAgICAgeSA6IDEuNTU1N1xuICogICAgICB9LFxuICogICAgICBwcm92aWRlQmJveCA6IHRydWUsXG4gKiAgICAgIGV4Y2x1c2lvbnMgOiBbXCJCcmlkZ2VcIiwgXCJUdW5uZWxcIiwgXCJUb2xsXCJdLFxuICogICAgICBkaXN0YW5jZVVuaXQgOiBcImttXCIsXG4gKiAgICAgIGdyYXBoIDogXCJWb2l0dXJlXCIsXG4gKiAgICAgIGdlb21ldHJ5SW5JbnN0cnVjdGlvbnMgOiB0cnVlLFxuICogICAgICByb3V0ZVByZWZlcmVuY2UgOiBcImZhc3Rlc3RcIlxuICogIH07XG4gKlxuICovXG5mdW5jdGlvbiBSb3V0ZSAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfLmdldE1lc3NhZ2UoXCJDTEFTU19DT05TVFJVQ1RPUlwiLCBcIlJvdXRlXCIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb20gZGUgbGEgY2xhc3NlIChoZXJpdGFnZSlcbiAgICAgKi9cbiAgICB0aGlzLkNMQVNTTkFNRSA9IFwiUm91dGVcIjtcblxuICAgIC8vIGFwcGVsIGR1IGNvbnN0cnVjdGV1ciBwYXIgaGVyaXRhZ2VcbiAgICBDb21tb25TZXJ2aWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLmxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoXCJHcC5TZXJ2aWNlcy5Sb3V0ZVwiKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShcIltDb25zdHJ1Y3RldXIgUm91dGUgKG9wdGlvbnMpXVwiKTtcblxuICAgIGlmICghb3B0aW9ucy5zdGFydFBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwic3RhcnRQb2ludFwiKSk7XG4gICAgfVxuXG4gICAgLy8gb24gbGFuY2UgdW5lIGV4Y2VwdGlvbiBhZmluIGQnZXZpdGVyIGF1IHNlcnZpY2UgZGUgbGUgZmFpcmUuLi5cbiAgICBpZiAob3B0aW9ucy5zdGFydFBvaW50LnggPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX01JU1NJTkdcIiwgXCJzdGFydFBvaW50LnhcIikpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnN0YXJ0UG9pbnQueSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fTUlTU0lOR1wiLCBcInN0YXJ0UG9pbnQueVwiKSk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmVuZFBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihfLmdldE1lc3NhZ2UoXCJQQVJBTV9NSVNTSU5HXCIsIFwiZW5kUG9pbnRcIikpO1xuICAgIH1cblxuICAgIC8vIG9uIGxhbmNlIHVuZSBleGNlcHRpb24gYWZpbiBkJ2V2aXRlciBhdSBzZXJ2aWNlIGRlIGxlIGZhaXJlLi4uXG4gICAgaWYgKG9wdGlvbnMuZW5kUG9pbnQueCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fTUlTU0lOR1wiLCBcImVuZFBvaW50LnhcIikpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmVuZFBvaW50LnkgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8uZ2V0TWVzc2FnZShcIlBBUkFNX01JU1NJTkdcIiwgXCJlbmRQb2ludC55XCIpKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIHBhciBkZWZhdXRcblxuICAgIC8vIG9uIHBhc3NlIGwnb3B0aW9uIG91dHB1dEZvcm1hdCBlbiBtaW51c2N1bGVzIGFmaW4gZCfDqXZpdGVyIGRlcyBleGNlcHRpb25zLlxuICAgIGlmIChvcHRpb25zLm91dHB1dEZvcm1hdCAmJiBvcHRpb25zLm91dHB1dEZvcm1hdCAhPT0gXCJqc29uXCIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm9wdGlvbnMub3V0cHV0Rm9ybWF0IGNvdWxkIG9ubHkgYmUganNvblwiKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLm91dHB1dEZvcm1hdCA9IFwianNvblwiO1xuXG4gICAgdGhpcy5vcHRpb25zLnJlc291cmNlID0gb3B0aW9ucy5yZXNvdXJjZSB8fCBcImJkdG9wby1vc3JtXCI7XG4gICAgdGhpcy5vcHRpb25zLnN0YXJ0UG9pbnQgPSBvcHRpb25zLnN0YXJ0UG9pbnQ7XG4gICAgdGhpcy5vcHRpb25zLmVuZFBvaW50ID0gb3B0aW9ucy5lbmRQb2ludDtcbiAgICB0aGlzLm9wdGlvbnMudmlhUG9pbnRzID0gb3B0aW9ucy52aWFQb2ludHMgfHwgW107XG4gICAgdGhpcy5vcHRpb25zLnJvdXRlUHJlZmVyZW5jZSA9IG9wdGlvbnMucm91dGVQcmVmZXJlbmNlIHx8IFwiZmFzdGVzdFwiO1xuICAgIC8qKiBHZXN0aW9uIGRlcyBhbmNpZW5uZXMgdmFsZXVycyBkZSBncmFwaCAqL1xuICAgIGlmIChvcHRpb25zLmdyYXBoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmdyYXBoID09PSBcIlZvaXR1cmVcIikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmdyYXBoID0gXCJjYXJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ncmFwaCA9PT0gXCJQaWV0b25cIikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmdyYXBoID0gXCJwZWRlc3RyaWFuXCI7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZ3JhcGggPSBcImNhclwiO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMuY29uc3RyYWludHMgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5jb25zdHJhaW50cykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbnN0cmFpbnRzKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvcHRpb25zLmNvbnN0cmFpbnRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzLnB1c2gob3B0aW9ucy5jb25zdHJhaW50c1trXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXy5nZXRNZXNzYWdlKFwiUEFSQU1fVFlQRVwiLCBcImNvbnN0cmFpbnRzXCIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZXN0aW9uIGRlIGwnYW5jaWVuIHBhcmFtw6h0cmUgZXhjbHVzaW9uICovXG4gICAgdmFyIGNvbnN0cmFpbnRUdW5uZWwgPSB7fTtcbiAgICB2YXIgY29uc3RyYWludFBvbnQgPSB7fTtcbiAgICB2YXIgY29uc3RyYWludEF1dG9yb3V0ZSA9IHt9O1xuICAgIGlmIChvcHRpb25zLmV4Y2x1c2lvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZXhjbHVzaW9ucy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJvcHRpb25zLmV4Y2x1c2lvbnMgaXMgREVQUkVDQVRFRCAhIVwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgb3B0aW9ucy5leGNsdXNpb25zLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4Y2x1c2lvbnNbY10gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGNsdXNpb25zW2NdID0gb3B0aW9ucy5leGNsdXNpb25zW2NdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gbmUgY3LDqWUgcGFzIHVuZSBlcnJldXIgcG91ciByw6l0cm8tY29tcGF0aWJpbGl0w6kgYXZlYyBsZXMgYW5jaWVubmVzIHZlcnNpb25zXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leGNsdXNpb25zW2NdID09PSBcInRvbGxcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50QXV0b3JvdXRlLmNvbnN0cmFpbnRUeXBlID0gXCJiYW5uZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludEF1dG9yb3V0ZS5rZXkgPSBcIndheVR5cGVcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludEF1dG9yb3V0ZS5vcGVyYXRvciA9IFwiPVwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50QXV0b3JvdXRlLnZhbHVlID0gXCJhdXRvcm91dGVcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzLnB1c2goY29uc3RyYWludEF1dG9yb3V0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4Y2x1c2lvbnNbY10gPT09IFwidHVubmVsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFR1bm5lbC5jb25zdHJhaW50VHlwZSA9IFwiYmFubmVkXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRUdW5uZWwua2V5ID0gXCJ3YXlUeXBlXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRUdW5uZWwub3BlcmF0b3IgPSBcIj1cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFR1bm5lbC52YWx1ZSA9IFwidHVubmVsXCI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb25zdHJhaW50cy5wdXNoKGNvbnN0cmFpbnRUdW5uZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leGNsdXNpb25zW2NdID09PSBcImJyaWRnZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRQb250LmNvbnN0cmFpbnRUeXBlID0gXCJiYW5uZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludFBvbnQua2V5ID0gXCJ3YXlUeXBlXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRQb250Lm9wZXJhdG9yID0gXCI9XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRQb250LnZhbHVlID0gXCJwb250XCI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb25zdHJhaW50cy5wdXNoKGNvbnN0cmFpbnRQb250KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMuZ2VvbWV0cnlJbkluc3RydWN0aW9ucyA9IG9wdGlvbnMuZ2VvbWV0cnlJbkluc3RydWN0aW9ucyB8fCBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMucHJvdmlkZUJib3ggPSBvcHRpb25zLnByb3ZpZGVCYm94IHx8IHRydWU7XG4gICAgdGhpcy5vcHRpb25zLmRpc3RhbmNlVW5pdCA9IG9wdGlvbnMuZGlzdGFuY2VVbml0IHx8IFwibVwiO1xuICAgIHRoaXMub3B0aW9ucy50aW1lVW5pdCA9IG9wdGlvbnMudGltZVVuaXQgfHwgXCJzZWNvbmRcIjtcbiAgICB0aGlzLm9wdGlvbnMuZXhwZWN0ZWRTdGFydFRpbWUgPSBudWxsOyAvLyBGSVhNRSBub3QgeWV0IGltcGxlbWVudGVkICFcbiAgICB0aGlzLm9wdGlvbnMuc3JzID0gb3B0aW9ucy5zcnMgfHwgXCJFUFNHOjQzMjZcIjtcbiAgICB0aGlzLm9wdGlvbnMud2F5c0F0dHJpYnV0ZXMgPSBvcHRpb25zLndheXNBdHRyaWJ1dGVzIHx8IFtdO1xuXG4gICAgLy8gZ2VzdGlvbiBkZSBsJ3VybCBkdSBzZXJ2aWNlIHBhciBkZWZhdXRcbiAgICAvLyBzaSBsJ3VybCBuJ2VzdCBwYXMgcmVuc2VpZ27DqWUsIGlsIGZhdXQgdXRpbGlzZXIgbGVzIHVybHMgcGFyIGRlZmF1dFxuICAgIGlmICghdGhpcy5vcHRpb25zLnNlcnZlclVybCkge1xuICAgICAgICB2YXIgVXJsQnlEZWZhdWx0ID0gRGVmYXVsdFVybFNlcnZpY2UuUm91dGUubmV3VXJsKCk7XG5cbiAgICAgICAgaWYgKCFVcmxCeURlZmF1bHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVybCBieSBkZWZhdWx0IG5vdCBmb3VuZCAhXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucy5zZXJ2ZXJVcmwgPSBVcmxCeURlZmF1bHQ7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiU2VydmV1ciBVUkwgcGFyIGRlZmF1dCA6IFwiICsgdGhpcy5vcHRpb25zLnNlcnZlclVybCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBsZW5kcyBtb2R1bGU6Um91dGUjXG4gKi9cblJvdXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29tbW9uU2VydmljZS5wcm90b3R5cGUsIHtcbiAgICAvLyB0b2RvXG4gICAgLy8gZ2V0dGVyL3NldHRlclxufSk7XG5cbi8qXG4gKiBDb25zdHJ1Y3RldXIgKGFsaWFzKVxuICovXG5Sb3V0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSb3V0ZTtcblxuLyoqXG4gKiAob3ZlcndyaXRlKVxuICogQ3LDqWF0aW9uIGRlIGxhIHJlcXXDqnRlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgICAtIGNhbGxiYWNrIGRlcyBlcnJldXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzIC0gY2FsbGJhY2tcbiAqL1xuUm91dGUucHJvdG90eXBlLmJ1aWxkUmVxdWVzdCA9IGZ1bmN0aW9uIChlcnJvciwgc3VjY2Vzcykge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAvLyBzcMOpY2lmaXF1ZSBhdSBzZXJ2aWNlXG4gICAgICAgIHJlc291cmNlIDogdGhpcy5vcHRpb25zLnJlc291cmNlLFxuICAgICAgICBzdGFydFBvaW50IDogdGhpcy5vcHRpb25zLnN0YXJ0UG9pbnQsXG4gICAgICAgIGVuZFBvaW50IDogdGhpcy5vcHRpb25zLmVuZFBvaW50LFxuICAgICAgICB2aWFQb2ludHMgOiB0aGlzLm9wdGlvbnMudmlhUG9pbnRzLFxuICAgICAgICBwcm92aWRlQmJveCA6IHRoaXMub3B0aW9ucy5wcm92aWRlQmJveCxcbiAgICAgICAgY29uc3RyYWludHMgOiB0aGlzLm9wdGlvbnMuY29uc3RyYWludHMsXG4gICAgICAgIGRpc3RhbmNlVW5pdCA6IHRoaXMub3B0aW9ucy5kaXN0YW5jZVVuaXQsXG4gICAgICAgIHRpbWVVbml0IDogdGhpcy5vcHRpb25zLnRpbWVVbml0LFxuICAgICAgICBncmFwaCA6IHRoaXMub3B0aW9ucy5ncmFwaCxcbiAgICAgICAgZ2VvbWV0cnlJbkluc3RydWN0aW9ucyA6IHRoaXMub3B0aW9ucy5nZW9tZXRyeUluSW5zdHJ1Y3Rpb25zLFxuICAgICAgICByb3V0ZVByZWZlcmVuY2UgOiB0aGlzLm9wdGlvbnMucm91dGVQcmVmZXJlbmNlLFxuICAgICAgICBzcnMgOiB0aGlzLm9wdGlvbnMuc3JzLFxuICAgICAgICB3YXlzQXR0cmlidXRlcyA6IHRoaXMub3B0aW9ucy53YXlzQXR0cmlidXRlc1xuICAgIH07XG5cbiAgICB0aGlzLnJlcXVlc3QgPSBSb3V0ZVJlcXVlc3RGYWN0b3J5LmJ1aWxkKG9wdGlvbnMpO1xuXG4gICAgLy8gb24gdGVzdGUgc2kgbGEgcmVxdWV0ZSBhIGJpZW4gw6l0w6kgY29uc3RydWl0ZSAhXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgZXJyb3IuY2FsbCh0aGlzLCBuZXcgRXJyb3JTZXJ2aWNlKF8uZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVRVUVTVF9CVUlMRFwiKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzLCB0aGlzLnJlcXVlc3QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogKG92ZXJ3cml0ZSlcbiAqIEFuYWx5c2UgZGUgbGEgcmVwb25zZVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVycm9yICAgLSBjYWxsYmFjayBkZXMgZXJyZXVyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gc3VjY2VzcyAtIGNhbGxiYWNrXG4gKi9cblJvdXRlLnByb3RvdHlwZS5hbmFseXplUmVzcG9uc2UgPSBmdW5jdGlvbiAoZXJyb3IsIHN1Y2Nlc3MpIHtcbiAgICAvLyBJTkZPXG4gICAgLy8gRmFjdG9yeSBwb3VyIG1hc3F1ZXIgbGEgY29tcGxleGl0w6kgZHUgcmV0b3VyIGR1IHNlcnZpY2VcblxuICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgZGlzdGFuY2VVbml0IDogdGhpcy5vcHRpb25zLmRpc3RhbmNlVW5pdCxcbiAgICAgICAgICAgIHRpbWVVbml0IDogdGhpcy5vcHRpb25zLnRpbWVVbml0LFxuICAgICAgICAgICAgcmVzcG9uc2UgOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgICAgICAgb3V0cHV0Rm9ybWF0IDogdGhpcy5vcHRpb25zLm91dHB1dEZvcm1hdCwgLy8gdXRpbGUgcG91ciBwYXJzZXIgbGEgc3RyaW5nIGVuIG1vZGUgWEhSIDogSlNPTiBvdSBYTUwgIVxuICAgICAgICAgICAgcmF3UmVzcG9uc2UgOiB0aGlzLm9wdGlvbnMucmF3UmVzcG9uc2UsXG4gICAgICAgICAgICBvbkVycm9yIDogZXJyb3IsXG4gICAgICAgICAgICBvblN1Y2Nlc3MgOiBzdWNjZXNzLFxuICAgICAgICAgICAgc2NvcGUgOiB0aGlzLFxuICAgICAgICAgICAgZ2VvbWV0cnlJbkluc3RydWN0aW9ucyA6IHRoaXMub3B0aW9ucy5nZW9tZXRyeUluSW5zdHJ1Y3Rpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgUm91dGVSZXNwb25zZUZhY3RvcnkuYnVpbGQob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IuY2FsbCh0aGlzLCBuZXcgRXJyb3JTZXJ2aWNlKF8uZ2V0TWVzc2FnZShcIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlcIikpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Route/Route.js\n"); + +/***/ }), + +/***/ "./src/Services/Services.js": +/*!**********************************!*\ + !*** ./src/Services/Services.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Config_Config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Config/Config */ \"./src/Services/Config/Config.js\");\n/* harmony import */ var _Alti_Alti__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Alti/Alti */ \"./src/Services/Alti/Alti.js\");\n/* harmony import */ var _Geocode_Geocode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Geocode/Geocode */ \"./src/Services/Geocode/Geocode.js\");\n/* harmony import */ var _Geocode_ReverseGeocode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Geocode/ReverseGeocode */ \"./src/Services/Geocode/ReverseGeocode.js\");\n/* harmony import */ var _AutoComplete_AutoComplete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AutoComplete/AutoComplete */ \"./src/Services/AutoComplete/AutoComplete.js\");\n/* harmony import */ var _Route_Route__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Route/Route */ \"./src/Services/Route/Route.js\");\n/* harmony import */ var _ProcessIsoCurve_ProcessIsoCurve__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ProcessIsoCurve/ProcessIsoCurve */ \"./src/Services/ProcessIsoCurve/ProcessIsoCurve.js\");\n/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"point|circle|bbox\" }] */\n\n/**\n* Geoportal web services invocation namespace.\n*\n* @module Services\n* @alias Gp.Services\n*/\n\n\n\n\n\n\n\nvar Services = {\n /**\n * Access to Geoportal resources metadata availables with one ore several keys\n *\n * @method getConfig\n * @param {Object} options - Options for function call.\n * @param {String} [options.apiKey] - Access key(s) (\",\" as separator, no spaces) to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}\n * @param {String} [options.customConfigFile] - path to a local config file. Overload the apiKey parameter\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GetConfigResponse} object as a parameter except if \"rawResponse\" parameter is set to true : a String will be returned.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n */\n getConfig: function getConfig(options) {\n var configService = new _Config_Config__WEBPACK_IMPORTED_MODULE_0__[\"default\"](options);\n configService.call();\n },\n /**\n * Getting elevations in or along of one or several points on french territories using the [elevation services of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/alti.html}.
    \n * Two use cases are availables :
    \n * 1. getting elevations of the given points : don't use the options.sampling parameter ;
    \n * 2. getting a regular set of elevations along the given points : use the options.sampling parameter.\n *\n * @method getAltitude\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {Array.} options.positions - Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter.\n * @param {Number} [options.sampling] - Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.
    \n * If not used, only elevations of these positions will be returned.\n * @param {Boolean} [options.zonly=false] - Set this parameter to true if you only want to have elevations returned without corresponding coordinates.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AltiResponse} object as a parameter, except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n * @param {String} [options.api='REST'] - What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing.\n * @param {String} [options.outputFormat='xml'] - Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing.\n */\n getAltitude: function getAltitude(options) {\n var altiService = new _Alti_Alti__WEBPACK_IMPORTED_MODULE_1__[\"default\"](options);\n altiService.call();\n },\n /**\n * Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the [geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage.html}.\n *\n * @example\n * Gp.Services.geocode ({\n * apiKey : \"carte\",\n * location : \"73 avenue de Paris, Saint-Mandé\",\n * // traitement des resultats\n * onSuccess : function (result) {\n * console.log(\"found (x:\"+result.position.x+\", y:\"+result.position.y+\")\") ;\n * }\n * }) ;\n *\n *\n * @method geocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {String} options.query - Geographic identifier to locate.\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Boolean} [options.returnTrueGeometry=false] - Set this parameter to true if you wish to have the true geometrie returned.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=http (s)://data.geopf.fr/geocodage/search] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n geocode: function geocode(options) {\n var geocodeService = new _Geocode_Geocode__WEBPACK_IMPORTED_MODULE_2__[\"default\"](options);\n geocodeService.call();\n },\n /**\n * Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the [reverse geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage-inverse.html}.\n *\n * @method reverseGeocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {Object} options.position - Reference position where to search geographical identifiers.\n * @param {Float} options.position.lon - Longitude\n * @param {Float} options.position.lat - Latitude\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Object} [options.searchGeometry] - Location where to perform the search.\n * @param {String} options.searchGeometry.type - Geometry type (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordinates\n * @param {Float} [options.searchGeometry.radius] - Radius (only for type 'Circle')\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/reverse] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n reverseGeocode: function reverseGeocode(options) {\n var reverseGeocodeService = new _Geocode_ReverseGeocode__WEBPACK_IMPORTED_MODULE_3__[\"default\"](options);\n reverseGeocodeService.call();\n },\n /**\n * Getting suggestions of probable places names or address based on uncomplete texts, using the [autocompletion service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/autocompletion.html}\n *\n * @method autoComplete\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.text - Text input to complete.\n * @param {Array.} [options.filterOptions.type = \"StreetAddress\"] - Suggestion types to provide : address (\"StreetAddress\") and/or place name (\"PositionOfInterest\").\n * @param {Array.} [options.filterOptions.territory] - Places where to limit the search of suggestions : \"METROPOLE\" (Corsica and metropolitan France), \"DOMTOM\" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31']\n * @param {Number} [options.maximumResponses = 10] - Maximum number of responses.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AutoCompleteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/completion] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n autoComplete: function autoComplete(options) {\n var autoCompleteService = new _AutoComplete_AutoComplete__WEBPACK_IMPORTED_MODULE_4__[\"default\"](options);\n autoCompleteService.call();\n },\n /**\n * Getting a route from one point to another using the [route service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/itineraires.html}.\n *\n * @method route\n * @param {Object} options - Options for function call.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.routePreference = \"fastest\"] - Indicates the way to compute the route : \"fastest\" (time optimisation) or \"shortest\" (distance optimisation). Available values are in the GetCapabilities.\n * @param {Gp.Point} options.startPoint - Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Gp.Point} options.endPoint - End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Array.} [options.viaPoints] - Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the route : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Boolean} [options.geometryInInstructions = false] - Indicates if route geometry has to be also returned with route instructions.\n * @param {Boolean} [options.provideBoundingBox = true] - Indicates if route instructions has to be localised with a BBOX in the response.\n * @param {String} [options.distanceUnit = \"m\"] - The unit used to provide distances in the response (\"meter\" or \"kilometer\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Array.} [options.waysAttributes] - Way Attributes to add in the response. Available values are in the GetCapabilities.\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.RouteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\" or \"xml\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/itineraire] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n route: function route(options) {\n var routeService = new _Route_Route__WEBPACK_IMPORTED_MODULE_5__[\"default\"](options);\n routeService.call();\n },\n /**\n * Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the [isochrone service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/isochrones.html}.\n *\n * @method isoCurve\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {Gp.Point} options.position - Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude).\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the isoCurve : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {String} [options.method = \"time\"] - Computing method to use : \"time\" (using a duration as a constraint) or \"distance\" (using a distance as a constraint). Available values are in the GetCapabilities.\n * @param {Float} options.time - Maximum duration (expressed in seconds) to use when options.method is set to \"time\".\n * @param {Float} options.distance - Maximum distance (expressed in meters) to use when options.method is set to \"distance\".\n * @param {Boolean} [options.reverse = false] - Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing.\n * @param {String} [options.distanceUnit = \"km\"] - The unit used to provide distances in the response (\"m\" or \"km\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Boolean} [options.smoothing = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed.\n * @param {Boolean} [options.holes = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.IsoCurveResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/isochrone] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n isoCurve: function isoCurve(options) {\n var processIsoCurveService = new _ProcessIsoCurve_ProcessIsoCurve__WEBPACK_IMPORTED_MODULE_6__[\"default\"](options);\n processIsoCurveService.call();\n }\n};\n\n/**\n * Point object.\n *\n * @namespace\n * @alias Gp.Point\n *\n * @property {Float} x - Point abscissa\n * @property {Float} y - Point ordinate\n */\nvar point = {};\n\n/**\n * Circle object.\n *\n * @namespace\n * @alias Gp.Circle\n *\n * @property {Float} x - Circle center abscissa.\n * @property {Float} y - Circle center ordinate.\n * @property {Float} radius - Circle radius.\n */\nvar circle = {};\n\n/**\n * Bounding box object, expressed with four coordinates.\n *\n * @namespace\n * @alias Gp.BBox\n *\n * @property {Float} left - minimum abscissa\n * @property {Float} right - maximum abscissa\n * @property {Float} bottom - minimum ordinate\n * @property {Float} top - maximum ordinate\n */\nvar bbox = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Services);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9TZXJ2aWNlcy9TZXJ2aWNlcy5qcz83NjZmIl0sIm5hbWVzIjpbIlNlcnZpY2VzIiwiZ2V0Q29uZmlnIiwib3B0aW9ucyIsImNvbmZpZ1NlcnZpY2UiLCJDb25maWciLCJjYWxsIiwiZ2V0QWx0aXR1ZGUiLCJhbHRpU2VydmljZSIsIkFsdGkiLCJnZW9jb2RlIiwiZ2VvY29kZVNlcnZpY2UiLCJHZW9jb2RlIiwicmV2ZXJzZUdlb2NvZGUiLCJyZXZlcnNlR2VvY29kZVNlcnZpY2UiLCJSZXZlcnNlR2VvY29kZSIsImF1dG9Db21wbGV0ZSIsImF1dG9Db21wbGV0ZVNlcnZpY2UiLCJBdXRvQ29tcGxldGUiLCJyb3V0ZSIsInJvdXRlU2VydmljZSIsIlJvdXRlIiwiaXNvQ3VydmUiLCJwcm9jZXNzSXNvQ3VydmVTZXJ2aWNlIiwiUHJvY2Vzc0lzb0N1cnZlIiwicG9pbnQiLCJjaXJjbGUiLCJiYm94Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3FDO0FBQ047QUFDUztBQUNjO0FBQ0M7QUFDckI7QUFDOEI7QUFFaEUsSUFBSUEsUUFBUSxHQUFHO0VBQ1g7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxTQUFTLEVBQUcsU0FBWkEsU0FBU0EsQ0FBYUMsT0FBTyxFQUFFO0lBQzNCLElBQUlDLGFBQWEsR0FBRyxJQUFJQyxzREFBTSxDQUFDRixPQUFPLENBQUM7SUFDdkNDLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7RUFDeEIsQ0FBQztFQUNEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBRUUxQix1RUFBUSIsImZpbGUiOiIuL3NyYy9TZXJ2aWNlcy9TZXJ2aWNlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogW1wiZXJyb3JcIiwgeyBcInZhcnNJZ25vcmVQYXR0ZXJuXCI6IFwicG9pbnR8Y2lyY2xlfGJib3hcIiB9XSAqL1xuXG4vKipcbiogR2VvcG9ydGFsIHdlYiBzZXJ2aWNlcyBpbnZvY2F0aW9uIG5hbWVzcGFjZS5cbipcbiogQG1vZHVsZSBTZXJ2aWNlc1xuKiBAYWxpYXMgR3AuU2VydmljZXNcbiovXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuL0NvbmZpZy9Db25maWdcIjtcbmltcG9ydCBBbHRpIGZyb20gXCIuL0FsdGkvQWx0aVwiO1xuaW1wb3J0IEdlb2NvZGUgZnJvbSBcIi4vR2VvY29kZS9HZW9jb2RlXCI7XG5pbXBvcnQgUmV2ZXJzZUdlb2NvZGUgZnJvbSBcIi4vR2VvY29kZS9SZXZlcnNlR2VvY29kZVwiO1xuaW1wb3J0IEF1dG9Db21wbGV0ZSBmcm9tIFwiLi9BdXRvQ29tcGxldGUvQXV0b0NvbXBsZXRlXCI7XG5pbXBvcnQgUm91dGUgZnJvbSBcIi4vUm91dGUvUm91dGVcIjtcbmltcG9ydCBQcm9jZXNzSXNvQ3VydmUgZnJvbSBcIi4vUHJvY2Vzc0lzb0N1cnZlL1Byb2Nlc3NJc29DdXJ2ZVwiO1xuXG52YXIgU2VydmljZXMgPSB7XG4gICAgLyoqXG4gICAgICogQWNjZXNzIHRvIEdlb3BvcnRhbCByZXNvdXJjZXMgbWV0YWRhdGEgYXZhaWxhYmxlcyB3aXRoIG9uZSBvcmUgc2V2ZXJhbCBrZXlzXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGdldENvbmZpZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZnVuY3Rpb24gY2FsbC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuYXBpS2V5XSAtIEFjY2VzcyBrZXkocykgKFwiLFwiIGFzIHNlcGFyYXRvciwgbm8gc3BhY2VzKSB0byBHZW9wb3J0YWwgcGxhdGZvcm0sIG9idGFpbmVkIFtoZXJlXXtAbGluayBodHRwczovL2dlb3NlcnZpY2VzLmlnbi5mci9zZXJ2aWNlcy13ZWJ9XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmN1c3RvbUNvbmZpZ0ZpbGVdIC0gcGF0aCB0byBhIGxvY2FsIGNvbmZpZyBmaWxlLiBPdmVybG9hZCB0aGUgYXBpS2V5IHBhcmFtZXRlclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMub25TdWNjZXNzIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGdldHRpbmcgc3VjY2Vzc2Z1bCBzZXJ2aWNlIHJlc3BvbnNlLiBUYWtlcyBhIHtAbGluayBHcC5TZXJ2aWNlcy5HZXRDb25maWdSZXNwb25zZX0gb2JqZWN0IGFzIGEgcGFyYW1ldGVyIGV4Y2VwdCBpZiBcInJhd1Jlc3BvbnNlXCIgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlIDogYSBTdHJpbmcgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHVuc3VjY2Vzc2Z1bCBzZXJ2aWNlIHJlc3BvbnNlcyAodGltZU91dCwgbWlzc2luZyByaWdodHMsIC4uLikuIFRha2VzIGEge0BsaW5rIEdwLkVycm9yfSBvYmplY3QgYXMgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy50aW1lT3V0PTBdIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhYm92ZSB3aGljaCBhIHRpbWVPdXQgcmVzcG9uc2Ugd2lsbCBiZSByZXR1cm5lZCB3aXRoIG9uRmFpbHVyZSBjYWxsYmFjayAoc2VlIGFib3ZlKS4gRGVmYXVsdCB2YWx1ZSBpcyAwIHdoaWNoIG1lYW5zIHRpbWVPdXQgd2lsbCBub3QgYmUgaGFuZGxlZC5cbiAgICAgKi9cbiAgICBnZXRDb25maWcgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgY29uZmlnU2VydmljZSA9IG5ldyBDb25maWcob3B0aW9ucyk7XG4gICAgICAgIGNvbmZpZ1NlcnZpY2UuY2FsbCgpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0dGluZyBlbGV2YXRpb25zIGluIG9yIGFsb25nIG9mIG9uZSBvciBzZXZlcmFsIHBvaW50cyBvbiBmcmVuY2ggdGVycml0b3JpZXMgdXNpbmcgdGhlIFtlbGV2YXRpb24gc2VydmljZXMgb2YgdGhlIEdlb3BvcnRhbCBQbGF0Zm9ybV17QGxpbmsgaHR0cHM6Ly9nZW9zZXJ2aWNlcy5pZ24uZnIvZG9jdW1lbnRhdGlvbi9nZW9zZXJ2aWNlcy9hbHRpLmh0bWx9Ljxici8+XG4gICAgICogVHdvIHVzZSBjYXNlcyBhcmUgYXZhaWxhYmxlcyA6PGJyLz5cbiAgICAgKiAxLiBnZXR0aW5nIGVsZXZhdGlvbnMgb2YgdGhlIGdpdmVuIHBvaW50cyA6IGRvbid0IHVzZSB0aGUgb3B0aW9ucy5zYW1wbGluZyBwYXJhbWV0ZXIgOzxici8+XG4gICAgICogMi4gZ2V0dGluZyBhIHJlZ3VsYXIgc2V0IG9mIGVsZXZhdGlvbnMgYWxvbmcgdGhlIGdpdmVuIHBvaW50cyA6IHVzZSB0aGUgb3B0aW9ucy5zYW1wbGluZyBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIGdldEFsdGl0dWRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIGZvciBmdW5jdGlvbiBjYWxsLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmFwaUtleSAtIEFjY2VzcyBrZXkgdG8gR2VvcG9ydGFsIHBsYXRmb3JtLCBvYnRhaW5lZCBbaGVyZV17QGxpbmsgaHR0cHM6Ly9nZW9zZXJ2aWNlcy5pZ24uZnIvc2VydmljZXMtd2VifS5cbiAgICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBvcHRpb25zLnBvc2l0aW9ucyAtIEFycmF5IG9mIHBvc2l0aW9ucyAoe2xvbjpmbG9hdCwgbGF0OmZsb2F0fSkgZXhwcmVzc2VkIGluIENSUzo4NCBjb29yZGluYXRlcyBzeXN0ZW0sIHdoZXJlIHRvIGdldCBlbGV2YXRpb25zLiA1MCBwb3NpdGlvbnMgbWF4aW11bSBtYXkgYmUgZ2l2ZW4uIDIgcG9zaXRpb25zIG1pbmltdW0gYXJlIHJlcXVpcmVkIGlmIHlvdSB1c2UgdGhlIG9wdGlvbnMuc2FtcGxpbmcgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5zYW1wbGluZ10gLSBOdW1iZXIgb2YgcG9pbnRzIHRvIHVzZSAoYmV0d2VlbiAyIGFuZCA1MDAwKSBpbiBvcmRlciB0byBjb21wdXRlIGFuIGVsZXZhdGlvbiBwYXRoLiBUaGUgcG9pbnRzIGdpdmVuIHdpdGggdGhlIG9wdGlvbnMucG9zaXRpb25zIHBhcmFtZXRlciBhcmUgdXNlZCB0byBmaXggdGhlIHBsYW5pbWV0cmljIHBhdGggYWxvbmcgd2hpY2ggdGhlIGVsZXZhdGlvbnMgd2lsbCBiZSBjb21wdXRlZC48YnIvPlxuICAgICAqIElmIG5vdCB1c2VkLCBvbmx5IGVsZXZhdGlvbnMgb2YgdGhlc2UgcG9zaXRpb25zIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy56b25seT1mYWxzZV0gLSBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSBpZiB5b3Ugb25seSB3YW50IHRvIGhhdmUgZWxldmF0aW9ucyByZXR1cm5lZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgY29vcmRpbmF0ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5vblN1Y2Nlc3MgLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2V0dGluZyBzdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2UuIFRha2VzIGEge0BsaW5rIEdwLlNlcnZpY2VzLkFsdGlSZXNwb25zZX0gb2JqZWN0IGFzIGEgcGFyYW1ldGVyLCBleGNlcHQgaWYgXCJyYXdSZXNwb25zZVwiIGlzIHNldCB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdW5zdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2VzICh0aW1lT3V0LCBtaXNzaW5nIHJpZ2h0cywgLi4uKS4gVGFrZXMgYSB7QGxpbmsgR3AuRXJyb3J9IG9iamVjdCBhcyBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnRpbWVPdXQ9MF0gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGFib3ZlIHdoaWNoIGEgdGltZU91dCByZXNwb25zZSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25GYWlsdXJlIGNhbGxiYWNrIChzZWUgYWJvdmUpLiBEZWZhdWx0IHZhbHVlIGlzIDAgd2hpY2ggbWVhbnMgdGltZU91dCB3aWxsIG5vdCBiZSBoYW5kbGVkLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zZXJ2ZXJVcmw9aHR0cHM6Ly9kYXRhLmdlb3BmLmZyL2FsdGltZXRyaWUvMS4wL2NhbGN1bC9hbHRpL3Jlc3QvZWxldmF0aW9uLmpzb25dIC0gV2ViIHNlcnZpY2UgVVJMLiBJZiB1c2VkLCBvcHRpb25zLmFwaUtleSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zc2wgPSB0cnVlXSAtIFVzZSBvZiBIVFRQUyBvciBIVFRQIHByb3RvY29sIHRvIHJlcXVlc3QgdGhlIHNlcnZpY2VzLiBIVFRQUyBieSBkZWZhdWx0IChzc2w9dHJ1ZSkuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnByb3RvY29sPVhIUl0gLSBQcm90b2NvbCB1c2VkIHRvIGhhbmRsZSBkaWFsb2cgd2l0aCB3ZWIgc2VydmljZS4gUG9zc2libGUgdmFsdWVzIGFyZSAnSlNPTlAnICh7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSlNPTlB9KSBhbmQgJ1hIUicgKHtAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YTUxIdHRwUmVxdWVzdH0pLiBPbmx5IFhIUiBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgaW4gYSBOb2RlSlMgZW52aXJvbm1lbnQuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5wcm94eVVSTF0gLSBQcm94eSBVUkwgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlLiBJZ25vcmVkIHdoZW4gb3B0aW9ucy5wcm90b2NvbCBpcyBzZXQgdG8gJ0pTT05QJyB2YWx1ZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNhbGxiYWNrU3VmZml4XSAtIENhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgc3VmZml4IHRvIHVzZSBpbiBjYXNlIG9mIGEgSlNPTlAgcHJvdG9jb2wgdXNlIChzZWUgYWJvdmUpLCB0byBzZXQgeW91ciBvd24gc3VmZml4IGluc3RlYWQgb2YgYXV0by1pbmNyZW1lbnQuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnWEhSJyB2YWx1ZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmh0dHBNZXRob2Q9R0VUXSAtIEhUVFAgbWV0aG9kIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgdW5kZXJseWluZyB3ZWIgc2VydmljZSBpbiBjYXNlIG9mIGEgWEhSIHByb3RvY29sIHVzZSAoc2VlIGFib3ZlKS4gUG9zc2libGUgdmFsdWVzIGFyZSAnR0VUJyBhbmQgJ1BPU1QnLiBJZ25vcmVkIHdoZW4gb3B0aW9ucy5wcm90b2NvbCBpcyBzZXQgdG8gJ0pTT05QJyB2YWx1ZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3htbFwiXSAtIENvbnRlbnQtVHlwZSB0byB1c2Ugd2hlbiByZXF1ZXN0aW5nIHVuZGVybHlpbmcgd2ViIHNlcnZpY2UgaW4gY2FzZSBvZiBhIFhIUiBwcm90b2NvbCB1c2UgKHNlZSBhYm92ZSkgYW5kIGlmIG1ldGhvZCBIVFRQIGlzIFBPU1QuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnSlNPTlAnIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yYXdSZXNwb25zZT1mYWxzZV0gLSBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaW1wbGllcyB5b3Ugd2FudCB0byBoYW5kbGUgdGhlIHNlcnZpY2UgcmVzcG9uc2UgYnkgeW91cnNlbGYgOiBpdCB3aWxsIGJlIHJldHVybmVkIGFzIGFuIHVucGFyc2VkIFN0cmluZyBpbiBvblN1Y2Nlc3MgY2FsbGJhY2sgcGFyYW1ldGVyLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25CZWZvcmVQYXJzZV0gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgc2VydmljZSByZXNwb25zZSBiZWZvcmUgcGFyc2luZyAoYXMgYW4gdW5wYXJzZWQgU3RyaW5nKS4gVGFrZXMgYSBTdHJpbmcgYXMgYSBwYXJhbWV0ZXIgKHRoZSByYXcgc2VydmljZSByZXNwb25zZSkuIFJldHVybnMgYSBTdHJpbmcgdGhhdCB3aWxsIGJlIHBhcnNlZCBhcyB0aGUgc2VydmljZSByZXNwb25zZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5hcGk9J1JFU1QnXSAtIFdoYXQgQVBJIHRvIHVzZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlIDogJ1JFU1QnLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLm91dHB1dEZvcm1hdD0neG1sJ10gLSBPdXRwdXQgZm9ybWF0IGZvciB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlIHJlc3BvbnNlIDogJ3htbCcgb3IgJ2pzb24nLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICovXG4gICAgZ2V0QWx0aXR1ZGUgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgYWx0aVNlcnZpY2UgPSBuZXcgQWx0aShvcHRpb25zKTtcbiAgICAgICAgYWx0aVNlcnZpY2UuY2FsbCgpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0dGluZyBwb3NpdG9uIG9mIGEgZ2VvZ3JhcGhpYyBpZGVudGlmaWVyIChwbGFjZXMgbmFtZXMsIGFkZHJlc3MsIGNhZGFzdHJhbCBwYXJjZWwsIG90aGVyLi4uKSB1c2luZyB0aGUgW2dlb2NvZGluZyB3ZWIgc2VydmljZSBvZiB0aGUgR2VvcG9ydGFsIFBsYXRmb3JtXXtAbGluayBodHRwczovL2dlb3NlcnZpY2VzLmlnbi5mci9kb2N1bWVudGF0aW9uL2dlb3NlcnZpY2VzL2dlb2NvZGFnZS5odG1sfS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogR3AuU2VydmljZXMuZ2VvY29kZSAoe1xuICAgICAqICAgICBhcGlLZXkgOiBcImNhcnRlXCIsXG4gICAgICogICAgIGxvY2F0aW9uIDogXCI3MyBhdmVudWUgZGUgUGFyaXMsIFNhaW50LU1hbmTDqVwiLFxuICAgICAqICAgICAvLyB0cmFpdGVtZW50IGRlcyByZXN1bHRhdHNcbiAgICAgKiAgICAgb25TdWNjZXNzICA6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgKiAgICAgICAgIGNvbnNvbGUubG9nKFwiZm91bmQgKHg6XCIrcmVzdWx0LnBvc2l0aW9uLngrXCIsIHk6XCIrcmVzdWx0LnBvc2l0aW9uLnkrXCIpXCIpIDtcbiAgICAgKiAgICAgfVxuICAgICAqIH0pIDtcbiAgICAgKlxuICAgICAqXG4gICAgICogQG1ldGhvZCBnZW9jb2RlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIGZvciBmdW5jdGlvbiBjYWxsLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmFwaUtleSAtIEFjY2VzcyBrZXkgdG8gR2VvcG9ydGFsIHBsYXRmb3JtLCBvYnRhaW5lZCBbaGVyZV17QGxpbmsgaHR0cHM6Ly9nZW9zZXJ2aWNlcy5pZ24uZnIvc2VydmljZXMtd2VifS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaW5kZXg9XCJTdHJlZXRBZGRyZXNzXCJdIC0gR2VvZ3JhcGhpY2FsIGlkZW50aWZpZXIgdHlwZSB0byBzZWFyY2guIFZhbHVlcyBjdXJyZW50bHkgYXZhaWxhYmxlcyBhcmUgOiBcIlBvc2l0aW9uT2ZJbnRlcmVzdFwiIGZvciBwbGFjZSBuYW1lcywgXCJTdHJlZXRBZGRyZXNzXCIgZm9yIGFkZHJlc3Mgc2VhcmNoLCBcIkNhZGFzdHJhbFBhcmNlbFwiIGZvciBDYWRhc3RyYWwgcGFyY2VscyBzZWFyY2gsIFwibG9jYXRpb25cIiBmb3IgYSBtdWx0aS1pbmRleCBzZWFyY2ggb24gXCJTdHJlZXRBZGRyZXNzXCIgYW5kIFwiUG9zaXRpb25PZkludGVyZXN0XCIuIERlZmF1bHQgaXMgXCJTdHJlZXRBZGRyZXNzXCIuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucXVlcnkgLSBHZW9ncmFwaGljIGlkZW50aWZpZXIgdG8gbG9jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maWx0ZXJzXSAtIEFkZGl0aW9uYWwgZmlsdGVycyB0byBhcHBseSB0byBzZWFyY2guIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBtYXkgYmUgZ2l2ZW4uXG4gICAgICogICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZmlsdGVycy5bcHJvcF1dIC0gQWRkaXRpb25uYWwgcHJvcGVydGllcyB0byBmaWx0ZXIgc2VhcmNoLiBQcm9wZXJ0aWVzIGRlcGVuZHMgb24gb3B0aW9ucy5pbmRleCwgYW5kIHZhbHVlcyB0eXBlIHNob3VsZCBiZSBcIlN0cmluZ1wiLlxuICAgICAqICAgICAgPGJyLz48YnIvPlxuICAgICAqICAgICAgUHJvcGVydGllcyBhdmFpbGFibGVzIGZvciBhZGRyZXNzIHNlYXJjaCA6PGJyLz5cbiAgICAgKiAgICAgIFwicG9zdGFsQ29kZVwiLCBcImluc2VlQ29kZVwiIGFuZCBcImNpdHlcIi5cbiAgICAgKiAgICAgIDxici8+PGJyLz5cbiAgICAgKiAgICAgIFByb3BlcnRpZXMgYXZhaWxhYmxlcyBmb3IgcGxhY2UgbmFtZXMgc2VhcmNoIDo8YnIvPlxuICAgICAqICAgICAgXCJwb3N0YWxDb2RlXCIsIFwiaW5zZWVDb2RlXCIgYW5kIFwidHlwZVwiLlxuICAgICAqICAgICAgPGJyLz48YnIvPlxuICAgICAqICAgICAgUHJvcGVydGllcyBhdmFpbGFibGVzIGZvciBjYWRhc3RyYWwgcGFyY2VscyBzZWFyY2ggOjxici8+XG4gICAgICogICAgICBcImNvZGVEZXBhcnRlbWVudFwiLCBcImNvZGVDb21tdW5lXCIsIFwibm9tQ29tbXVuZVwiLCBcImNvZGVDb21tdW5lQWJzXCIsIFwiY29kZUFycm9uZGlzc2VtZW50XCIsIFwic2VjdGlvblwiLCBcIm51bWVyb1wiLCBcImZldWlsbGVcIi5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4aW11bVJlc3BvbnNlcz0yMF0gLSBNYXhpbXVtIG51bWJlciBvZiByZXNwb25zZXMuIERlZmF1bHQgdW5kZXJseWluZyBzZXJ2aWNlIHZhbHVlIGFwcGxpZXMgKDIwKSBpZiBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yZXR1cm5UcnVlR2VvbWV0cnk9ZmFsc2VdIC0gU2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaWYgeW91IHdpc2ggdG8gaGF2ZSB0aGUgdHJ1ZSBnZW9tZXRyaWUgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5vblN1Y2Nlc3MgLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2V0dGluZyBzdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2UuIFRha2VzIGEge0BsaW5rIEdwLlNlcnZpY2VzLkdlb2NvZGVSZXNwb25zZX0gb2JqZWN0IGFzIGEgcGFyYW1ldGVyIGV4Y2VwdCBpZiBcInJhd1Jlc3BvbnNlXCIgaXMgc2V0IHRvIHRydWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25GYWlsdXJlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB1bnN1Y2Nlc3NmdWwgc2VydmljZSByZXNwb25zZXMgKHRpbWVPdXQsIG1pc3NpbmcgcmlnaHRzLCAuLi4pLiBUYWtlcyBhIHtAbGluayBHcC5FcnJvcn0gb2JqZWN0IGFzIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMudGltZU91dD0wXSAtIE51bWJlciBvZiBtaWxsaXNlY29uZHMgYWJvdmUgd2hpY2ggYSB0aW1lT3V0IHJlc3BvbnNlIHdpbGwgYmUgcmV0dXJuZWQgd2l0aCBvbkZhaWx1cmUgY2FsbGJhY2sgKHNlZSBhYm92ZSkuIERlZmF1bHQgdmFsdWUgaXMgMCB3aGljaCBtZWFucyB0aW1lT3V0IHdpbGwgbm90IGJlIGhhbmRsZWQuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNlcnZlclVybD1odHRwIChzKTovL2RhdGEuZ2VvcGYuZnIvZ2VvY29kYWdlL3NlYXJjaF0gLSBXZWIgc2VydmljZSBVUkwuIElmIHVzZWQsIG9wdGlvbnMuYXBpS2V5IHBhcmFtZXRlciBpcyBpZ25vcmVkLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNzbCA9IHRydWVdIC0gVXNlIG9mIEhUVFBTIG9yIEhUVFAgcHJvdG9jb2wgdG8gcmVxdWVzdCB0aGUgc2VydmljZXMuIEhUVFBTIGJ5IGRlZmF1bHQgKHNzbD10cnVlKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucHJveHlVUkxdIC0gUHJveHkgVVJMIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgdW5kZXJseWluZyB3ZWIgc2VydmljZS4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdKU09OUCcgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jYWxsYmFja1N1ZmZpeF0gLSBDYWxsYmFjayBmdW5jdGlvbiBuYW1lIHN1ZmZpeCB0byB1c2UgaW4gY2FzZSBvZiBhIEpTT05QIHByb3RvY29sIHVzZSAoc2VlIGFib3ZlKSwgdG8gc2V0IHlvdXIgb3duIHN1ZmZpeCBpbnN0ZWFkIG9mIGF1dG8taW5jcmVtZW50LiBJZ25vcmVkIHdoZW4gb3B0aW9ucy5wcm90b2NvbCBpcyBzZXQgdG8gJ1hIUicgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmF3UmVzcG9uc2U9ZmFsc2VdIC0gU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byB0cnVlIGltcGxpZXMgeW91IHdhbnQgdG8gaGFuZGxlIHRoZSBzZXJ2aWNlIHJlc3BvbnNlIGJ5IHlvdXJzZWxmIDogaXQgd2lsbCBiZSByZXR1cm5lZCBhcyBhbiB1bnBhcnNlZCBTdHJpbmcgaW4gb25TdWNjZXNzIGNhbGxiYWNrIHBhcmFtZXRlci4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uQmVmb3JlUGFyc2VdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHNlcnZpY2UgcmVzcG9uc2UgYmVmb3JlIHBhcnNpbmcgKGFzIGFuIHVucGFyc2VkIFN0cmluZykuIFRha2VzIGEgU3RyaW5nIGFzIGEgcGFyYW1ldGVyICh0aGUgcmF3IHNlcnZpY2UgcmVzcG9uc2UpLiBSZXR1cm5zIGEgU3RyaW5nIHRoYXQgd2lsbCBiZSBwYXJzZWQgYXMgdGhlIHNlcnZpY2UgcmVzcG9uc2UuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKi9cbiAgICBnZW9jb2RlIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGdlb2NvZGVTZXJ2aWNlID0gbmV3IEdlb2NvZGUob3B0aW9ucyk7XG4gICAgICAgIGdlb2NvZGVTZXJ2aWNlLmNhbGwoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJldHJpZXZpbmcgZ2VvZ3JhcGhpY2FsIGlkZW50aWZpZXJzIChwbGFjZSBuYW1lcywgYWRkcmVzcywgY2FkYXN0cmFsIHBhcmNlbHMsIC4uLikgbmVhciBhIGdpdmVuIHBvc2l0aW9uLCB1c2luZyB0aGUgW3JldmVyc2UgZ2VvY29kaW5nIHdlYiBzZXJ2aWNlIG9mIHRoZSBHZW9wb3J0YWwgUGxhdGZvcm1de0BsaW5rIGh0dHBzOi8vZ2Vvc2VydmljZXMuaWduLmZyL2RvY3VtZW50YXRpb24vZ2Vvc2VydmljZXMvZ2VvY29kYWdlLWludmVyc2UuaHRtbH0uXG4gICAgICpcbiAgICAgKiBAbWV0aG9kIHJldmVyc2VHZW9jb2RlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIGZvciBmdW5jdGlvbiBjYWxsLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmFwaUtleSAtIEFjY2VzcyBrZXkgdG8gR2VvcG9ydGFsIHBsYXRmb3JtLCBvYnRhaW5lZCBbaGVyZV17QGxpbmsgaHR0cHM6Ly9nZW9zZXJ2aWNlcy5pZ24uZnIvc2VydmljZXMtd2VifS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaW5kZXg9XCJTdHJlZXRBZGRyZXNzXCJdIC0gR2VvZ3JhcGhpY2FsIGlkZW50aWZpZXIgdHlwZSB0byBzZWFyY2guIFZhbHVlcyBjdXJyZW50bHkgYXZhaWxhYmxlcyBhcmUgOiBcIlBvc2l0aW9uT2ZJbnRlcmVzdFwiIGZvciBwbGFjZSBuYW1lcywgXCJTdHJlZXRBZGRyZXNzXCIgZm9yIGFkZHJlc3Mgc2VhcmNoLCBcIkNhZGFzdHJhbFBhcmNlbFwiIGZvciBDYWRhc3RyYWwgcGFyY2VscyBzZWFyY2gsIFwibG9jYXRpb25cIiBmb3IgYSBtdWx0aS1pbmRleCBzZWFyY2ggb24gXCJTdHJlZXRBZGRyZXNzXCIgYW5kIFwiUG9zaXRpb25PZkludGVyZXN0XCIuIERlZmF1bHQgaXMgXCJTdHJlZXRBZGRyZXNzXCIuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMucG9zaXRpb24gLSBSZWZlcmVuY2UgcG9zaXRpb24gd2hlcmUgdG8gc2VhcmNoIGdlb2dyYXBoaWNhbCBpZGVudGlmaWVycy5cbiAgICAgKiAgICAgIEBwYXJhbSB7RmxvYXR9IG9wdGlvbnMucG9zaXRpb24ubG9uIC0gTG9uZ2l0dWRlXG4gICAgICogICAgICBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnBvc2l0aW9uLmxhdCAtIExhdGl0dWRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmZpbHRlcnNdIC0gQWRkaXRpb25hbCBmaWx0ZXJzIHRvIGFwcGx5IHRvIHNlYXJjaC4gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG1heSBiZSBnaXZlbi5cbiAgICAgKiAgICAgIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5maWx0ZXJzLltwcm9wXV0gLSBBZGRpdGlvbm5hbCBwcm9wZXJ0aWVzIHRvIGZpbHRlciBzZWFyY2guIFByb3BlcnRpZXMgZGVwZW5kcyBvbiBvcHRpb25zLmluZGV4LCBhbmQgdmFsdWVzIHR5cGUgc2hvdWxkIGJlIFwiU3RyaW5nXCIuXG4gICAgICogICAgICA8YnIvPjxici8+XG4gICAgICogICAgICBQcm9wZXJ0aWVzIGF2YWlsYWJsZXMgZm9yIGFkZHJlc3Mgc2VhcmNoIDo8YnIvPlxuICAgICAqICAgICAgXCJwb3N0YWxDb2RlXCIsIFwiaW5zZWVDb2RlXCIgYW5kIFwiY2l0eVwiLlxuICAgICAqICAgICAgPGJyLz48YnIvPlxuICAgICAqICAgICAgUHJvcGVydGllcyBhdmFpbGFibGVzIGZvciBwbGFjZSBuYW1lcyBzZWFyY2ggOjxici8+XG4gICAgICogICAgICBcInBvc3RhbENvZGVcIiwgXCJpbnNlZUNvZGVcIiBhbmQgXCJ0eXBlXCIuXG4gICAgICogICAgICA8YnIvPjxici8+XG4gICAgICogICAgICBQcm9wZXJ0aWVzIGF2YWlsYWJsZXMgZm9yIGNhZGFzdHJhbCBwYXJjZWxzIHNlYXJjaCA6PGJyLz5cbiAgICAgKiAgICAgIFwiY29kZURlcGFydGVtZW50XCIsIFwiY29kZUNvbW11bmVcIiwgXCJub21Db21tdW5lXCIsIFwiY29kZUNvbW11bmVBYnNcIiwgXCJjb2RlQXJyb25kaXNzZW1lbnRcIiwgXCJzZWN0aW9uXCIsIFwibnVtZXJvXCIsIFwiZmV1aWxsZVwiLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5zZWFyY2hHZW9tZXRyeV0gLSBMb2NhdGlvbiB3aGVyZSB0byBwZXJmb3JtIHRoZSBzZWFyY2guXG4gICAgICogICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5zZWFyY2hHZW9tZXRyeS50eXBlIC0gR2VvbWV0cnkgdHlwZSAoUG9pbnR8Q2lyY2xlfExpbmVzdHJpbmd8UG9seWdvbilcbiAgICAgKiAgICAgIEBwYXJhbSB7QXJyYXkuPEZsb2F0PnxBcnJheS5BcnJheS48RmxvYXQ+fSBvcHRpb25zLnNlYXJjaEdlb21ldHJ5LmNvb3JkaW5hdGVzIC0gQ29vcmRpbmF0ZXNcbiAgICAgKiAgICAgIEBwYXJhbSB7RmxvYXR9IFtvcHRpb25zLnNlYXJjaEdlb21ldHJ5LnJhZGl1c10gLSBSYWRpdXMgKG9ubHkgZm9yIHR5cGUgJ0NpcmNsZScpXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1SZXNwb25zZXM9MjBdIC0gTWF4aW11bSBudW1iZXIgb2YgcmVzcG9uc2VzLiBEZWZhdWx0IHVuZGVybHlpbmcgc2VydmljZSB2YWx1ZSBhcHBsaWVzICgyMCkgaWYgbm90IHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMub25TdWNjZXNzIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGdldHRpbmcgc3VjY2Vzc2Z1bCBzZXJ2aWNlIHJlc3BvbnNlLiBUYWtlcyBhIHtAbGluayBHcC5TZXJ2aWNlcy5HZW9jb2RlUmVzcG9uc2V9IG9iamVjdCBhcyBhIHBhcmFtZXRlciBleGNlcHQgaWYgXCJyYXdSZXNwb25zZVwiIGlzIHNldCB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdW5zdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2VzICh0aW1lT3V0LCBtaXNzaW5nIHJpZ2h0cywgLi4uKS4gVGFrZXMgYSB7QGxpbmsgR3AuRXJyb3J9IG9iamVjdCBhcyBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnRpbWVPdXQ9MF0gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGFib3ZlIHdoaWNoIGEgdGltZU91dCByZXNwb25zZSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25GYWlsdXJlIGNhbGxiYWNrIChzZWUgYWJvdmUpLiBEZWZhdWx0IHZhbHVlIGlzIDAgd2hpY2ggbWVhbnMgdGltZU91dCB3aWxsIG5vdCBiZSBoYW5kbGVkLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zZXJ2ZXJVcmw9aHR0cHM6Ly9kYXRhLmdlb3BmLmZyL2dlb2NvZGFnZS9yZXZlcnNlXSAtIFdlYiBzZXJ2aWNlIFVSTC4gSWYgdXNlZCwgb3B0aW9ucy5hcGlLZXkgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3NsID0gdHJ1ZV0gLSBVc2Ugb2YgSFRUUFMgb3IgSFRUUCBwcm90b2NvbCB0byByZXF1ZXN0IHRoZSBzZXJ2aWNlcy4gSFRUUFMgYnkgZGVmYXVsdCAoc3NsPXRydWUpLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5wcm94eVVSTF0gLSBQcm94eSBVUkwgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlLiBJZ25vcmVkIHdoZW4gb3B0aW9ucy5wcm90b2NvbCBpcyBzZXQgdG8gJ0pTT05QJyB2YWx1ZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNhbGxiYWNrU3VmZml4XSAtIENhbGxiYWNrIGZ1bmN0aW9uIG5hbWUgc3VmZml4IHRvIHVzZSBpbiBjYXNlIG9mIGEgSlNPTlAgcHJvdG9jb2wgdXNlIChzZWUgYWJvdmUpLCB0byBzZXQgeW91ciBvd24gc3VmZml4IGluc3RlYWQgb2YgYXV0by1pbmNyZW1lbnQuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnWEhSJyB2YWx1ZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yYXdSZXNwb25zZT1mYWxzZV0gLSBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaW1wbGllcyB5b3Ugd2FudCB0byBoYW5kbGUgdGhlIHNlcnZpY2UgcmVzcG9uc2UgYnkgeW91cnNlbGYgOiBpdCB3aWxsIGJlIHJldHVybmVkIGFzIGFuIHVucGFyc2VkIFN0cmluZyBpbiBvblN1Y2Nlc3MgY2FsbGJhY2sgcGFyYW1ldGVyLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25CZWZvcmVQYXJzZV0gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgc2VydmljZSByZXNwb25zZSBiZWZvcmUgcGFyc2luZyAoYXMgYW4gdW5wYXJzZWQgU3RyaW5nKS4gVGFrZXMgYSBTdHJpbmcgYXMgYSBwYXJhbWV0ZXIgKHRoZSByYXcgc2VydmljZSByZXNwb25zZSkuIFJldHVybnMgYSBTdHJpbmcgdGhhdCB3aWxsIGJlIHBhcnNlZCBhcyB0aGUgc2VydmljZSByZXNwb25zZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqL1xuICAgIHJldmVyc2VHZW9jb2RlIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHJldmVyc2VHZW9jb2RlU2VydmljZSA9IG5ldyBSZXZlcnNlR2VvY29kZShvcHRpb25zKTtcbiAgICAgICAgcmV2ZXJzZUdlb2NvZGVTZXJ2aWNlLmNhbGwoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldHRpbmcgc3VnZ2VzdGlvbnMgb2YgcHJvYmFibGUgcGxhY2VzIG5hbWVzIG9yIGFkZHJlc3MgYmFzZWQgb24gdW5jb21wbGV0ZSB0ZXh0cywgdXNpbmcgdGhlIFthdXRvY29tcGxldGlvbiBzZXJ2aWNlIG9mIHRoZSBHZW9wb3J0YWwgUGxhdGZvcm1de0BsaW5rIGh0dHBzOi8vZ2Vvc2VydmljZXMuaWduLmZyL2RvY3VtZW50YXRpb24vZ2Vvc2VydmljZXMvYXV0b2NvbXBsZXRpb24uaHRtbH1cbiAgICAgKlxuICAgICAqIEBtZXRob2QgYXV0b0NvbXBsZXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIGZvciBmdW5jdGlvbiBjYWxsLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmFwaUtleSAtIEFjY2VzcyBrZXkgdG8gR2VvcG9ydGFsIHBsYXRmb3JtLCBvYnRhaW5lZCBbaGVyZV17QGxpbmsgaHR0cHM6Ly9nZW9zZXJ2aWNlcy5pZ24uZnIvc2VydmljZXMtd2VifS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy50ZXh0IC0gVGV4dCBpbnB1dCB0byBjb21wbGV0ZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbb3B0aW9ucy5maWx0ZXJPcHRpb25zLnR5cGUgPSBcIlN0cmVldEFkZHJlc3NcIl0gLSBTdWdnZXN0aW9uIHR5cGVzIHRvIHByb3ZpZGUgOiBhZGRyZXNzIChcIlN0cmVldEFkZHJlc3NcIikgYW5kL29yIHBsYWNlIG5hbWUgKFwiUG9zaXRpb25PZkludGVyZXN0XCIpLlxuICAgICAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtvcHRpb25zLmZpbHRlck9wdGlvbnMudGVycml0b3J5XSAtIFBsYWNlcyB3aGVyZSB0byBsaW1pdCB0aGUgc2VhcmNoIG9mIHN1Z2dlc3Rpb25zIDogXCJNRVRST1BPTEVcIiAoQ29yc2ljYSBhbmQgbWV0cm9wb2xpdGFuIEZyYW5jZSksIFwiRE9NVE9NXCIgKEZyZW5jaCBvdmVyc2VhcyBkZXBhcnRtZW50cyBhbmQgdGVycml0b3JpZXMpLCBvciBhbiBJTlNFRSBjb2RlIG9mIGEgZGVwYXJ0bWVudC4gTm8gbGltaXRhdGlvbiBieSBkZWZhdWx0LiBGb3IgaW5zdGFuY2UgOiBbJ01FVFJPUE9MRScsICczMSddXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1SZXNwb25zZXMgPSAxMF0gLSBNYXhpbXVtIG51bWJlciBvZiByZXNwb25zZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5vblN1Y2Nlc3MgLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2V0dGluZyBzdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2UuIFRha2VzIGEge0BsaW5rIEdwLlNlcnZpY2VzLkF1dG9Db21wbGV0ZVJlc3BvbnNlfSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIgZXhjZXB0IGlmIFwicmF3UmVzcG9uc2VcIiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHVuc3VjY2Vzc2Z1bCBzZXJ2aWNlIHJlc3BvbnNlcyAodGltZU91dCwgbWlzc2luZyByaWdodHMsIC4uLikuIFRha2VzIGEge0BsaW5rIEdwLkVycm9yfSBvYmplY3QgYXMgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy50aW1lT3V0PTBdIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhYm92ZSB3aGljaCBhIHRpbWVPdXQgcmVzcG9uc2Ugd2lsbCBiZSByZXR1cm5lZCB3aXRoIG9uRmFpbHVyZSBjYWxsYmFjayAoc2VlIGFib3ZlKS4gRGVmYXVsdCB2YWx1ZSBpcyAwIHdoaWNoIG1lYW5zIHRpbWVPdXQgd2lsbCBub3QgYmUgaGFuZGxlZC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc2VydmVyVXJsPWh0dHBzOi8vZGF0YS5nZW9wZi5mci9nZW9jb2RhZ2UvY29tcGxldGlvbl0gLSBXZWIgc2VydmljZSBVUkwuIElmIHVzZWQsIG9wdGlvbnMuYXBpS2V5IHBhcmFtZXRlciBpcyBpZ25vcmVkLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNzbCA9IHRydWVdIC0gVXNlIG9mIEhUVFBTIG9yIEhUVFAgcHJvdG9jb2wgdG8gcmVxdWVzdCB0aGUgc2VydmljZXMuIEhUVFBTIGJ5IGRlZmF1bHQgKHNzbD10cnVlKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucHJvdG9jb2w9WEhSXSAtIFByb3RvY29sIHVzZWQgdG8gaGFuZGxlIGRpYWxvZyB3aXRoIHdlYiBzZXJ2aWNlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICdKU09OUCcgKHtAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KU09OUH0pIGFuZCAnWEhSJyAoe0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hNTEh0dHBSZXF1ZXN0fSkuIE9ubHkgWEhSIHByb3RvY29sIGlzIHN1cHBvcnRlZCBpbiBhIE5vZGVKUyBlbnZpcm9ubWVudC4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnByb3h5VVJMXSAtIFByb3h5IFVSTCB0byB1c2Ugd2hlbiByZXF1ZXN0aW5nIHVuZGVybHlpbmcgd2ViIHNlcnZpY2UuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnSlNPTlAnIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY2FsbGJhY2tTdWZmaXhdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBzdWZmaXggdG8gdXNlIGluIGNhc2Ugb2YgYSBKU09OUCBwcm90b2NvbCB1c2UgKHNlZSBhYm92ZSksIHRvIHNldCB5b3VyIG93biBzdWZmaXggaW5zdGVhZCBvZiBhdXRvLWluY3JlbWVudC4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdYSFInIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaHR0cE1ldGhvZD1HRVRdIC0gSFRUUCBtZXRob2QgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlIGluIGNhc2Ugb2YgYSBYSFIgcHJvdG9jb2wgdXNlIChzZWUgYWJvdmUpLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICdHRVQnIGFuZCAnUE9TVCcuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnSlNPTlAnIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24veG1sXCJdIC0gQ29udGVudC1UeXBlIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgdW5kZXJseWluZyB3ZWIgc2VydmljZSBpbiBjYXNlIG9mIGEgWEhSIHByb3RvY29sIHVzZSAoc2VlIGFib3ZlKSBhbmQgaWYgbWV0aG9kIEhUVFAgaXMgUE9TVC4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdKU09OUCcgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJhd1Jlc3BvbnNlPWZhbHNlXSAtIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSBpbXBsaWVzIHlvdSB3YW50IHRvIGhhbmRsZSB0aGUgc2VydmljZSByZXNwb25zZSBieSB5b3Vyc2VsZiA6IGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gdW5wYXJzZWQgU3RyaW5nIGluIG9uU3VjY2VzcyBjYWxsYmFjayBwYXJhbWV0ZXIuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkJlZm9yZVBhcnNlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBzZXJ2aWNlIHJlc3BvbnNlIGJlZm9yZSBwYXJzaW5nIChhcyBhbiB1bnBhcnNlZCBTdHJpbmcpLiBUYWtlcyBhIFN0cmluZyBhcyBhIHBhcmFtZXRlciAodGhlIHJhdyBzZXJ2aWNlIHJlc3BvbnNlKS4gUmV0dXJucyBhIFN0cmluZyB0aGF0IHdpbGwgYmUgcGFyc2VkIGFzIHRoZSBzZXJ2aWNlIHJlc3BvbnNlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICovXG4gICAgYXV0b0NvbXBsZXRlIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGF1dG9Db21wbGV0ZVNlcnZpY2UgPSBuZXcgQXV0b0NvbXBsZXRlKG9wdGlvbnMpO1xuICAgICAgICBhdXRvQ29tcGxldGVTZXJ2aWNlLmNhbGwoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldHRpbmcgYSByb3V0ZSBmcm9tIG9uZSBwb2ludCB0byBhbm90aGVyIHVzaW5nIHRoZSBbcm91dGUgc2VydmljZSBvZiB0aGUgR2VvcG9ydGFsIFBsYXRmb3JtXXtAbGluayBodHRwczovL2dlb3NlcnZpY2VzLmlnbi5mci9kb2N1bWVudGF0aW9uL2dlb3NlcnZpY2VzL2l0aW5lcmFpcmVzLmh0bWx9LlxuICAgICAqXG4gICAgICogQG1ldGhvZCByb3V0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZnVuY3Rpb24gY2FsbC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5yZXNvdXJjZSAtIFJlc291cmNlIHVzZWQgdG8gY29tcHV0ZSB0aGUgcm91dGUuIEF2YWlsYWJsZSB2YWx1ZXMgYXJlIGluIHRoZSBHZXRDYXBhYmlsaXRpZXMuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMuYXBpS2V5IC0gQWNjZXNzIGtleSB0byBHZW9wb3J0YWwgcGxhdGZvcm0sIG9idGFpbmVkIFtoZXJlXXtAbGluayBodHRwczovL2dlb3NlcnZpY2VzLmlnbi5mci9zZXJ2aWNlcy13ZWJ9LlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5yb3V0ZVByZWZlcmVuY2UgPSBcImZhc3Rlc3RcIl0gLSBJbmRpY2F0ZXMgdGhlIHdheSB0byBjb21wdXRlIHRoZSByb3V0ZSA6IFwiZmFzdGVzdFwiICh0aW1lIG9wdGltaXNhdGlvbikgb3IgXCJzaG9ydGVzdFwiIChkaXN0YW5jZSBvcHRpbWlzYXRpb24pLiBBdmFpbGFibGUgdmFsdWVzIGFyZSBpbiB0aGUgR2V0Q2FwYWJpbGl0aWVzLlxuICAgICAqIEBwYXJhbSB7R3AuUG9pbnR9IG9wdGlvbnMuc3RhcnRQb2ludCAtIFN0YXJ0IHBvaW50IG9mIHRoZSByb3V0ZS4gRXhwcmVzc2VkIGluIENSUzo4NCBjb29yZGluYXRlcyBzeXN0ZW0gKHN0YXJ0UG9pbnQueCBjb3JyZXNwb25kcyB0byBsb25naXR1ZGUsIHN0YXJ0UG9pbnQueSBjb3JyZXNwb25kcyB0byBsYXRpdHVkZSkuIEF2YWlsYWJsZSBiYm94IGFyZSBpbiB0aGUgR2V0Q2FwYWJpbGl0aWVzLlxuICAgICAqIEBwYXJhbSB7R3AuUG9pbnR9IG9wdGlvbnMuZW5kUG9pbnQgLSBFbmQgcG9pbnQgb2YgdGhlIHJvdXRlLiBFeHByZXNzZWQgaW4gQ1JTOjg0IGNvb3JkaW5hdGVzIHN5c3RlbSAoZW5kUG9pbnQueCBjb3JyZXNwb25kcyB0byBsb25naXR1ZGUsIGVuZFBvaW50LnkgY29ycmVzcG9uZHMgdG8gbGF0aXR1ZGUpLiBBdmFpbGFibGUgYmJveCBhcmUgaW4gdGhlIEdldENhcGFiaWxpdGllcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5LjxHcC5Qb2ludD59IFtvcHRpb25zLnZpYVBvaW50c10gLSBPcmRlcmVkIHZpYSBQb2ludHMgb2YgdGhlIHJvdXRlLiBFeHByZXNzZWQgaW4gQ1JTOjg0IGNvb3JkaW5hdGVzIHN5c3RlbSAodmlhUG9pbnRzW2ldLnggY29ycmVzcG9uZHMgdG8gbG9uZ2l0dWRlLCB2aWFQb2ludHNbaV0ueSBjb3JyZXNwb25kcyB0byBsYXRpdHVkZSkuIEF2YWlsYWJsZSBiYm94IGFyZSBpbiB0aGUgR2V0Q2FwYWJpbGl0aWVzLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5ncmFwaCA9IFwiVm9pdHVyZVwiXSAtIFVzZXIgcHJvZmlsZSB0byB1c2UgdG8gY29tcHV0ZSB0aGUgcm91dGUgOiBcIlZvaXR1cmVcIiAodXNpbmcgYSB2ZWhpY3VsZSkgb3IgXCJQaWV0b25cIiAocGVkZXN0cmlhbikuIEhhcyBhbiBpbmZsdWVuY2Ugb24gdGhlIGtpbmQgb2Ygcm9hZHMgdGhlIHJvdXRlIG1heSB1c2UgYW5kIHRoZSBhdmVyYWdlIHNwZWVkLiBBdmFpbGFibGUgYmJveCBhcmUgaW4gdGhlIEdldENhcGFiaWxpdGllcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBbb3B0aW9ucy5leGNsdXNpb25zXSAtIERFUFJFQ0FURUQ6IHVzZSBvcHRpb25zLmNvbnN0cmFpbnRzLiBJbmRpY2F0ZXMgaWYgcm91dGUgaGFzIHRvIGF2b2lkIHNvbWUgZmVhdHVyZXMgKFwidG9sbFwiLCBcImJyaWRnZVwiIG9yIFwidHVubmVsXCIpLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZ2VvbWV0cnlJbkluc3RydWN0aW9ucyA9IGZhbHNlXSAtIEluZGljYXRlcyBpZiByb3V0ZSBnZW9tZXRyeSBoYXMgdG8gYmUgYWxzbyByZXR1cm5lZCB3aXRoIHJvdXRlIGluc3RydWN0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnByb3ZpZGVCb3VuZGluZ0JveCA9IHRydWVdIC0gSW5kaWNhdGVzIGlmIHJvdXRlIGluc3RydWN0aW9ucyBoYXMgdG8gYmUgbG9jYWxpc2VkIHdpdGggYSBCQk9YIGluIHRoZSByZXNwb25zZS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZGlzdGFuY2VVbml0ID0gXCJtXCJdIC0gVGhlIHVuaXQgdXNlZCB0byBwcm92aWRlIGRpc3RhbmNlcyBpbiB0aGUgcmVzcG9uc2UgKFwibWV0ZXJcIiBvciBcImtpbG9tZXRlclwiKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVVuaXQgPSBcInNlY29uZFwiXSAtIFRoZSB1bml0IHVzZWQgdG8gcHJvdmlkZSBkdXJhdGlvbiBpbiB0aGUgcmVzcG9uc2UgKFwic3RhbmRhcmRcIiwgXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCIpLlxuICAgICAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IFtvcHRpb25zLndheXNBdHRyaWJ1dGVzXSAtIFdheSBBdHRyaWJ1dGVzIHRvIGFkZCBpbiB0aGUgcmVzcG9uc2UuIEF2YWlsYWJsZSB2YWx1ZXMgYXJlIGluIHRoZSBHZXRDYXBhYmlsaXRpZXMuXG4gICAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuY29uc3RyYWludHNdIC0gQ29uc3RyYWludHMgdXNlZCAoeydjb25zdHJhaW50VHlwZSc6J2Jhbm5lZCcsJ2tleSc6J3dheXNfdHlwZScsJ29wZXJhdG9yJzonPScsJ3ZhbHVlJzonYXV0b3JvdXRlJ30pLiBBdmFpbGFibGUgdmFsdWVzIGFyZSBpbiB0aGUgR2V0Q2FwYWJpbGl0aWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMub25TdWNjZXNzIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGdldHRpbmcgc3VjY2Vzc2Z1bCBzZXJ2aWNlIHJlc3BvbnNlLiBUYWtlcyBhIHtAbGluayBHcC5TZXJ2aWNlcy5Sb3V0ZVJlc3BvbnNlfSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIgZXhjZXB0IGlmIFwicmF3UmVzcG9uc2VcIiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZhaWx1cmVdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHVuc3VjY2Vzc2Z1bCBzZXJ2aWNlIHJlc3BvbnNlcyAodGltZU91dCwgbWlzc2luZyByaWdodHMsIC4uLikuIFRha2VzIGEge0BsaW5rIEdwLkVycm9yfSBvYmplY3QgYXMgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy50aW1lT3V0PTBdIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhYm92ZSB3aGljaCBhIHRpbWVPdXQgcmVzcG9uc2Ugd2lsbCBiZSByZXR1cm5lZCB3aXRoIG9uRmFpbHVyZSBjYWxsYmFjayAoc2VlIGFib3ZlKS4gRGVmYXVsdCB2YWx1ZSBpcyAwIHdoaWNoIG1lYW5zIHRpbWVPdXQgd2lsbCBub3QgYmUgaGFuZGxlZC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMub3V0cHV0Rm9ybWF0PSdqc29uJ10gLSBPdXRwdXQgZm9ybWF0IChcImpzb25cIiBvciBcInhtbFwiKSB0byB1c2UgZm9yIHVuZGVybHlpbmcgd2ViU2VydmljZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zZXJ2ZXJVcmw9aHR0cHM6Ly9kYXRhLmdlb3BmLmZyL25hdmlnYXRpb24vaXRpbmVyYWlyZV0gLSBXZWIgc2VydmljZSBVUkwuIElmIHVzZWQsIG9wdGlvbnMuYXBpS2V5IHBhcmFtZXRlciBpcyBpZ25vcmVkLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNzbCA9IHRydWVdIC0gVXNlIG9mIEhUVFBTIG9yIEhUVFAgcHJvdG9jb2wgdG8gcmVxdWVzdCB0aGUgc2VydmljZXMuIEhUVFBTIGJ5IGRlZmF1bHQgKHNzbD10cnVlKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucHJvdG9jb2w9WEhSXSAtIFByb3RvY29sIHVzZWQgdG8gaGFuZGxlIGRpYWxvZyB3aXRoIHdlYiBzZXJ2aWNlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICdKU09OUCcgKHtAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KU09OUH0pIGFuZCAnWEhSJyAoe0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hNTEh0dHBSZXF1ZXN0fSkuIE9ubHkgWEhSIHByb3RvY29sIGlzIHN1cHBvcnRlZCBpbiBhIE5vZGVKUyBlbnZpcm9ubWVudC4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnByb3h5VVJMXSAtIFByb3h5IFVSTCB0byB1c2Ugd2hlbiByZXF1ZXN0aW5nIHVuZGVybHlpbmcgd2ViIHNlcnZpY2UuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnSlNPTlAnIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY2FsbGJhY2tTdWZmaXhdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gbmFtZSBzdWZmaXggdG8gdXNlIGluIGNhc2Ugb2YgYSBKU09OUCBwcm90b2NvbCB1c2UgKHNlZSBhYm92ZSksIHRvIHNldCB5b3VyIG93biBzdWZmaXggaW5zdGVhZCBvZiBhdXRvLWluY3JlbWVudC4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdYSFInIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuaHR0cE1ldGhvZD1HRVRdIC0gSFRUUCBtZXRob2QgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlIGluIGNhc2Ugb2YgYSBYSFIgcHJvdG9jb2wgdXNlIChzZWUgYWJvdmUpLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICdHRVQnIGFuZCAnUE9TVCcuIElnbm9yZWQgd2hlbiBvcHRpb25zLnByb3RvY29sIGlzIHNldCB0byAnSlNPTlAnIHZhbHVlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24veG1sXCJdIC0gQ29udGVudC1UeXBlIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgdW5kZXJseWluZyB3ZWIgc2VydmljZSBpbiBjYXNlIG9mIGEgWEhSIHByb3RvY29sIHVzZSAoc2VlIGFib3ZlKSBhbmQgaWYgbWV0aG9kIEhUVFAgaXMgUE9TVC4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdKU09OUCcgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJhd1Jlc3BvbnNlPWZhbHNlXSAtIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSBpbXBsaWVzIHlvdSB3YW50IHRvIGhhbmRsZSB0aGUgc2VydmljZSByZXNwb25zZSBieSB5b3Vyc2VsZiA6IGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gdW5wYXJzZWQgU3RyaW5nIGluIG9uU3VjY2VzcyBjYWxsYmFjayBwYXJhbWV0ZXIuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkJlZm9yZVBhcnNlXSAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBzZXJ2aWNlIHJlc3BvbnNlIGJlZm9yZSBwYXJzaW5nIChhcyBhbiB1bnBhcnNlZCBTdHJpbmcpLiBUYWtlcyBhIFN0cmluZyBhcyBhIHBhcmFtZXRlciAodGhlIHJhdyBzZXJ2aWNlIHJlc3BvbnNlKS4gUmV0dXJucyBhIFN0cmluZyB0aGF0IHdpbGwgYmUgcGFyc2VkIGFzIHRoZSBzZXJ2aWNlIHJlc3BvbnNlLiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAgICovXG4gICAgcm91dGUgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICB2YXIgcm91dGVTZXJ2aWNlID0gbmV3IFJvdXRlKG9wdGlvbnMpO1xuICAgICAgICByb3V0ZVNlcnZpY2UuY2FsbCgpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ29tcHV0aW5nIGEgc2V0IG9mIHBsYWNlcyAoY3VydmUpIHJlYWNoYWJsZSBmcm9tIGEgZ2l2ZW4gcG9pbnQgKG9yIGZyb20gd2hlcmUgdG8gc3RhcnQgdG8gcmVhY2ggYSBnaXZlbiBwb2ludCkgd2l0aGluIGEgdGltZSBvciBkaXN0YW5jZSBjb25zdHJhaW50IHVzaW5nIHRoZSBbaXNvY2hyb25lIHNlcnZpY2Ugb2YgdGhlIEdlb3BvcnRhbCBQbGF0Zm9ybV17QGxpbmsgaHR0cHM6Ly9nZW9zZXJ2aWNlcy5pZ24uZnIvZG9jdW1lbnRhdGlvbi9nZW9zZXJ2aWNlcy9pc29jaHJvbmVzLmh0bWx9LlxuICAgICAqXG4gICAgICogQG1ldGhvZCBpc29DdXJ2ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZnVuY3Rpb24gY2FsbC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5hcGlLZXkgLSBBY2Nlc3Mga2V5IHRvIEdlb3BvcnRhbCBwbGF0Zm9ybSwgb2J0YWluZWQgW2hlcmVde0BsaW5rIGh0dHBzOi8vZ2Vvc2VydmljZXMuaWduLmZyL3NlcnZpY2VzLXdlYn0uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMucmVzb3VyY2UgLSBSZXNvdXJjZSB1c2VkIHRvIGNvbXB1dGUgdGhlIHJvdXRlLiBBdmFpbGFibGUgdmFsdWVzIGFyZSBpbiB0aGUgR2V0Q2FwYWJpbGl0aWVzLlxuICAgICAqIEBwYXJhbSB7R3AuUG9pbnR9IG9wdGlvbnMucG9zaXRpb24gLSBTdGFydCBvciBBcnJpdmFsIChvcHRpb25zLnJldmVyc2U9PT10cnVlKSBQb2ludCBmb3IgdGhlIGNvbXB1dGluZy4gRXhwcmVzc2VkIGluIENSUzo4NCBjb29yZGluYXRlcyBzeXN0ZW0gKHBvc2l0aW9uLnggY29ycmVzcG9uZHMgdG8gbG9uZ2l0dWRlLCBwb3NpdGlvbi55IGNvcnJlc3BvbmRzIHRvIGxhdGl0dWRlKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZ3JhcGggPSBcIlZvaXR1cmVcIl0gLSBVc2VyIHByb2ZpbGUgdG8gdXNlIHRvIGNvbXB1dGUgdGhlIGlzb0N1cnZlIDogXCJWb2l0dXJlXCIgKHVzaW5nIGEgdmVoaWN1bGUpIG9yIFwiUGlldG9uXCIgKHBlZGVzdHJpYW4pLiBIYXMgYW4gaW5mbHVlbmNlIG9uIHRoZSBraW5kIG9mIHJvYWRzIHRvIHVzZSBhbmQgdGhlIGF2ZXJhZ2Ugc3BlZWQuIEF2YWlsYWJsZSB2YWx1ZXMgYXJlIGluIHRoZSBHZXRDYXBhYmlsaXRpZXMuXG4gICAgICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gW29wdGlvbnMuZXhjbHVzaW9uc10gLSBERVBSRUNBVEVEOiB1c2Ugb3B0aW9ucy5jb25zdHJhaW50cy4gSW5kaWNhdGVzIGlmIHJvdXRlIGhhcyB0byBhdm9pZCBzb21lIGZlYXR1cmVzIChcInRvbGxcIiwgXCJicmlkZ2VcIiBvciBcInR1bm5lbFwiKS5cbiAgICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5jb25zdHJhaW50c10gLSBDb25zdHJhaW50cyB1c2VkICh7J2NvbnN0cmFpbnRUeXBlJzonYmFubmVkJywna2V5Jzond2F5c190eXBlJywnb3BlcmF0b3InOic9JywndmFsdWUnOidhdXRvcm91dGUnfSkuIEF2YWlsYWJsZSB2YWx1ZXMgYXJlIGluIHRoZSBHZXRDYXBhYmlsaXRpZXMuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLm1ldGhvZCA9IFwidGltZVwiXSAtIENvbXB1dGluZyBtZXRob2QgdG8gdXNlIDogXCJ0aW1lXCIgKHVzaW5nIGEgZHVyYXRpb24gYXMgYSBjb25zdHJhaW50KSBvciBcImRpc3RhbmNlXCIgKHVzaW5nIGEgZGlzdGFuY2UgYXMgYSBjb25zdHJhaW50KS4gQXZhaWxhYmxlIHZhbHVlcyBhcmUgaW4gdGhlIEdldENhcGFiaWxpdGllcy5cbiAgICAgKiBAcGFyYW0ge0Zsb2F0fSBvcHRpb25zLnRpbWUgLSBNYXhpbXVtIGR1cmF0aW9uIChleHByZXNzZWQgaW4gc2Vjb25kcykgdG8gdXNlIHdoZW4gb3B0aW9ucy5tZXRob2QgaXMgc2V0IHRvIFwidGltZVwiLlxuICAgICAqIEBwYXJhbSB7RmxvYXR9IG9wdGlvbnMuZGlzdGFuY2UgLSBNYXhpbXVtIGRpc3RhbmNlIChleHByZXNzZWQgaW4gbWV0ZXJzKSB0byB1c2Ugd2hlbiBvcHRpb25zLm1ldGhvZCBpcyBzZXQgdG8gXCJkaXN0YW5jZVwiLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZSA9IGZhbHNlXSAtIFNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlIGlmIHlvdSB3YW50IG9wdGlvbnMucG9zaXRpb24gdG8gYmUgdGhlIGRlc3RpbmF0aW9uIChpbnN0ZWFkIG9mIGRlcGFydHVyZSkgZm9yIHRoZSBjb21wdXRpbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRpc3RhbmNlVW5pdCA9IFwia21cIl0gLSBUaGUgdW5pdCB1c2VkIHRvIHByb3ZpZGUgZGlzdGFuY2VzIGluIHRoZSByZXNwb25zZSAoXCJtXCIgb3IgXCJrbVwiKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVVuaXQgPSBcInNlY29uZFwiXSAtIFRoZSB1bml0IHVzZWQgdG8gcHJvdmlkZSBkdXJhdGlvbiBpbiB0aGUgcmVzcG9uc2UgKFwic3RhbmRhcmRcIiwgXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCIpLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc21vb3RoaW5nID0gZmFsc2VdIC0gREVQUkVDQVRFRDogU2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaWYgeW91IHdhbnQgdGhlIHJlc3VsdGluZyBnZW9tZXRyeSB0byBiZSBzbW9vdGhlZC5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmhvbGVzID0gZmFsc2VdIC0gREVQUkVDQVRFRDogU2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaWYgeW91IHdhbnQgdGhlIHJlc3VsdGluZyBnZW9tZXRyeSAocG9seWdvbikgdG8gaGF2ZSBob2xlcyBpZiBwZXJ0aW5lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5vblN1Y2Nlc3MgLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2V0dGluZyBzdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2UuIFRha2VzIGEge0BsaW5rIEdwLlNlcnZpY2VzLklzb0N1cnZlUmVzcG9uc2V9IG9iamVjdCBhcyBhIHBhcmFtZXRlciBleGNlcHQgaWYgXCJyYXdSZXNwb25zZVwiIGlzIHNldCB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmFpbHVyZV0gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdW5zdWNjZXNzZnVsIHNlcnZpY2UgcmVzcG9uc2VzICh0aW1lT3V0LCBtaXNzaW5nIHJpZ2h0cywgLi4uKS4gVGFrZXMgYSB7QGxpbmsgR3AuRXJyb3J9IG9iamVjdCBhcyBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnRpbWVPdXQ9MF0gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGFib3ZlIHdoaWNoIGEgdGltZU91dCByZXNwb25zZSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25GYWlsdXJlIGNhbGxiYWNrIChzZWUgYWJvdmUpLiBEZWZhdWx0IHZhbHVlIGlzIDAgd2hpY2ggbWVhbnMgdGltZU91dCB3aWxsIG5vdCBiZSBoYW5kbGVkLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5vdXRwdXRGb3JtYXQ9J2pzb24nXSAtIE91dHB1dCBmb3JtYXQgKFwianNvblwiKSB0byB1c2UgZm9yIHVuZGVybHlpbmcgd2ViU2VydmljZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zZXJ2ZXJVcmw9aHR0cHM6Ly9kYXRhLmdlb3BmLmZyL25hdmlnYXRpb24vaXNvY2hyb25lXSAtIFdlYiBzZXJ2aWNlIFVSTC4gSWYgdXNlZCwgb3B0aW9ucy5hcGlLZXkgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc3NsID0gdHJ1ZV0gLSBVc2Ugb2YgSFRUUFMgb3IgSFRUUCBwcm90b2NvbCB0byByZXF1ZXN0IHRoZSBzZXJ2aWNlcy4gSFRUUFMgYnkgZGVmYXVsdCAoc3NsPXRydWUpLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5wcm90b2NvbD1YSFJdIC0gUHJvdG9jb2wgdXNlZCB0byBoYW5kbGUgZGlhbG9nIHdpdGggd2ViIHNlcnZpY2UuIFBvc3NpYmxlIHZhbHVlcyBhcmUgJ0pTT05QJyAoe0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pTT05QfSkgYW5kICdYSFInICh7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE1MSHR0cFJlcXVlc3R9KS4gT25seSBYSFIgcHJvdG9jb2wgaXMgc3VwcG9ydGVkIGluIGEgTm9kZUpTIGVudmlyb25tZW50LiBPbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucHJveHlVUkxdIC0gUHJveHkgVVJMIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgdW5kZXJseWluZyB3ZWIgc2VydmljZS4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdKU09OUCcgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5jYWxsYmFja1N1ZmZpeF0gLSBDYWxsYmFjayBmdW5jdGlvbiBuYW1lIHN1ZmZpeCB0byB1c2UgaW4gY2FzZSBvZiBhIEpTT05QIHByb3RvY29sIHVzZSAoc2VlIGFib3ZlKSwgdG8gc2V0IHlvdXIgb3duIHN1ZmZpeCBpbnN0ZWFkIG9mIGF1dG8taW5jcmVtZW50LiBJZ25vcmVkIHdoZW4gb3B0aW9ucy5wcm90b2NvbCBpcyBzZXQgdG8gJ1hIUicgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5odHRwTWV0aG9kPUdFVF0gLSBIVFRQIG1ldGhvZCB0byB1c2Ugd2hlbiByZXF1ZXN0aW5nIHVuZGVybHlpbmcgd2ViIHNlcnZpY2UgaW4gY2FzZSBvZiBhIFhIUiBwcm90b2NvbCB1c2UgKHNlZSBhYm92ZSkuIFBvc3NpYmxlIHZhbHVlcyBhcmUgJ0dFVCcgYW5kICdQT1NUJy4gSWdub3JlZCB3aGVuIG9wdGlvbnMucHJvdG9jb2wgaXMgc2V0IHRvICdKU09OUCcgdmFsdWUuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi94bWxcIl0gLSBDb250ZW50LVR5cGUgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyB1bmRlcmx5aW5nIHdlYiBzZXJ2aWNlIGluIGNhc2Ugb2YgYSBYSFIgcHJvdG9jb2wgdXNlIChzZWUgYWJvdmUpIGFuZCBpZiBtZXRob2QgSFRUUCBpcyBQT1NULiBJZ25vcmVkIHdoZW4gb3B0aW9ucy5wcm90b2NvbCBpcyBzZXQgdG8gJ0pTT05QJyB2YWx1ZS4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmF3UmVzcG9uc2U9ZmFsc2VdIC0gU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byB0cnVlIGltcGxpZXMgeW91IHdhbnQgdG8gaGFuZGxlIHRoZSBzZXJ2aWNlIHJlc3BvbnNlIGJ5IHlvdXJzZWxmIDogaXQgd2lsbCBiZSByZXR1cm5lZCBhcyBhbiB1bnBhcnNlZCBTdHJpbmcgaW4gb25TdWNjZXNzIGNhbGxiYWNrIHBhcmFtZXRlci4gT25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uQmVmb3JlUGFyc2VdIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHNlcnZpY2UgcmVzcG9uc2UgYmVmb3JlIHBhcnNpbmcgKGFzIGFuIHVucGFyc2VkIFN0cmluZykuIFRha2VzIGEgU3RyaW5nIGFzIGEgcGFyYW1ldGVyICh0aGUgcmF3IHNlcnZpY2UgcmVzcG9uc2UpLiBSZXR1cm5zIGEgU3RyaW5nIHRoYXQgd2lsbCBiZSBwYXJzZWQgYXMgdGhlIHNlcnZpY2UgcmVzcG9uc2UuIE9ubHkgdXNlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICAgKi9cbiAgICBpc29DdXJ2ZSA6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHZhciBwcm9jZXNzSXNvQ3VydmVTZXJ2aWNlID0gbmV3IFByb2Nlc3NJc29DdXJ2ZShvcHRpb25zKTtcbiAgICAgICAgcHJvY2Vzc0lzb0N1cnZlU2VydmljZS5jYWxsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQb2ludCBvYmplY3QuXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIEdwLlBvaW50XG4gKlxuICogQHByb3BlcnR5IHtGbG9hdH0geCAtIFBvaW50IGFic2Npc3NhXG4gKiBAcHJvcGVydHkge0Zsb2F0fSB5IC0gUG9pbnQgb3JkaW5hdGVcbiAqL1xudmFyIHBvaW50ID0ge307XG5cbi8qKlxuICogQ2lyY2xlIG9iamVjdC5cbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgR3AuQ2lyY2xlXG4gKlxuICogQHByb3BlcnR5IHtGbG9hdH0geCAtIENpcmNsZSBjZW50ZXIgYWJzY2lzc2EuXG4gKiBAcHJvcGVydHkge0Zsb2F0fSB5IC0gQ2lyY2xlIGNlbnRlciBvcmRpbmF0ZS5cbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IHJhZGl1cyAtIENpcmNsZSByYWRpdXMuXG4gKi9cbnZhciBjaXJjbGUgPSB7fTtcblxuLyoqXG4gKiBCb3VuZGluZyBib3ggb2JqZWN0LCBleHByZXNzZWQgd2l0aCBmb3VyIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBHcC5CQm94XG4gKlxuICogQHByb3BlcnR5IHtGbG9hdH0gbGVmdCAtIG1pbmltdW0gYWJzY2lzc2FcbiAqIEBwcm9wZXJ0eSB7RmxvYXR9IHJpZ2h0IC0gbWF4aW11bSBhYnNjaXNzYVxuICogQHByb3BlcnR5IHtGbG9hdH0gYm90dG9tIC0gbWluaW11bSBvcmRpbmF0ZVxuICogQHByb3BlcnR5IHtGbG9hdH0gdG9wIC0gbWF4aW11bSBvcmRpbmF0ZVxuICovXG52YXIgYmJveCA9IHt9O1xuXG5leHBvcnQgZGVmYXVsdCBTZXJ2aWNlcztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Services/Services.js\n"); + +/***/ }), + +/***/ "./src/Utils/Helper.js": +/*!*****************************!*\ + !*** ./src/Utils/Helper.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Classe utilitaire\n *\n * @module Helper\n * @alias Gp.Helper\n */\nvar Helper = {\n /**\n * concatenation des parametres key/value dans les urls\n *\n * @method normalyzeParameters\n * @static\n * @param {Object} params - tableau de clef/valeur\n *\n * @example\n * Gp.Utils.Helper.normalyzeParameters ({\n * key1:value1,\n * key2:value2,\n * key3:value3\n * });\n * // out : \"key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne les paramètres concaténés\n */\n normalyzeParameters: function normalyzeParameters(params) {\n var myParams = null;\n if (params) {\n var tabParams = [];\n for (var key in params) {\n if (params.hasOwnProperty(key)) {\n var value = params[key];\n if (!value) {\n value = \"\";\n }\n tabParams.push(key + \"=\" + value);\n }\n }\n myParams = tabParams.join(\"&\");\n }\n return myParams;\n },\n /**\n * Concaténation et encodage des urls.\n *\n * @method normalyzeUrl\n * @static\n * @param {String} url - url\n * @param {Object|String} params - tableau de clef/valeur ou string\n * @param {Boolean} encode - true|false, false par defaut\n *\n * @example\n * Gp.Utils.Helper.normalyzeUrl (url, {\n * key1:value1,\n * key2=:value2,\n * key3:value3\n * });\n * // out : \"url?key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne une url normalisée\n */\n normalyzeUrl: function normalyzeUrl(url, params, encode) {\n var myUrl = url;\n if (url) {\n if (url.split(\"?\").length - 1 >= 2) {\n // S'il y a plusieurs \"?\" dans l'URL, on garde le premier et on remplace les autres par des &\n var firstOccuranceIndex = url.search(/\\?/) + 1;\n myUrl = url.substring(0, firstOccuranceIndex) + url.slice(firstOccuranceIndex).replace(/\\?/g, \"&\");\n }\n var k = url.indexOf(\"?\");\n if (k === -1) {\n // pas de ? et KVP\n myUrl += \"?\";\n }\n if (k !== -1 && k !== url.length - 1) {\n // KVP\n myUrl += \"&\";\n }\n }\n if (params) {\n if (typeof params === \"string\") {\n params = params.replace(\"?\", \"\");\n myUrl += params;\n } else {\n myUrl += this.normalyzeParameters(params);\n }\n }\n if (encode) {\n // FIXME bonne idée ?\n myUrl = encodeURIComponent(myUrl);\n }\n return myUrl;\n },\n /**\n * Indentation d'une chaine\n *\n * @method indent\n * @static\n * @param {Number} n - nombre de tabulation\n * @param {String} msg - chaine\n *\n * @example\n * Gp.Utils.Helper.indent (2, \"message à indenter\")\n * // out\n * // ........message à indenter\n *\n * @returns {String} retourne une chaine indentée\n */\n indent: function indent(n, msg) {\n var num = n || 0;\n return new Array(num + 1).join(\"\\t\") + msg;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (Helper);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9VdGlscy9IZWxwZXIuanM/ODAzNSJdLCJuYW1lcyI6WyJIZWxwZXIiLCJub3JtYWx5emVQYXJhbWV0ZXJzIiwicGFyYW1zIiwibXlQYXJhbXMiLCJ0YWJQYXJhbXMiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsInZhbHVlIiwicHVzaCIsImpvaW4iLCJub3JtYWx5emVVcmwiLCJ1cmwiLCJlbmNvZGUiLCJteVVybCIsInNwbGl0IiwibGVuZ3RoIiwiZmlyc3RPY2N1cmFuY2VJbmRleCIsInNlYXJjaCIsInN1YnN0cmluZyIsInNsaWNlIiwicmVwbGFjZSIsImsiLCJpbmRleE9mIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5kZW50IiwibiIsIm1zZyIsIm51bSIsIkFycmF5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLE1BQU0sR0FBRztFQUVUO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsbUJBQW1CLEVBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBYUMsTUFBTSxFQUFFO0lBQ3BDLElBQUlDLFFBQVEsR0FBRyxJQUFJO0lBRW5CLElBQUlELE1BQU0sRUFBRTtNQUNSLElBQUlFLFNBQVMsR0FBRyxFQUFFO01BQ2xCLEtBQUssSUFBSUMsR0FBRyxJQUFJSCxNQUFNLEVBQUU7UUFDcEIsSUFBSUEsTUFBTSxDQUFDSSxjQUFjLENBQUNELEdBQUcsQ0FBQyxFQUFFO1VBQzVCLElBQUlFLEtBQUssR0FBR0wsTUFBTSxDQUFDRyxHQUFHLENBQUM7VUFDdkIsSUFBSSxDQUFDRSxLQUFLLEVBQUU7WUFDUkEsS0FBSyxHQUFHLEVBQUU7VUFDZDtVQUNBSCxTQUFTLENBQUNJLElBQUksQ0FBQ0gsR0FBRyxHQUFHLEdBQUcsR0FBR0UsS0FBSyxDQUFDO1FBQ3JDO01BQ0o7TUFFQUosUUFBUSxHQUFHQyxTQUFTLENBQUNLLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEM7SUFFQSxPQUFPTixRQUFRO0VBQ25CLENBQUM7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJTyxZQUFZLEVBQUcsU0FBZkEsWUFBWUEsQ0FBYUMsR0FBRyxFQUFFVCxNQUFNLEVBQUVVLE1BQU0sRUFBRTtJQUMxQyxJQUFJQyxLQUFLLEdBQUdGLEdBQUc7SUFFZixJQUFJQSxHQUFHLEVBQUU7TUFDTCxJQUFJQSxHQUFHLENBQUNHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEM7UUFDQSxJQUFJQyxtQkFBbUIsR0FBR0wsR0FBRyxDQUFDTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM5Q0osS0FBSyxHQUFHRixHQUFHLENBQUNPLFNBQVMsQ0FBQyxDQUFDLEVBQUVGLG1CQUFtQixDQUFDLEdBQUdMLEdBQUcsQ0FBQ1EsS0FBSyxDQUFDSCxtQkFBbUIsQ0FBQyxDQUFDSSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztNQUN0RztNQUVBLElBQUlDLENBQUMsR0FBR1YsR0FBRyxDQUFDVyxPQUFPLENBQUMsR0FBRyxDQUFDO01BQ3hCLElBQUlELENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUFFO1FBQ1pSLEtBQUssSUFBSSxHQUFHO01BQ2hCO01BRUEsSUFBSVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJQSxDQUFDLEtBQUtWLEdBQUcsQ0FBQ0ksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUFFO1FBQ3BDRixLQUFLLElBQUksR0FBRztNQUNoQjtJQUNKO0lBRUEsSUFBSVgsTUFBTSxFQUFFO01BQ1IsSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzVCQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ2tCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2hDUCxLQUFLLElBQUlYLE1BQU07TUFDbkIsQ0FBQyxNQUFNO1FBQ0hXLEtBQUssSUFBSSxJQUFJLENBQUNaLG1CQUFtQixDQUFDQyxNQUFNLENBQUM7TUFDN0M7SUFDSjtJQUVBLElBQUlVLE1BQU0sRUFBRTtNQUNSO01BQ0FDLEtBQUssR0FBR1Usa0JBQWtCLENBQUNWLEtBQUssQ0FBQztJQUNyQztJQUVBLE9BQU9BLEtBQUs7RUFDaEIsQ0FBQztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJVyxNQUFNLEVBQUcsU0FBVEEsTUFBTUEsQ0FBYUMsQ0FBQyxFQUFFQyxHQUFHLEVBQUU7SUFDdkIsSUFBSUMsR0FBRyxHQUFHRixDQUFDLElBQUksQ0FBQztJQUNoQixPQUFPLElBQUlHLEtBQUssQ0FBQ0QsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHaUIsR0FBRztFQUM5QztBQUNKLENBQUM7QUFFYzFCLHFFQUFNIiwiZmlsZSI6Ii4vc3JjL1V0aWxzL0hlbHBlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3NlIHV0aWxpdGFpcmVcbiAqXG4gKiBAbW9kdWxlIEhlbHBlclxuICogQGFsaWFzIEdwLkhlbHBlclxuICovXG52YXIgSGVscGVyID0ge1xuXG4gICAgLyoqXG4gICAgICogY29uY2F0ZW5hdGlvbiBkZXMgcGFyYW1ldHJlcyBrZXkvdmFsdWUgZGFucyBsZXMgdXJsc1xuICAgICAqXG4gICAgICogQG1ldGhvZCBub3JtYWx5emVQYXJhbWV0ZXJzXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSB0YWJsZWF1IGRlIGNsZWYvdmFsZXVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBHcC5VdGlscy5IZWxwZXIubm9ybWFseXplUGFyYW1ldGVycyAoe1xuICAgICAqICAgICAgICAga2V5MTp2YWx1ZTEsXG4gICAgICogICAgICAgICBrZXkyOnZhbHVlMixcbiAgICAgKiAgICAgICAgIGtleTM6dmFsdWUzXG4gICAgICogIH0pO1xuICAgICAqICAvLyBvdXQgOiBcImtleTE9dmFsdWUxJmtleTI9dmFsdWUyJmtleTM9dmFsdWUzXCJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHJldG91cm5lIGxlcyBwYXJhbcOodHJlcyBjb25jYXTDqW7DqXNcbiAgICAgKi9cbiAgICBub3JtYWx5emVQYXJhbWV0ZXJzIDogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgbXlQYXJhbXMgPSBudWxsO1xuXG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIHZhciB0YWJQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0YWJQYXJhbXMucHVzaChrZXkgKyBcIj1cIiArIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG15UGFyYW1zID0gdGFiUGFyYW1zLmpvaW4oXCImXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG15UGFyYW1zO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25jYXTDqW5hdGlvbiBldCBlbmNvZGFnZSBkZXMgdXJscy5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgbm9ybWFseXplVXJsXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSB1cmxcbiAgICAgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtcyAtIHRhYmxlYXUgZGUgY2xlZi92YWxldXIgb3Ugc3RyaW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBlbmNvZGUgLSB0cnVlfGZhbHNlLCBmYWxzZSBwYXIgZGVmYXV0XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBHcC5VdGlscy5IZWxwZXIubm9ybWFseXplVXJsICh1cmwsIHtcbiAgICAgKiAgICAgICAgIGtleTE6dmFsdWUxLFxuICAgICAqICAgICAgICAga2V5Mj06dmFsdWUyLFxuICAgICAqICAgICAgICAga2V5Mzp2YWx1ZTNcbiAgICAgKiAgfSk7XG4gICAgICogIC8vIG91dCA6IFwidXJsP2tleTE9dmFsdWUxJmtleTI9dmFsdWUyJmtleTM9dmFsdWUzXCJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHJldG91cm5lIHVuZSB1cmwgbm9ybWFsaXPDqWVcbiAgICAgKi9cbiAgICBub3JtYWx5emVVcmwgOiBmdW5jdGlvbiAodXJsLCBwYXJhbXMsIGVuY29kZSkge1xuICAgICAgICB2YXIgbXlVcmwgPSB1cmw7XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgaWYgKHVybC5zcGxpdChcIj9cIikubGVuZ3RoIC0gMSA+PSAyKSB7XG4gICAgICAgICAgICAgICAgLy8gUydpbCB5IGEgcGx1c2lldXJzIFwiP1wiIGRhbnMgbCdVUkwsIG9uIGdhcmRlIGxlIHByZW1pZXIgZXQgb24gcmVtcGxhY2UgbGVzIGF1dHJlcyBwYXIgZGVzICZcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RPY2N1cmFuY2VJbmRleCA9IHVybC5zZWFyY2goL1xcPy8pICsgMTtcbiAgICAgICAgICAgICAgICBteVVybCA9IHVybC5zdWJzdHJpbmcoMCwgZmlyc3RPY2N1cmFuY2VJbmRleCkgKyB1cmwuc2xpY2UoZmlyc3RPY2N1cmFuY2VJbmRleCkucmVwbGFjZSgvXFw/L2csIFwiJlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGsgPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgICAgICAgICBpZiAoayA9PT0gLTEpIHsgLy8gcGFzIGRlID8gZXQgS1ZQXG4gICAgICAgICAgICAgICAgbXlVcmwgKz0gXCI/XCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChrICE9PSAtMSAmJiBrICE9PSB1cmwubGVuZ3RoIC0gMSkgeyAvLyBLVlBcbiAgICAgICAgICAgICAgICBteVVybCArPSBcIiZcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnJlcGxhY2UoXCI/XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIG15VXJsICs9IHBhcmFtcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbXlVcmwgKz0gdGhpcy5ub3JtYWx5emVQYXJhbWV0ZXJzKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5jb2RlKSB7XG4gICAgICAgICAgICAvLyBGSVhNRSBib25uZSBpZMOpZSA/XG4gICAgICAgICAgICBteVVybCA9IGVuY29kZVVSSUNvbXBvbmVudChteVVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbXlVcmw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluZGVudGF0aW9uIGQndW5lIGNoYWluZVxuICAgICAqXG4gICAgICogQG1ldGhvZCBpbmRlbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG4gLSBub21icmUgZGUgdGFidWxhdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSBjaGFpbmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogR3AuVXRpbHMuSGVscGVyLmluZGVudCAoMiwgXCJtZXNzYWdlIMOgIGluZGVudGVyXCIpXG4gICAgICogLy8gb3V0XG4gICAgICogLy8gLi4uLi4uLi5tZXNzYWdlIMOgIGluZGVudGVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSByZXRvdXJuZSB1bmUgY2hhaW5lIGluZGVudMOpZVxuICAgICAqL1xuICAgIGluZGVudCA6IGZ1bmN0aW9uIChuLCBtc2cpIHtcbiAgICAgICAgdmFyIG51bSA9IG4gfHwgMDtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShudW0gKyAxKS5qb2luKFwiXFx0XCIpICsgbXNnO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhlbHBlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Utils/Helper.js\n"); + +/***/ }), + +/***/ "./src/Utils/LoggerByDefault.js": +/*!**************************************!*\ + !*** ./src/Utils/LoggerByDefault.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var loglevel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! loglevel */ \"./node_modules/loglevel/lib/loglevel.js\");\n/* harmony import */ var loglevel__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(loglevel__WEBPACK_IMPORTED_MODULE_0__);\n\nvar LoggerByDefault = {\n /**\n * logger statique\n *\n * @static\n * @param {String} name - nom du logger\n * @returns {Object} retourne un logger\n */\n getLogger: function getLogger(name) {\n // Substitute global constants configured at compile time\n // cf. webpack.config.js\n // on définit process si non défini dans l'environnement\n // eslint-disable-next-line no-use-before-define\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE: false\n };\n }\n process.env.VERBOSE ? loglevel__WEBPACK_IMPORTED_MODULE_0__[\"enableAll\"]() : loglevel__WEBPACK_IMPORTED_MODULE_0__[\"disableAll\"]();\n var logname = name || \"default\";\n return loglevel__WEBPACK_IMPORTED_MODULE_0__[\"getLogger\"](logname);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (LoggerByDefault);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9VdGlscy9Mb2dnZXJCeURlZmF1bHQuanM/ODFmMyJdLCJuYW1lcyI6WyJMb2dnZXJCeURlZmF1bHQiLCJnZXRMb2dnZXIiLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIlZFUkJPU0UiLCJMb2ciLCJsb2duYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBZ0M7QUFFaEMsSUFBSUEsZUFBZSxHQUFHO0VBQ2xCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lDLFNBQVMsRUFBRyxTQUFaQSxTQUFTQSxDQUFhQyxJQUFJLEVBQUU7SUFDeEI7SUFDQTtJQUNBO0lBQ0E7SUFDQSxJQUFJLE9BQU9DLE9BQU8sS0FBSyxXQUFXLEVBQUU7TUFDaEMsSUFBSUEsT0FBTyxHQUFHLENBQUMsQ0FBQztNQUNoQkEsT0FBTyxDQUFDQyxHQUFHLEdBQUc7UUFDVkMsT0FBTyxFQUFHO01BQ2QsQ0FBQztJQUNMO0lBQ0NGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxPQUFPLEdBQUlDLGtEQUFhLENBQUMsQ0FBQyxHQUFHQSxtREFBYyxDQUFDLENBQUM7SUFDMUQsSUFBSUMsT0FBTyxHQUFHTCxJQUFJLElBQUksU0FBUztJQUMvQixPQUFPSSxrREFBYSxDQUFDQyxPQUFPLENBQUM7RUFDakM7QUFDSixDQUFDO0FBRWNQLDhFQUFlIiwiZmlsZSI6Ii4vc3JjL1V0aWxzL0xvZ2dlckJ5RGVmYXVsdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIExvZyBmcm9tIFwibG9nbGV2ZWxcIjtcblxudmFyIExvZ2dlckJ5RGVmYXVsdCA9IHtcbiAgICAvKipcbiAgICAgKiBsb2dnZXIgc3RhdGlxdWVcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIG5vbSBkdSBsb2dnZXJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSByZXRvdXJuZSB1biBsb2dnZXJcbiAgICAgKi9cbiAgICBnZXRMb2dnZXIgOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAvLyBTdWJzdGl0dXRlIGdsb2JhbCBjb25zdGFudHMgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWVcbiAgICAgICAgLy8gY2YuIHdlYnBhY2suY29uZmlnLmpzXG4gICAgICAgIC8vIG9uIGTDqWZpbml0IHByb2Nlc3Mgc2kgbm9uIGTDqWZpbmkgZGFucyBsJ2Vudmlyb25uZW1lbnRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdmFyIHByb2Nlc3MgPSB7fTtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52ID0ge1xuICAgICAgICAgICAgICAgIFZFUkJPU0UgOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAocHJvY2Vzcy5lbnYuVkVSQk9TRSkgPyBMb2cuZW5hYmxlQWxsKCkgOiBMb2cuZGlzYWJsZUFsbCgpO1xuICAgICAgICB2YXIgbG9nbmFtZSA9IG5hbWUgfHwgXCJkZWZhdWx0XCI7XG4gICAgICAgIHJldHVybiBMb2cuZ2V0TG9nZ2VyKGxvZ25hbWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dlckJ5RGVmYXVsdDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Utils/LoggerByDefault.js\n"); + +/***/ }), + +/***/ "./src/Utils/MessagesResources.js": +/*!****************************************!*\ + !*** ./src/Utils/MessagesResources.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/**\n * Classe de gestion des erreurs qui permer d'associer un message d'erreur à l'exception lancée.\n *\n * @example\n * MessagesResources.getMessage(\"ERROR_PARAM_MISSING\", \"x\", \"y\", \"z\")));\n * // --> output : Parameter(s) 'x - y - z' missing\n *\n * @module MessagesResources\n * @alias Gp.Utils.MessagesResources\n * @private\n */\nvar MessagesResources = {\n // Paramètres\n PARAM_MISSING: \"Parameter(s) '%var%' missing\",\n PARAM_EMPTY: \"Parameter(s) '%var%' empty\",\n PARAM_TYPE: \"Wrong type(s) for parameter(s) '%var%'\",\n PARAM_FORMAT: \"Parameter(s) '%var%' not correctly formatted\",\n PARAM_NOT_SUPPORT: \"Value(s) for parameter(s) '%var%' not supported\",\n PARAM_NOT_SUPPORT_NODEJS: \"Value(s) for parameter(s) '%var%' not supported to NodeJS\",\n PARAM_UNKNOWN: \"Value(s) for parameter(s) '%var%' unknown\",\n // Services\n // Requête\n SERVICE_REQUEST_BUILD: \"An error occurred during the request building of the service\",\n SERVICE_REQUEST_EMPTY: \"The request sent to the service is empty\",\n // Réponse\n SERVICE_RESPONSE_EXCEPTION: \"The service returned an exception : '%var%'\",\n SERVICE_RESPONSE_EXCEPTION_2: \"The service returned an exception\",\n SERVICE_RESPONSE_ANALYSE: \"An error occurred while parsing the response '%var%' of the service\",\n SERVICE_RESPONSE_ANALYSE_2: \"An unknown error occurred while parsing the response\",\n SERVICE_RESPONSE_EMPTY: \"The response of the service is empty\",\n SERVICE_RESPONSE_EMPTY_2: \"The response from the service could not be analyzed or is empty\",\n SERVICE_RESPONSE_FORMAT: \"The format of the service response is not supported (handled format(s) : '%var%')\",\n SERVICE_RESPONSE_FORMAT_2: \"The format of the service response is not supported\",\n SERVICE_RESPONSE_FORMAT_3: \"No suggestion matching the search\",\n // Classes\n CLASS_CONSTRUCTOR: \"'%var%' constructor cannot be called as a function.\",\n /**\n * Fonction qui va retourner le message d'erreur associé à la clé donnée\n *\n * @method getMessage\n * @param {String} clef - Clef de l'erreur (ex : ERROR_PARAM)\n * @param {String[]} parametres - Paramètres/variables concernés par le message d'erreur associé à la clef donnée\n * @return {String} message - String contenant le message de l'exception\n */\n getMessage: function getMessage(clef, parametres) {\n // param de la fonction uniquement pour la documentation...\n\n if (Object.keys(arguments).length === 0) {\n return \"Message indefined !\";\n }\n var params = Array.prototype.slice.call(arguments);\n var key = params.shift();\n var args = params;\n var message = this[key];\n try {\n if (Array.isArray(args) && args.length > 0) {\n message = message.replace(\"%var%\", args.join(\" - \"));\n } else {\n message = message.replace(\"%var%\", \"%var% (not specified)\");\n }\n } catch (e) {\n // error de string.replace()\n }\n return message;\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (MessagesResources);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC8uL3NyYy9VdGlscy9NZXNzYWdlc1Jlc291cmNlcy5qcz9lYWY1Il0sIm5hbWVzIjpbIk1lc3NhZ2VzUmVzb3VyY2VzIiwiUEFSQU1fTUlTU0lORyIsIlBBUkFNX0VNUFRZIiwiUEFSQU1fVFlQRSIsIlBBUkFNX0ZPUk1BVCIsIlBBUkFNX05PVF9TVVBQT1JUIiwiUEFSQU1fTk9UX1NVUFBPUlRfTk9ERUpTIiwiUEFSQU1fVU5LTk9XTiIsIlNFUlZJQ0VfUkVRVUVTVF9CVUlMRCIsIlNFUlZJQ0VfUkVRVUVTVF9FTVBUWSIsIlNFUlZJQ0VfUkVTUE9OU0VfRVhDRVBUSU9OIiwiU0VSVklDRV9SRVNQT05TRV9FWENFUFRJT05fMiIsIlNFUlZJQ0VfUkVTUE9OU0VfQU5BTFlTRSIsIlNFUlZJQ0VfUkVTUE9OU0VfQU5BTFlTRV8yIiwiU0VSVklDRV9SRVNQT05TRV9FTVBUWSIsIlNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlfMiIsIlNFUlZJQ0VfUkVTUE9OU0VfRk9STUFUIiwiU0VSVklDRV9SRVNQT05TRV9GT1JNQVRfMiIsIlNFUlZJQ0VfUkVTUE9OU0VfRk9STUFUXzMiLCJDTEFTU19DT05TVFJVQ1RPUiIsImdldE1lc3NhZ2UiLCJjbGVmIiwicGFyYW1ldHJlcyIsIk9iamVjdCIsImtleXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJwYXJhbXMiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsImtleSIsInNoaWZ0IiwiYXJncyIsIm1lc3NhZ2UiLCJpc0FycmF5IiwicmVwbGFjZSIsImpvaW4iLCJlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxpQkFBaUIsR0FBRztFQUVwQjtFQUNBQyxhQUFhLEVBQUcsOEJBQThCO0VBQzlDQyxXQUFXLEVBQUcsNEJBQTRCO0VBQzFDQyxVQUFVLEVBQUcsd0NBQXdDO0VBQ3JEQyxZQUFZLEVBQUcsOENBQThDO0VBQzdEQyxpQkFBaUIsRUFBRyxpREFBaUQ7RUFDckVDLHdCQUF3QixFQUFHLDJEQUEyRDtFQUN0RkMsYUFBYSxFQUFHLDJDQUEyQztFQUUzRDtFQUNBO0VBQ0FDLHFCQUFxQixFQUFHLDhEQUE4RDtFQUN0RkMscUJBQXFCLEVBQUcsMENBQTBDO0VBRWxFO0VBQ0FDLDBCQUEwQixFQUFHLDZDQUE2QztFQUMxRUMsNEJBQTRCLEVBQUcsbUNBQW1DO0VBQ2xFQyx3QkFBd0IsRUFBRyxxRUFBcUU7RUFDaEdDLDBCQUEwQixFQUFHLHNEQUFzRDtFQUNuRkMsc0JBQXNCLEVBQUcsc0NBQXNDO0VBQy9EQyx3QkFBd0IsRUFBRyxpRUFBaUU7RUFDNUZDLHVCQUF1QixFQUFHLG1GQUFtRjtFQUM3R0MseUJBQXlCLEVBQUcscURBQXFEO0VBQ2pGQyx5QkFBeUIsRUFBRyxtQ0FBbUM7RUFFL0Q7RUFDQUMsaUJBQWlCLEVBQUcscURBQXFEO0VBRXpFO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsVUFBVSxFQUFHLFNBQWJBLFVBQVVBLENBQWFDLElBQUksRUFBRUMsVUFBVSxFQUFFO0lBQ3JDOztJQUVBLElBQUlDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUNyQyxPQUFPLHFCQUFxQjtJQUNoQztJQUVBLElBQUlDLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDTixTQUFTLENBQUM7SUFDbEQsSUFBSU8sR0FBRyxHQUFHTCxNQUFNLENBQUNNLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLElBQUlDLElBQUksR0FBR1AsTUFBTTtJQUVqQixJQUFJUSxPQUFPLEdBQUcsSUFBSSxDQUFDSCxHQUFHLENBQUM7SUFFdkIsSUFBSTtNQUNBLElBQUlKLEtBQUssQ0FBQ1EsT0FBTyxDQUFDRixJQUFJLENBQUMsSUFBSUEsSUFBSSxDQUFDUixNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDUyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLE9BQU8sRUFBRUgsSUFBSSxDQUFDSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDeEQsQ0FBQyxNQUFNO1FBQ0hILE9BQU8sR0FBR0EsT0FBTyxDQUFDRSxPQUFPLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDO01BQy9EO0lBQ0osQ0FBQyxDQUFDLE9BQU9FLENBQUMsRUFBRTtNQUNSO0lBQUE7SUFJSixPQUFPSixPQUFPO0VBQ2xCO0FBQ0osQ0FBQztBQUVjbkMsZ0ZBQWlCIiwiZmlsZSI6Ii4vc3JjL1V0aWxzL01lc3NhZ2VzUmVzb3VyY2VzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGFzc2UgZGUgZ2VzdGlvbiBkZXMgZXJyZXVycyBxdWkgcGVybWVyIGQnYXNzb2NpZXIgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBsJ2V4Y2VwdGlvbiBsYW5jw6llLlxuICpcbiAqIEBleGFtcGxlXG4gKiBNZXNzYWdlc1Jlc291cmNlcy5nZXRNZXNzYWdlKFwiRVJST1JfUEFSQU1fTUlTU0lOR1wiLCBcInhcIiwgXCJ5XCIsIFwielwiKSkpO1xuICogLy8gLS0+IG91dHB1dCA6IFBhcmFtZXRlcihzKSAneCAtIHkgLSB6JyBtaXNzaW5nXG4gKlxuICogQG1vZHVsZSBNZXNzYWdlc1Jlc291cmNlc1xuICogQGFsaWFzIEdwLlV0aWxzLk1lc3NhZ2VzUmVzb3VyY2VzXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgTWVzc2FnZXNSZXNvdXJjZXMgPSB7XG5cbiAgICAvLyBQYXJhbcOodHJlc1xuICAgIFBBUkFNX01JU1NJTkcgOiBcIlBhcmFtZXRlcihzKSAnJXZhciUnIG1pc3NpbmdcIixcbiAgICBQQVJBTV9FTVBUWSA6IFwiUGFyYW1ldGVyKHMpICcldmFyJScgZW1wdHlcIixcbiAgICBQQVJBTV9UWVBFIDogXCJXcm9uZyB0eXBlKHMpIGZvciBwYXJhbWV0ZXIocykgJyV2YXIlJ1wiLFxuICAgIFBBUkFNX0ZPUk1BVCA6IFwiUGFyYW1ldGVyKHMpICcldmFyJScgbm90IGNvcnJlY3RseSBmb3JtYXR0ZWRcIixcbiAgICBQQVJBTV9OT1RfU1VQUE9SVCA6IFwiVmFsdWUocykgZm9yIHBhcmFtZXRlcihzKSAnJXZhciUnIG5vdCBzdXBwb3J0ZWRcIixcbiAgICBQQVJBTV9OT1RfU1VQUE9SVF9OT0RFSlMgOiBcIlZhbHVlKHMpIGZvciBwYXJhbWV0ZXIocykgJyV2YXIlJyBub3Qgc3VwcG9ydGVkIHRvIE5vZGVKU1wiLFxuICAgIFBBUkFNX1VOS05PV04gOiBcIlZhbHVlKHMpIGZvciBwYXJhbWV0ZXIocykgJyV2YXIlJyB1bmtub3duXCIsXG5cbiAgICAvLyBTZXJ2aWNlc1xuICAgIC8vIFJlcXXDqnRlXG4gICAgU0VSVklDRV9SRVFVRVNUX0JVSUxEIDogXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHJlcXVlc3QgYnVpbGRpbmcgb2YgdGhlIHNlcnZpY2VcIixcbiAgICBTRVJWSUNFX1JFUVVFU1RfRU1QVFkgOiBcIlRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHNlcnZpY2UgaXMgZW1wdHlcIixcblxuICAgIC8vIFLDqXBvbnNlXG4gICAgU0VSVklDRV9SRVNQT05TRV9FWENFUFRJT04gOiBcIlRoZSBzZXJ2aWNlIHJldHVybmVkIGFuIGV4Y2VwdGlvbiA6ICcldmFyJSdcIixcbiAgICBTRVJWSUNFX1JFU1BPTlNFX0VYQ0VQVElPTl8yIDogXCJUaGUgc2VydmljZSByZXR1cm5lZCBhbiBleGNlcHRpb25cIixcbiAgICBTRVJWSUNFX1JFU1BPTlNFX0FOQUxZU0UgOiBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIHJlc3BvbnNlICcldmFyJScgb2YgdGhlIHNlcnZpY2VcIixcbiAgICBTRVJWSUNFX1JFU1BPTlNFX0FOQUxZU0VfMiA6IFwiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSByZXNwb25zZVwiLFxuICAgIFNFUlZJQ0VfUkVTUE9OU0VfRU1QVFkgOiBcIlRoZSByZXNwb25zZSBvZiB0aGUgc2VydmljZSBpcyBlbXB0eVwiLFxuICAgIFNFUlZJQ0VfUkVTUE9OU0VfRU1QVFlfMiA6IFwiVGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZpY2UgY291bGQgbm90IGJlIGFuYWx5emVkIG9yIGlzIGVtcHR5XCIsXG4gICAgU0VSVklDRV9SRVNQT05TRV9GT1JNQVQgOiBcIlRoZSBmb3JtYXQgb2YgdGhlIHNlcnZpY2UgcmVzcG9uc2UgaXMgbm90IHN1cHBvcnRlZCAoaGFuZGxlZCBmb3JtYXQocykgOiAnJXZhciUnKVwiLFxuICAgIFNFUlZJQ0VfUkVTUE9OU0VfRk9STUFUXzIgOiBcIlRoZSBmb3JtYXQgb2YgdGhlIHNlcnZpY2UgcmVzcG9uc2UgaXMgbm90IHN1cHBvcnRlZFwiLFxuICAgIFNFUlZJQ0VfUkVTUE9OU0VfRk9STUFUXzMgOiBcIk5vIHN1Z2dlc3Rpb24gbWF0Y2hpbmcgdGhlIHNlYXJjaFwiLFxuXG4gICAgLy8gQ2xhc3Nlc1xuICAgIENMQVNTX0NPTlNUUlVDVE9SIDogXCInJXZhciUnIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIixcblxuICAgIC8qKlxuICAgICAqIEZvbmN0aW9uIHF1aSB2YSByZXRvdXJuZXIgbGUgbWVzc2FnZSBkJ2VycmV1ciBhc3NvY2nDqSDDoCBsYSBjbMOpIGRvbm7DqWVcbiAgICAgKlxuICAgICAqIEBtZXRob2QgZ2V0TWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjbGVmIC0gQ2xlZiBkZSBsJ2VycmV1ciAoZXggOiBFUlJPUl9QQVJBTSlcbiAgICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBwYXJhbWV0cmVzIC0gUGFyYW3DqHRyZXMvdmFyaWFibGVzIGNvbmNlcm7DqXMgcGFyIGxlIG1lc3NhZ2UgZCdlcnJldXIgYXNzb2Npw6kgw6AgbGEgY2xlZiBkb25uw6llXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBtZXNzYWdlIC0gU3RyaW5nIGNvbnRlbmFudCBsZSBtZXNzYWdlIGRlIGwnZXhjZXB0aW9uXG4gICAgICovXG4gICAgZ2V0TWVzc2FnZSA6IGZ1bmN0aW9uIChjbGVmLCBwYXJhbWV0cmVzKSB7XG4gICAgICAgIC8vIHBhcmFtIGRlIGxhIGZvbmN0aW9uIHVuaXF1ZW1lbnQgcG91ciBsYSBkb2N1bWVudGF0aW9uLi4uXG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGFyZ3VtZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJNZXNzYWdlIGluZGVmaW5lZCAhXCI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyYW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgdmFyIGtleSA9IHBhcmFtcy5zaGlmdCgpO1xuICAgICAgICB2YXIgYXJncyA9IHBhcmFtcztcblxuICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXNba2V5XTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcIiV2YXIlXCIsIGFyZ3Muam9pbihcIiAtIFwiKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXCIldmFyJVwiLCBcIiV2YXIlIChub3Qgc3BlY2lmaWVkKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXJyb3IgZGUgc3RyaW5nLnJlcGxhY2UoKVxuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlc1Jlc291cmNlcztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Utils/MessagesResources.js\n"); + +/***/ }), + +/***/ 0: +/*!**********************!*\ + !*** multi ./src/Gp ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! /home/runner/work/geoportal-access-lib/geoportal-access-lib/src/Gp */"./src/Gp.js"); + + +/***/ }), + +/***/ "node-fetch": +/*!***********************************************************************************!*\ + !*** external {"commonjs2":"node-fetch","commonjs":"node-fetch","amd":"require"} ***! + \***********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = __WEBPACK_EXTERNAL_MODULE_node_fetch__;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcC9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcIm5vZGUtZmV0Y2hcIixcImNvbW1vbmpzXCI6XCJub2RlLWZldGNoXCIsXCJhbWRcIjpcInJlcXVpcmVcIn0/YWJiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJub2RlLWZldGNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX25vZGVfZmV0Y2hfXzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///node-fetch\n"); + +/***/ }) + +/******/ })["default"]; +}); \ No newline at end of file diff --git a/v3.4.3/dist/GpServices-src.js b/v3.4.3/dist/GpServices-src.js new file mode 100644 index 00000000..009ec6a0 --- /dev/null +++ b/v3.4.3/dist/GpServices-src.js @@ -0,0 +1,15988 @@ +/*! + * @brief Geoportal resources access library + * + * This software is released under the licence CeCILL-B (Free BSD compatible) + * @see http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt + * @see http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt + * @see http://www.cecill.info/ + * + * copyright CeCILL-B + * copyright IGN + * @author IGN + * @version 3.4.3 + * @date 21/08/2024 + * + */ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version v4.2.4 + */ + +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("node-fetch")); + else if(typeof define === 'function' && define.amd) + define("Gp", ["require"], factory); + else if(typeof exports === 'object') + exports["Gp"] = factory(require("node-fetch")); + else + root["Gp"] = factory(root[undefined]); +})(this, function(__WEBPACK_EXTERNAL_MODULE__14__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(1); + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "servicesVersion", function() { return servicesVersion; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "servicesDate", function() { return servicesDate; }); +/* harmony import */ var _Services_Services__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); +/* harmony import */ var _Services_DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24); +/* harmony import */ var _Services_Alti_Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37); +/* harmony import */ var _Services_Alti_Response_model_Elevation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38); +/* harmony import */ var _Services_AutoComplete_Response_model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(51); +/* harmony import */ var _Services_AutoComplete_Response_model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52); +/* harmony import */ var _Services_ProcessIsoCurve_Response_model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(64); +/* harmony import */ var _Services_Route_Response_model_RouteResponse__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(58); +/* harmony import */ var _Services_Route_Response_model_RouteInstruction__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(59); +/* harmony import */ var _Services_Config_Config__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3); +/* harmony import */ var _Protocols_XHR__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(10); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(22); +/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(8); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(23); +var _package_json__WEBPACK_IMPORTED_MODULE_13___namespace = /*#__PURE__*/__webpack_require__.t(23, 1); +/** +* Global variable Gp. +* +* @module Gp +* @alias Gp +* @description +* +* This is the global variable that is exposed in the browser environment. +* Content is composed of constructor, functions and properties... +* +* > {@link Gp.Error Error()} +* - .TYPE_SRVERR : "SERVICE_ERROR" +* - .TYPE_UNKERR : "UNKNOWN_ERROR" +* - .TYPE_USEERR : "USAGE_ERROR" +* +* > {@link module:Helper Helper} +* - .indent() +* - .normalyzeParameters() +* - .normalyzeUrl() +* +* > {@link module:XHR Protocols.XHR} +* - .call() +* +* > {@link module:Services Services (objects)} +* - .Alti +* - {@link Gp.Services.Alti.Elevation .Elevation()} +* - {@link Gp.Services.AltiResponse .AltiResponse()} +* - .AutoComplete +* - {@link Gp.Services.AutoComplete.SuggestedLocation .SuggestedLocation()} +* - {@link Gp.Services.AutoCompleteResponse .AutoCompleteResponse()} +* - {@link Gp.Services.Config .Config()} +* - {@link Gp.Services.DefaultUrl .DefaultUrl()} +* - {@link Gp.Services.GeocodeResponse .GeocodeResponse()} +* - {@link Gp.Services.GetConfigResponse .GetConfigResponse()} +* - {@link Gp.Services.IsoCurveResponse .IsoCurveResponse()} +* - .Route +* - {@link Gp.Services.Route.RouteInstruction .RouteInstruction()} +* - {@link Gp.Services.RouteResponse .RouteResponse()} +* +* > Services (factory) +* - {@link module:Services~autoComplete .autoComplete()} +* - {@link module:Services~geocode .geocode()} +* - {@link module:Services~getAltitude .getAltitude()} +* - {@link module:Services~getConfig .getConfig()} +* - {@link module:Services~isoCurve .isoCurve()} +* - {@link module:Services~reverseGeocode .reverseGeocode()} +* - {@link module:Services~route .route()} +* +* > servicesDate : "YYYY-MM-DD" +* +* > servicesVersion : "X.X.X" +* +*/ + + + + + + + + + + + + + + + + +/** Version */ +var servicesVersion = _package_json__WEBPACK_IMPORTED_MODULE_13__.version; +/** Publication date */ +var servicesDate = _package_json__WEBPACK_IMPORTED_MODULE_13__.date; + +// on declare les ns dans root global +var Gp = {}; +Gp.servicesVersion = servicesVersion; +Gp.servicesDate = servicesDate; + +// Export Protocols +Gp.Protocols = {}; +Gp.Protocols.XHR = _Protocols_XHR__WEBPACK_IMPORTED_MODULE_10__["default"]; +// Export services +Gp.Services = _Services_Services__WEBPACK_IMPORTED_MODULE_0__["default"]; +// Export DefaultUrls +Gp.Services.DefaultUrl = _Services_DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__["default"]; +// Export Alti +Gp.Services.AltiResponse = _Services_Alti_Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_2__["default"]; +Gp.Services.Alti = {}; +Gp.Services.Alti.Elevation = _Services_Alti_Response_model_Elevation__WEBPACK_IMPORTED_MODULE_3__["default"]; +// Export Autocomplete +Gp.Services.AutoCompleteResponse = _Services_AutoComplete_Response_model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_4__["default"]; +Gp.Services.AutoComplete = {}; +Gp.Services.AutoComplete.SuggestedLocation = _Services_AutoComplete_Response_model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_5__["default"]; +// Export Config +Gp.Services.Config = _Services_Config_Config__WEBPACK_IMPORTED_MODULE_9__["default"]; +// Export IsoCurve +Gp.Services.IsoCurveResponse = _Services_ProcessIsoCurve_Response_model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_6__["default"]; +// Export Route +Gp.Services.RouteResponse = _Services_Route_Response_model_RouteResponse__WEBPACK_IMPORTED_MODULE_7__["default"]; +Gp.Services.Route = {}; +Gp.Services.Route.RouteInstruction = _Services_Route_Response_model_RouteInstruction__WEBPACK_IMPORTED_MODULE_8__["default"]; +// Export Erreurs et Outils +Gp.Error = _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_11__["default"]; +Gp.Helper = _Utils_Helper__WEBPACK_IMPORTED_MODULE_12__["default"]; +/* harmony default export */ __webpack_exports__["default"] = (Gp); + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Config_Config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); +/* harmony import */ var _Alti_Alti__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26); +/* harmony import */ var _Geocode_Geocode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(40); +/* harmony import */ var _Geocode_ReverseGeocode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(48); +/* harmony import */ var _AutoComplete_AutoComplete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49); +/* harmony import */ var _Route_Route__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(53); +/* harmony import */ var _ProcessIsoCurve_ProcessIsoCurve__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60); +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "point|circle|bbox" }] */ + +/** +* Geoportal web services invocation namespace. +* +* @module Services +* @alias Gp.Services +*/ + + + + + + + +var Services = { + /** + * Access to Geoportal resources metadata availables with one ore several keys + * + * @method getConfig + * @param {Object} options - Options for function call. + * @param {String} [options.apiKey] - Access key(s) ("," as separator, no spaces) to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web} + * @param {String} [options.customConfigFile] - path to a local config file. Overload the apiKey parameter + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GetConfigResponse} object as a parameter except if "rawResponse" parameter is set to true : a String will be returned. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + */ + getConfig: function getConfig(options) { + var configService = new _Config_Config__WEBPACK_IMPORTED_MODULE_0__["default"](options); + configService.call(); + }, + /** + * Getting elevations in or along of one or several points on french territories using the [elevation services of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/alti.html}.
    + * Two use cases are availables :
    + * 1. getting elevations of the given points : don't use the options.sampling parameter ;
    + * 2. getting a regular set of elevations along the given points : use the options.sampling parameter. + * + * @method getAltitude + * @param {Object} options - Options for function call. + * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}. + * @param {Array.} options.positions - Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter. + * @param {Number} [options.sampling] - Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.
    + * If not used, only elevations of these positions will be returned. + * @param {Boolean} [options.zonly=false] - Set this parameter to true if you only want to have elevations returned without corresponding coordinates. + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AltiResponse} object as a parameter, except if "rawResponse" is set to true. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + * @param {String} [options.serverUrl=https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing. + * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true). + * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing. + * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing. + * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing. + * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {String} [options.contentType="application/xml"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing. + * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing. + * @param {String} [options.api='REST'] - What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing. + * @param {String} [options.outputFormat='xml'] - Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing. + */ + getAltitude: function getAltitude(options) { + var altiService = new _Alti_Alti__WEBPACK_IMPORTED_MODULE_1__["default"](options); + altiService.call(); + }, + /** + * Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the [geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage.html}. + * + * @example + * Gp.Services.geocode ({ + * apiKey : "carte", + * location : "73 avenue de Paris, Saint-Mandé", + * // traitement des resultats + * onSuccess : function (result) { + * console.log("found (x:"+result.position.x+", y:"+result.position.y+")") ; + * } + * }) ; + * + * + * @method geocode + * @param {Object} options - Options for function call. + * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}. + * @param {String} [options.index="StreetAddress"] - Geographical identifier type to search. Values currently availables are : "PositionOfInterest" for place names, "StreetAddress" for address search, "CadastralParcel" for Cadastral parcels search, "location" for a multi-index search on "StreetAddress" and "PositionOfInterest". Default is "StreetAddress". + * @param {String} options.query - Geographic identifier to locate. + * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given. + * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be "String". + *

    + * Properties availables for address search :
    + * "postalCode", "inseeCode" and "city". + *

    + * Properties availables for place names search :
    + * "postalCode", "inseeCode" and "type". + *

    + * Properties availables for cadastral parcels search :
    + * "codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille". + * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided. + * @param {Boolean} [options.returnTrueGeometry=false] - Set this parameter to true if you wish to have the true geometrie returned. + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if "rawResponse" is set to true. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + * @param {String} [options.serverUrl=http (s)://data.geopf.fr/geocodage/search] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing. + * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true). + * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing. + * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing. + * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing. + * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing. + */ + geocode: function geocode(options) { + var geocodeService = new _Geocode_Geocode__WEBPACK_IMPORTED_MODULE_2__["default"](options); + geocodeService.call(); + }, + /** + * Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the [reverse geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage-inverse.html}. + * + * @method reverseGeocode + * @param {Object} options - Options for function call. + * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}. + * @param {String} [options.index="StreetAddress"] - Geographical identifier type to search. Values currently availables are : "PositionOfInterest" for place names, "StreetAddress" for address search, "CadastralParcel" for Cadastral parcels search, "location" for a multi-index search on "StreetAddress" and "PositionOfInterest". Default is "StreetAddress". + * @param {Object} options.position - Reference position where to search geographical identifiers. + * @param {Float} options.position.lon - Longitude + * @param {Float} options.position.lat - Latitude + * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given. + * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be "String". + *

    + * Properties availables for address search :
    + * "postalCode", "inseeCode" and "city". + *

    + * Properties availables for place names search :
    + * "postalCode", "inseeCode" and "type". + *

    + * Properties availables for cadastral parcels search :
    + * "codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille". + * @param {Object} [options.searchGeometry] - Location where to perform the search. + * @param {String} options.searchGeometry.type - Geometry type (Point|Circle|Linestring|Polygon) + * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordinates + * @param {Float} [options.searchGeometry.radius] - Radius (only for type 'Circle') + * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided. + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if "rawResponse" is set to true. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/reverse] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing. + * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true). + * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing. + * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing. + * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing. + * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing. + */ + reverseGeocode: function reverseGeocode(options) { + var reverseGeocodeService = new _Geocode_ReverseGeocode__WEBPACK_IMPORTED_MODULE_3__["default"](options); + reverseGeocodeService.call(); + }, + /** + * Getting suggestions of probable places names or address based on uncomplete texts, using the [autocompletion service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/autocompletion.html} + * + * @method autoComplete + * @param {Object} options - Options for function call. + * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}. + * @param {String} options.text - Text input to complete. + * @param {Array.} [options.filterOptions.type = "StreetAddress"] - Suggestion types to provide : address ("StreetAddress") and/or place name ("PositionOfInterest"). + * @param {Array.} [options.filterOptions.territory] - Places where to limit the search of suggestions : "METROPOLE" (Corsica and metropolitan France), "DOMTOM" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31'] + * @param {Number} [options.maximumResponses = 10] - Maximum number of responses. + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AutoCompleteResponse} object as a parameter except if "rawResponse" is set to true. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/completion] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing. + * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true). + * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing. + * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing. + * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing. + * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {String} [options.contentType="application/xml"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing. + * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing. + */ + autoComplete: function autoComplete(options) { + var autoCompleteService = new _AutoComplete_AutoComplete__WEBPACK_IMPORTED_MODULE_4__["default"](options); + autoCompleteService.call(); + }, + /** + * Getting a route from one point to another using the [route service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/itineraires.html}. + * + * @method route + * @param {Object} options - Options for function call. + * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities. + * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}. + * @param {String} [options.routePreference = "fastest"] - Indicates the way to compute the route : "fastest" (time optimisation) or "shortest" (distance optimisation). Available values are in the GetCapabilities. + * @param {Gp.Point} options.startPoint - Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities. + * @param {Gp.Point} options.endPoint - End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities. + * @param {Array.} [options.viaPoints] - Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities. + * @param {String} [options.graph = "Voiture"] - User profile to use to compute the route : "Voiture" (using a vehicule) or "Pieton" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities. + * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features ("toll", "bridge" or "tunnel"). + * @param {Boolean} [options.geometryInInstructions = false] - Indicates if route geometry has to be also returned with route instructions. + * @param {Boolean} [options.provideBoundingBox = true] - Indicates if route instructions has to be localised with a BBOX in the response. + * @param {String} [options.distanceUnit = "m"] - The unit used to provide distances in the response ("meter" or "kilometer"). + * @param {String} [options.timeUnit = "second"] - The unit used to provide duration in the response ("standard", "second", "minute", "hour"). + * @param {Array.} [options.waysAttributes] - Way Attributes to add in the response. Available values are in the GetCapabilities. + * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities. + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.RouteResponse} object as a parameter except if "rawResponse" is set to true. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + * @param {String} [options.outputFormat='json'] - Output format ("json" or "xml") to use for underlying webService. Only use if you know what you are doing. + * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/itineraire] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing. + * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true). + * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing. + * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing. + * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing. + * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {String} [options.contentType="application/xml"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing. + * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing. + */ + route: function route(options) { + var routeService = new _Route_Route__WEBPACK_IMPORTED_MODULE_5__["default"](options); + routeService.call(); + }, + /** + * Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the [isochrone service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/isochrones.html}. + * + * @method isoCurve + * @param {Object} options - Options for function call. + * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}. + * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities. + * @param {Gp.Point} options.position - Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude). + * @param {String} [options.graph = "Voiture"] - User profile to use to compute the isoCurve : "Voiture" (using a vehicule) or "Pieton" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities. + * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features ("toll", "bridge" or "tunnel"). + * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities. + * @param {String} [options.method = "time"] - Computing method to use : "time" (using a duration as a constraint) or "distance" (using a distance as a constraint). Available values are in the GetCapabilities. + * @param {Float} options.time - Maximum duration (expressed in seconds) to use when options.method is set to "time". + * @param {Float} options.distance - Maximum distance (expressed in meters) to use when options.method is set to "distance". + * @param {Boolean} [options.reverse = false] - Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing. + * @param {String} [options.distanceUnit = "km"] - The unit used to provide distances in the response ("m" or "km"). + * @param {String} [options.timeUnit = "second"] - The unit used to provide duration in the response ("standard", "second", "minute", "hour"). + * @param {Boolean} [options.smoothing = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed. + * @param {Boolean} [options.holes = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent. + * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.IsoCurveResponse} object as a parameter except if "rawResponse" is set to true. + * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter. + * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled. + * @param {String} [options.outputFormat='json'] - Output format ("json") to use for underlying webService. Only use if you know what you are doing. + * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/isochrone] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing. + * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true). + * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing. + * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing. + * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing. + * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {String} [options.contentType="application/xml"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing. + * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing. + * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing. + */ + isoCurve: function isoCurve(options) { + var processIsoCurveService = new _ProcessIsoCurve_ProcessIsoCurve__WEBPACK_IMPORTED_MODULE_6__["default"](options); + processIsoCurveService.call(); + } +}; + +/** + * Point object. + * + * @namespace + * @alias Gp.Point + * + * @property {Float} x - Point abscissa + * @property {Float} y - Point ordinate + */ +var point = {}; + +/** + * Circle object. + * + * @namespace + * @alias Gp.Circle + * + * @property {Float} x - Circle center abscissa. + * @property {Float} y - Circle center ordinate. + * @property {Float} radius - Circle radius. + */ +var circle = {}; + +/** + * Bounding box object, expressed with four coordinates. + * + * @namespace + * @alias Gp.BBox + * + * @property {Float} left - minimum abscissa + * @property {Float} right - maximum abscissa + * @property {Float} bottom - minimum ordinate + * @property {Float} top - maximum ordinate + */ +var bbox = {}; +/* harmony default export */ __webpack_exports__["default"] = (Services); + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7); +/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(24); +/* harmony import */ var _ConfigInterface__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(25); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + +/** + * @classdesc + * + * Recupération de la configuration de clés Géoportail sous forme de JSON + * + * @constructor + * @extends {Gp.Services.CommonService} + * @alias Gp.Services.Config + * @param {Object} options - options spécifiques au service (+ les options heritées) + * @param {Sting} options.apiKey - clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule + * @param {Boolean} [options.sync=false] - force le mode synchrone + * @param {String} options.customConfigFile - chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey. + * @see Gp.Services.GetConfigInterface + * + * @example + * var options = { + * apiKey : "cartes,ortho", + * sync : false, + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * }; + * + */ +function Config(options) { + if (!(this instanceof Config)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("CLASS_CONSTRUCTOR", "Config")); + } + + /** + * Nom de la classe (heritage) + */ + this.CLASSNAME = "Config"; + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("Gp.Config"); + this.logger.trace("[Constructeur Config (options)]"); + + // ##################### + // analyse des options + // ##################### + + // gestion du callback onSuccess + var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === "function"); + if (!bOnSuccess) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "onSuccess()")); + } + if (!options.apiKey && !options.customConfigFile) { + // si pas de thème spécifié, on récupère toutes les ressources possibles dans l'objet Config + options.apiKey = "full"; + } + this.options = {}; + this.options.onSuccess = options.onSuccess; + this.options.onFailure = options.onFailure; + + // mode sync + this.options.sync = options.sync || false; + + // gestion d'un tableau d'url des fichiers de configuration + this.options.listConfigUrls = options.customConfigFile ? [options.customConfigFile] : !Array.isArray(options.apiKey) ? _DefaultUrlService__WEBPACK_IMPORTED_MODULE_3__["default"].Config.url(options.apiKey.split(",")) : _DefaultUrlService__WEBPACK_IMPORTED_MODULE_3__["default"].Config.url(options.apiKey); +} + +/** + * @lends module:Config# + */ +Config.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_2__["default"].prototype, { + // todo + // getter/setter +}); + +/** + * Constructeur (alias) + */ +Config.prototype.constructor = Config; + +/** + * Création de la requête + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + * @overload + */ +Config.prototype.buildRequest = function (error, success) { + // liste des urls des fichiers de configuration en JSON + this.listConfigUrls = this.options.listConfigUrls; + if (!this.listConfigUrls) { + error.call(this, new Error("url by default not found !")); + return; + } + + // INFO : + // il n'y a pas de construction de requête, + // on passe directement à l'appel des requêtes + success.call(this, this.listConfigUrls); +}; + +/** + * Récupération des configuration + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + * @overload + */ +Config.prototype.callService = function (error, success) { + if (this.options.sync) { + __callServiceSync.call(this, error, success); + } else { + __callService.call(this, error, success); + } +}; + +/** + * Requêtes en mode asynchrone + * + * @param {*} error + * @param {*} success + * @private + */ +var __callService = function __callService(error, success) { + var _this = this; + // liste des resultats au format JSON + this.listConfigResults = []; + + // test on env. nodejs or browser + var Fetch = null; + if (typeof window === "undefined") { + var nodefetch = __webpack_require__(14); + Fetch = nodefetch; + } else { + Fetch = window.fetch; + } + + // the factory of fetch ! + var fetchFactory = function fetchFactory(url) { + return Fetch(url, { + credentials: "same-origin" + }).then(function (response) { + if (response.ok) { + return response.json().then(function (json) { + // TODO : + // tester le contenu ! + return json; + })["catch"](function (error) { + throw new Error("Exception Json : " + error); + }); + } else { + throw new Error("Exception HTTP : " + response.status + " (status code) !"); + } + })["catch"](function (error) { + return new Promise(function (resolve, reject) { + // eslint-disable-line no-unused-vars + reject(error); + }); + }); + }; + + // construction des promises fetch + var promises = []; + for (var index = 0; index < this.listConfigUrls.length; index++) { + var url = this.listConfigUrls[index]; + promises.push(fetchFactory(url)); + } + Promise.all(promises).then(function (results) { + if (!results) { + throw new Error("results config empty !?"); + } + results.forEach(function (result) { + // TODO : + // verification des resultats + _this.listConfigResults.push(result); + }); + }).then(function () { + success.call(_this, _this.listConfigResults); + })["catch"](function (e) { + // TODO : + // construction d'un message + error.call(_this, e); + }); +}; + +/** + * Requêtes en mode synchrone + * + * @param {*} error + * @param {*} success + * @private + */ +var __callServiceSync = function __callServiceSync(error, success) { + // liste des resultats au format JSON + this.listConfigResults = []; + + // FIXME : + // boucle synchrone ! + for (var i = 0; i < this.listConfigUrls.length; i++) { + var url = this.listConfigUrls[i]; + // TODO : + // prévoir le CORS, headers, ... + var request = new XMLHttpRequest(); + request.open("GET", url, false); + request.send(null); + if (request.status === 200) { + // TODO : + // tester la reponse ! + var response = JSON.parse(request.responseText); + this.listConfigResults.push(response); + } + } + // callback + if (this.listConfigResults.length !== 0) { + success.call(this, this.listConfigResults); + } else { + error.call(this, new Error("...")); + } +}; + +/** + * Analyse et mise en forme de la réponse en fusionnant les configurations + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + * @overload + */ +Config.prototype.analyzeResponse = function (error, success) { + // fonction de merge des objects JSON + var mergeConfig = function mergeConfig(objects) { + // objet fusion des couches + var allLayersConfig = {}; + // objet fusion des clés + var allKeysConfig = {}; + // objet fusion des TMS + var allTMSConfig = {}; + + // on fusionne les résultat + for (var i = 0; i < objects.length; i++) { + if (!objects[i].generalOptions || !objects[i].layers) { + return; + } + allKeysConfig = _objectSpread(_objectSpread({}, allKeysConfig), objects[i].generalOptions.apiKeys); + allLayersConfig = _objectSpread(_objectSpread({}, allLayersConfig), objects[i].layers); + allTMSConfig = _objectSpread(_objectSpread({}, allTMSConfig), objects[i].tileMatrixSets); + } + var mergedConfig = { + generalOptions: { + apiKeys: allKeysConfig + }, + layers: allLayersConfig, + tileMatrixSets: allTMSConfig + }; + return mergedConfig; + }; + + // fusion des configurations JSON + var ConfigJSON = mergeConfig(this.listConfigResults); + if (!ConfigJSON) { + error.call(this, new Error("configuration structure not conforme !")); + return; + } + + // creation des interfaces + var IConfig = new _ConfigInterface__WEBPACK_IMPORTED_MODULE_4__["default"](); + // ajout des interfaces avec la configuration JSON + Object.assign(IConfig, ConfigJSON); + + // définition de la variable globale Gp.Config + var scope = typeof window !== "undefined" ? window : {}; + if (!scope.Gp) { + scope.Gp = {}; + } + + // enregistrement + if (scope.Gp.Config) { + Object.assign(scope.Gp.Config, IConfig); + // dans le doute..., ceinture et bretelles ! + for (var property in IConfig) { + scope.Gp.Config[property] = IConfig[property]; + } + } else { + scope.Gp.Config = IConfig; + } + + // INFO : + // il n'y a pas d'analyse des résultats, + // on passe directement à l'appel de la callback utilisateur + success.call(this, scope.Gp.Config); +}; +/* harmony default export */ __webpack_exports__["default"] = (Config); + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var loglevel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); +/* harmony import */ var loglevel__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(loglevel__WEBPACK_IMPORTED_MODULE_0__); + +var LoggerByDefault = { + /** + * logger statique + * + * @static + * @param {String} name - nom du logger + * @returns {Object} retourne un logger + */ + getLogger: function getLogger(name) { + // Substitute global constants configured at compile time + // cf. webpack.config.js + // on définit process si non défini dans l'environnement + // eslint-disable-next-line no-use-before-define + if (typeof process === "undefined") { + var process = {}; + process.env = { + VERBOSE: false + }; + } + process.env.VERBOSE ? loglevel__WEBPACK_IMPORTED_MODULE_0__["enableAll"]() : loglevel__WEBPACK_IMPORTED_MODULE_0__["disableAll"](); + var logname = name || "default"; + return loglevel__WEBPACK_IMPORTED_MODULE_0__["getLogger"](logname); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (LoggerByDefault); + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/* +* loglevel - https://github.com/pimterry/loglevel +* +* Copyright (c) 2013 Tim Perry +* Licensed under the MIT license. +*/ +(function (root, definition) { + "use strict"; + if (true) { + !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : + __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +}(this, function () { + "use strict"; + + // Slightly dubious tricks to cut down minimized file size + var noop = function() {}; + var undefinedType = "undefined"; + var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && ( + /Trident\/|MSIE /.test(window.navigator.userAgent) + ); + + var logMethods = [ + "trace", + "debug", + "info", + "warn", + "error" + ]; + + var _loggersByName = {}; + var defaultLogger = null; + + // Cross-browser bind equivalent that works at least back to IE6 + function bindMethod(obj, methodName) { + var method = obj[methodName]; + if (typeof method.bind === 'function') { + return method.bind(obj); + } else { + try { + return Function.prototype.bind.call(method, obj); + } catch (e) { + // Missing bind shim or IE8 + Modernizr, fallback to wrapping + return function() { + return Function.prototype.apply.apply(method, [obj, arguments]); + }; + } + } + } + + // Trace() doesn't print the message in IE, so for that case we need to wrap it + function traceForIE() { + if (console.log) { + if (console.log.apply) { + console.log.apply(console, arguments); + } else { + // In old IE, native console methods themselves don't have apply(). + Function.prototype.apply.apply(console.log, [console, arguments]); + } + } + if (console.trace) console.trace(); + } + + // Build the best logging method possible for this env + // Wherever possible we want to bind, not wrap, to preserve stack traces + function realMethod(methodName) { + if (methodName === 'debug') { + methodName = 'log'; + } + + if (typeof console === undefinedType) { + return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives + } else if (methodName === 'trace' && isIE) { + return traceForIE; + } else if (console[methodName] !== undefined) { + return bindMethod(console, methodName); + } else if (console.log !== undefined) { + return bindMethod(console, 'log'); + } else { + return noop; + } + } + + // These private functions always need `this` to be set properly + + function replaceLoggingMethods() { + /*jshint validthis:true */ + var level = this.getLevel(); + + // Replace the actual methods. + for (var i = 0; i < logMethods.length; i++) { + var methodName = logMethods[i]; + this[methodName] = (i < level) ? + noop : + this.methodFactory(methodName, level, this.name); + } + + // Define log.log as an alias for log.debug + this.log = this.debug; + + // Return any important warnings. + if (typeof console === undefinedType && level < this.levels.SILENT) { + return "No console available for logging"; + } + } + + // In old IE versions, the console isn't present until you first open it. + // We build realMethod() replacements here that regenerate logging methods + function enableLoggingWhenConsoleArrives(methodName) { + return function () { + if (typeof console !== undefinedType) { + replaceLoggingMethods.call(this); + this[methodName].apply(this, arguments); + } + }; + } + + // By default, we use closely bound real methods wherever possible, and + // otherwise we wait for a console to appear, and then try again. + function defaultMethodFactory(methodName, _level, _loggerName) { + /*jshint validthis:true */ + return realMethod(methodName) || + enableLoggingWhenConsoleArrives.apply(this, arguments); + } + + function Logger(name, factory) { + // Private instance variables. + var self = this; + /** + * The level inherited from a parent logger (or a global default). We + * cache this here rather than delegating to the parent so that it stays + * in sync with the actual logging methods that we have installed (the + * parent could change levels but we might not have rebuilt the loggers + * in this child yet). + * @type {number} + */ + var inheritedLevel; + /** + * The default level for this logger, if any. If set, this overrides + * `inheritedLevel`. + * @type {number|null} + */ + var defaultLevel; + /** + * A user-specific level for this logger. If set, this overrides + * `defaultLevel`. + * @type {number|null} + */ + var userLevel; + + var storageKey = "loglevel"; + if (typeof name === "string") { + storageKey += ":" + name; + } else if (typeof name === "symbol") { + storageKey = undefined; + } + + function persistLevelIfPossible(levelNum) { + var levelName = (logMethods[levelNum] || 'silent').toUpperCase(); + + if (typeof window === undefinedType || !storageKey) return; + + // Use localStorage if available + try { + window.localStorage[storageKey] = levelName; + return; + } catch (ignore) {} + + // Use session cookie as fallback + try { + window.document.cookie = + encodeURIComponent(storageKey) + "=" + levelName + ";"; + } catch (ignore) {} + } + + function getPersistedLevel() { + var storedLevel; + + if (typeof window === undefinedType || !storageKey) return; + + try { + storedLevel = window.localStorage[storageKey]; + } catch (ignore) {} + + // Fallback to cookies if local storage gives us nothing + if (typeof storedLevel === undefinedType) { + try { + var cookie = window.document.cookie; + var cookieName = encodeURIComponent(storageKey); + var location = cookie.indexOf(cookieName + "="); + if (location !== -1) { + storedLevel = /^([^;]+)/.exec( + cookie.slice(location + cookieName.length + 1) + )[1]; + } + } catch (ignore) {} + } + + // If the stored level is not valid, treat it as if nothing was stored. + if (self.levels[storedLevel] === undefined) { + storedLevel = undefined; + } + + return storedLevel; + } + + function clearPersistedLevel() { + if (typeof window === undefinedType || !storageKey) return; + + // Use localStorage if available + try { + window.localStorage.removeItem(storageKey); + } catch (ignore) {} + + // Use session cookie as fallback + try { + window.document.cookie = + encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC"; + } catch (ignore) {} + } + + function normalizeLevel(input) { + var level = input; + if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) { + level = self.levels[level.toUpperCase()]; + } + if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { + return level; + } else { + throw new TypeError("log.setLevel() called with invalid level: " + input); + } + } + + /* + * + * Public logger API - see https://github.com/pimterry/loglevel for details + * + */ + + self.name = name; + + self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, + "ERROR": 4, "SILENT": 5}; + + self.methodFactory = factory || defaultMethodFactory; + + self.getLevel = function () { + if (userLevel != null) { + return userLevel; + } else if (defaultLevel != null) { + return defaultLevel; + } else { + return inheritedLevel; + } + }; + + self.setLevel = function (level, persist) { + userLevel = normalizeLevel(level); + if (persist !== false) { // defaults to true + persistLevelIfPossible(userLevel); + } + + // NOTE: in v2, this should call rebuild(), which updates children. + return replaceLoggingMethods.call(self); + }; + + self.setDefaultLevel = function (level) { + defaultLevel = normalizeLevel(level); + if (!getPersistedLevel()) { + self.setLevel(level, false); + } + }; + + self.resetLevel = function () { + userLevel = null; + clearPersistedLevel(); + replaceLoggingMethods.call(self); + }; + + self.enableAll = function(persist) { + self.setLevel(self.levels.TRACE, persist); + }; + + self.disableAll = function(persist) { + self.setLevel(self.levels.SILENT, persist); + }; + + self.rebuild = function () { + if (defaultLogger !== self) { + inheritedLevel = normalizeLevel(defaultLogger.getLevel()); + } + replaceLoggingMethods.call(self); + + if (defaultLogger === self) { + for (var childName in _loggersByName) { + _loggersByName[childName].rebuild(); + } + } + }; + + // Initialize all the internal levels. + inheritedLevel = normalizeLevel( + defaultLogger ? defaultLogger.getLevel() : "WARN" + ); + var initialLevel = getPersistedLevel(); + if (initialLevel != null) { + userLevel = normalizeLevel(initialLevel); + } + replaceLoggingMethods.call(self); + } + + /* + * + * Top-level API + * + */ + + defaultLogger = new Logger(); + + defaultLogger.getLogger = function getLogger(name) { + if ((typeof name !== "symbol" && typeof name !== "string") || name === "") { + throw new TypeError("You must supply a name when creating a logger."); + } + + var logger = _loggersByName[name]; + if (!logger) { + logger = _loggersByName[name] = new Logger( + name, + defaultLogger.methodFactory + ); + } + return logger; + }; + + // Grab the current global log variable in case of overwrite + var _log = (typeof window !== undefinedType) ? window.log : undefined; + defaultLogger.noConflict = function() { + if (typeof window !== undefinedType && + window.log === defaultLogger) { + window.log = _log; + } + + return defaultLogger; + }; + + defaultLogger.getLoggers = function getLoggers() { + return _loggersByName; + }; + + // ES6 default export, for compatibility + defaultLogger['default'] = defaultLogger; + + return defaultLogger; +})); + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Classe de gestion des erreurs qui permer d'associer un message d'erreur à l'exception lancée. + * + * @example + * MessagesResources.getMessage("ERROR_PARAM_MISSING", "x", "y", "z"))); + * // --> output : Parameter(s) 'x - y - z' missing + * + * @module MessagesResources + * @alias Gp.Utils.MessagesResources + * @private + */ +var MessagesResources = { + // Paramètres + PARAM_MISSING: "Parameter(s) '%var%' missing", + PARAM_EMPTY: "Parameter(s) '%var%' empty", + PARAM_TYPE: "Wrong type(s) for parameter(s) '%var%'", + PARAM_FORMAT: "Parameter(s) '%var%' not correctly formatted", + PARAM_NOT_SUPPORT: "Value(s) for parameter(s) '%var%' not supported", + PARAM_NOT_SUPPORT_NODEJS: "Value(s) for parameter(s) '%var%' not supported to NodeJS", + PARAM_UNKNOWN: "Value(s) for parameter(s) '%var%' unknown", + // Services + // Requête + SERVICE_REQUEST_BUILD: "An error occurred during the request building of the service", + SERVICE_REQUEST_EMPTY: "The request sent to the service is empty", + // Réponse + SERVICE_RESPONSE_EXCEPTION: "The service returned an exception : '%var%'", + SERVICE_RESPONSE_EXCEPTION_2: "The service returned an exception", + SERVICE_RESPONSE_ANALYSE: "An error occurred while parsing the response '%var%' of the service", + SERVICE_RESPONSE_ANALYSE_2: "An unknown error occurred while parsing the response", + SERVICE_RESPONSE_EMPTY: "The response of the service is empty", + SERVICE_RESPONSE_EMPTY_2: "The response from the service could not be analyzed or is empty", + SERVICE_RESPONSE_FORMAT: "The format of the service response is not supported (handled format(s) : '%var%')", + SERVICE_RESPONSE_FORMAT_2: "The format of the service response is not supported", + SERVICE_RESPONSE_FORMAT_3: "No suggestion matching the search", + // Classes + CLASS_CONSTRUCTOR: "'%var%' constructor cannot be called as a function.", + /** + * Fonction qui va retourner le message d'erreur associé à la clé donnée + * + * @method getMessage + * @param {String} clef - Clef de l'erreur (ex : ERROR_PARAM) + * @param {String[]} parametres - Paramètres/variables concernés par le message d'erreur associé à la clef donnée + * @return {String} message - String contenant le message de l'exception + */ + getMessage: function getMessage(clef, parametres) { + // param de la fonction uniquement pour la documentation... + + if (Object.keys(arguments).length === 0) { + return "Message indefined !"; + } + var params = Array.prototype.slice.call(arguments); + var key = params.shift(); + var args = params; + var message = this[key]; + try { + if (Array.isArray(args) && args.length > 0) { + message = message.replace("%var%", args.join(" - ")); + } else { + message = message.replace("%var%", "%var% (not specified)"); + } + } catch (e) { + // error de string.replace() + } + return message; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (MessagesResources); + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6); +/* harmony import */ var _Protocols_Protocol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23); +var _package_json__WEBPACK_IMPORTED_MODULE_5___namespace = /*#__PURE__*/__webpack_require__.t(23, 1); + + + + + +// import DefaultUrlService from "./DefaultUrlService"; +// package.json (extract version) + + +/** + * @classdesc + * Composant Service + * + * @constructor + * @alias Gp.Services.CommonService + * @param {Object} options - options communes à tous les services + * + * @param {String} [options.serverUrl] - URL d'accès au service. Par défaut "https://data.geopf.fr/SERVICE/". + * Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès. + * Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré. + * + * @param {String} [options.protocol] - Le protocole à utiliser pour récupérer les informations du service : + * peut valoir 'JSONP' ou 'XHR'. + * Par défaut, c'est le protocole XHR qui sera utilisé. + * Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR). + * + * @param {Boolean} [options.ssl] - Indique si l'on souhaite intérroger les services en https. + * Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS). + * Sur un navigateur, le protocole est automatiquement extrait de l'url du site... + * Par défaut, on utilise le protocole http (ssl=false). + * + * @param {String} [options.proxyURL] - Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR. + * Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP. + * + * @param {String} [options.callbackSuffix] - Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP. + * Par défaut, la fonction de callback portera un nom du type "callback"+ID, où ID est soit un identifiant unique généré à chaque requête, + * soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix="_2", la fonction sera "callback_2 ()". + * Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu + * Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'. + * + * @param {String} [options.httpMethod] - La méthode HTTP + * à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'. + * Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET. + * Par défaut, c'est la méthode GET qui est utilisée. + * + * @param {String} [options.contentType] - Content-Type de la requete + * à utiliser dans le cas d'une requête XHR en mode POST. + * Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET. + * Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type. + * + * @param {Number} [options.timeOut] - Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête). + * Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0). + * + * @param {Boolean} [options.rawResponse] - Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée. + * (Cf. paramètre « onSuccess » pour plus de détails). + * + * @param {Function} [options.onSuccess] - Fonction appelée lorsque le service répond correctement à la requête + * (code HTTP 200, sans message d'erreur). + * Cette fonction prend en paramètre la réponse du service, + * soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ; + * soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ». + * + * @param {Function} [options.onFailure] - Fonction appelée lorsque le service ne répond pas correctement + * (code HTTP de retour différent de 200 ou pas de réponse). + * + * @param {Function} [options.onBeforeParse] - Fonction appelée avant le parsing de la réponse + * Permet de modifier la réponse avant parsing et la fonction doit retourner une String. + * Cette fonction prend en paramètre la réponse telle que renvoyée par le service + * (cad au format json ou xml). + * Pour le JSONP, si le paramètre "rawResponse" a été précisé avec la valeur "true", + * la fonction prend en paramètre un Object JavaScript contenant la réponse XML. + * + * @example + * var options = { + * serverUrl : 'http://localhost/service/', + * protocol : 'JSONP', // JSONP|XHR + * ssl : false, + * proxyURL : null, + * callbackName : null, + * httpMethod : 'GET', // GET|POST + * timeOut : 10000, // ms + * rawResponse : false, // true|false + * scope : null, // this + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * onBeforeParse : function (rawResponse) {} + * }; + */ +function CommonService(options) { + if (!(this instanceof CommonService)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__["default"].getMessage("CLASS_CONSTRUCTOR")); + } + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("CommonService"); + this.logger.trace("[Constructeur CommonService (options)]"); + + // ##################### + // récupération des options par défaut pour les paramètres optionnels + // ##################### + + /** + * Options du service + * @type {Object} + */ + this.options = { + // protocol : "JSONP", + protocol: "XHR", + ssl: true, + proxyURL: "", + // callbackName : "", + callbackSuffix: null, + httpMethod: "GET", + timeOut: 0, + rawResponse: false, + scope: this, + /** + * callback par defaut pour la reponse + * @param {Object} response - response + * @private + */ + onSuccess: function onSuccess(response) { + console.log("onSuccess - la reponse est la suivante : ", response); + }, + /** + * callback par defaut pour les erreurs + * @param {Object} error - error + * @private + */ + onFailure: function onFailure(error) { + if (error.status === 200 || !error.status) { + console.log("onFailure : ", error.message); + } else { + console.log("onFailure - Erreur (", error.status, ") : ", error.message); + } + } + }; + + // et on ajoute les options en paramètre aux options par défaut + for (var opt in options) { + if (options.hasOwnProperty(opt)) { + this.options[opt] = options[opt]; + } + } + + // ##################### + // analyse des options + // ##################### + + // modification de la fonction de callback onSuccess dans le cas où la réponse brute est demandée + if (this.options.rawResponse && !this.options.onSuccess) { + /** + * callback par defaut pour la reponse + * @param {Object} response - response + * @private + */ + this.options.onSuccess = function (response) { + console.log("onSuccess - la réponse brute du service est la suivante : ", response); + }; + } + + // gestion du callback onSuccess + var bOnSuccess = !!(this.options.onSuccess !== null && typeof this.options.onSuccess === "function"); + if (!bOnSuccess) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__["default"].getMessage("PARAM_MISSING", "onSuccess()")); + } + + // gestion de la methode HTTP + this.options.httpMethod = typeof options.httpMethod === "string" ? options.httpMethod.toUpperCase() : "GET"; + switch (this.options.httpMethod) { + case "POST": + case "GET": + break; + case "PUT": + case "DELETE": + case "HEAD": + case "OPTIONS": + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__["default"].getMessage("PARAM_NOT_SUPPORT", "httpMethod")); + default: + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__["default"].getMessage("PARAM_UNKNOWN", "httpMethod")); + } + + // gestion du protocole + // this.options.protocol = (typeof options.protocol === "string" ) ? options.protocol.toUpperCase() : "JSONP"; + this.options.protocol = typeof options.protocol === "string" ? options.protocol.toUpperCase() : "XHR"; + switch (this.options.protocol) { + case "JSONP": + case "XHR": + break; + default: + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__["default"].getMessage("PARAM_UNKNOWN", "protocol")); + } + + // on determine l'environnement d'execution : browser ou non ? + // et on lance une exception sur l'utilisation du protocole JSONP pour nodeJS... + if (typeof window === "undefined" && this.options.protocol === "JSONP") { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_2__["default"].getMessage("PARAM_NOT_SUPPORT_NODEJS", "protocol=JSONP (instead use XHR)")); + } + + // le protocole JSONP ne fonctionne qu'en GET. + if (this.options.protocol === "JSONP") { + this.options.httpMethod = "GET"; + } + + // gestion du cache + this.options.nocache = options.nocache || false; + + // ##################### + // attributs d'instances + // ##################### + + /** + * Format de réponse du service + */ + this.options.outputFormat = null; + /** + * Requête envoyée au service + */ + this.request = null; + /** + * Reponse du service + */ + this.response = null; +} + +/** + * @lends module:CommonService + */ +CommonService.prototype = { + /* + * Constructeur (alias) + */ + constructor: CommonService, + /** + * Appel du service Géoportail + */ + call: function call() { + /* jshint validthis : true */ + this.logger.trace("CommonService::call ()"); + var context = this; + /** fonction d'execution */ + function run() { + this.logger.trace("CommonService::run ()"); + this.buildRequest.call(context, onError, onBuildRequest); + } + run.call(context); + + // callback de fin de construction de la requête + function onBuildRequest(result) { + this.logger.trace("CommonService::onBuildRequest : ", result); + this.callService.call(context, onError, onCallService); + } + + // callback de fin d'appel au service + function onCallService(result) { + this.logger.trace("CommonService::onCallService : ", result); + this.analyzeResponse.call(context, onError, onAnalyzeResponse); + } + + // callback de fin de lecture de la reponse + function onAnalyzeResponse(result) { + this.logger.trace("CommonService::onAnalyzeResponse : ", result); + if (result) { + this.options.onSuccess.call(this, result); + } else { + return onError.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"]("Analyse de la reponse en échec !?")); + } + } + + // callback de gestion des erreurs : renvoit un objet de type ErrorService + function onError(error) { + this.logger.trace("CommonService::onError()"); + // error : l'objet est du type ErrorService ou Error + var e = error; + if (!(e instanceof _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"])) { + e = new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"](error.message); + } + this.options.onFailure.call(this, e); + } + }, + /** + * Création de la requête + * @param {Function} error - callback + * @param {Function} success - callback + */ + buildRequest: function buildRequest(error, success) { + // INFO + this.logger.error("overwritten method !"); + // retourne l'objet 'this.request' + if (error) { + error.call(this, "This method must be overwritten !"); + } + success.call(this, "This method must be overwritten !"); + }, + /** + * Appel du service + * @param {Function} error - callback + * @param {Function} success - callback + */ + callService: function callService(error, success) { + // INFO + // retourne l'objet 'this.response' + + // NOTES + // Pour le mode XHR, on recupère une reponse sous forme d'un json ou xml (#document). + // Pour le mode JSONP, on a toujours un objet JSON mais sous 2 formes : + // - natif + // - XML encapsulé : + // {http : {status:200, error:null},xml :'réponse du service'} + // {http : {status:400, error:'reponse du service'},xml :null} + // En XHR, la reponse est directement sauvegardée dans 'this.response'. + // Par contre, en JSONP, on doit analyser la reponse (status ou non vide), + // et ne renvoyer que le contenu (xml ou l'objet) + + // gestion de la proxification du service + var strUrlProxified = null; + var strData = this.request; + + // a t on mis en place un proxy ? + // la proxyfication est valable uniquement en mode XHR ! + var bUrlProxified = !!(this.options.proxyURL && this.options.protocol === "XHR"); + + // rajout de l'option gpbibaccess + // INFO : acces au numero de version de package.conf aprés compilation ! + var requestMetaOptions = { + "gp-access-lib": _package_json__WEBPACK_IMPORTED_MODULE_5__.version + }; + if (this.options.apiKey) { + requestMetaOptions.apiKey = this.options.apiKey; + } + this.options.serverUrl = _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__["default"].normalyzeUrl(this.options.serverUrl, requestMetaOptions, false); + + // si le proxy est renseigné, on proxifie l'url du service + if (bUrlProxified) { + if (this.options.httpMethod === "GET") { + strUrlProxified = this.options.proxyURL + _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__["default"].normalyzeUrl(this.options.serverUrl, this.request, true); + strData = null; + } + if (this.options.httpMethod === "POST") { + strUrlProxified = this.options.proxyURL + _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__["default"].normalyzeUrl(this.options.serverUrl, null, true); + strData = this.request; + } + } + + // contexte du composant spécifique ! + var self = this; + var options = { + url: strUrlProxified || this.options.serverUrl, + method: this.options.httpMethod, + protocol: this.options.protocol, + timeOut: this.options.timeOut || 0, + format: this.options.outputFormat, + // ceci declenche le parsing de la reponse du service, mais on souhaite toujours une reponse brute (string) ! + nocache: this.options.nocache || false, + // ceci permet d'ajouter un timestamp dans la requête + wrap: this.options.protocol !== "XHR", + // ceci declenche l'encapsulation de la reponse XML du service dans du JSON, mais pas en mode XHR ! + callbackSuffix: this.options.callbackSuffix, + // callbackName : this.options.callbackName || null, + data: strData, + headers: null, + // TODO... + content: this.options.contentType || "application/xml", + scope: this.options.scope || this, + // callback de reponse + onResponse: function onResponse(response) { + self.logger.trace("callService::onResponse()"); + + // le contenu de la reponse à renvoyer ! + var content = null; + + // XHR : on renvoie toujours la reponse brute du service (json ou xml) + // au parser du composant... + if (self.options.protocol === "XHR") { + self.logger.trace("Response XHR", response); + content = response; // par defaut, la reponse du service ! + } + + // JSONP : on pre-analyse la reponse brute du service (encapsuler ou pas) + // avant de l'envoyer au parser du composant... + if (self.options.protocol === "JSONP") { + self.logger.trace("Response JSON", response); + if (response) { + if (response.http) { + // reponse encapsulée : + // ex. reponse du service en xml + // > {http : {status:200, error:null},xml :'réponse du service'} + if (response.http.status !== 200) { + error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"]({ + status: response.http.status, + message: response.http.error, + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"].TYPE_SRVERR + })); + return; + } else { + content = response.xml; // par defaut ! + if (self.options.rawResponse) { + content = response; + } + } + } else { + // reponse non encapsulée : + // ex. reponse du service en json ou xml + content = response; + } + } else { + error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"]("Le contenu de la reponse est vide !?")); + return; + } + } + + // si on souhaite parser la reponse du service + if (typeof self.options.onBeforeParse === "function") { + var newResponse = self.options.onBeforeParse(content); + if (typeof newResponse === "string") { + // la reponse parsée par l'utilisateur est retournée sous + // forme de string ! + content = newResponse; + } + } + // sauvegarde de la reponse dans l'objet parent (CommonService) + self.response = content; + // on renvoie la reponse... + success.call(self, content); + }, + // callback des erreurs + onFailure: function onFailure(e) { + self.logger.trace("callService::onFailure()"); + // on est forcement sur une erreur levée par un service ! + e.type = _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"].TYPE_SRVERR; + error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"](e)); + }, + // callback de timeOut + onTimeOut: function onTimeOut() { + self.logger.trace("callService::onTimeOut()"); + error.call(self, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_4__["default"]("TimeOut!")); + } + }; + _Protocols_Protocol__WEBPACK_IMPORTED_MODULE_3__["default"].send(options); + }, + /** + * Analyse de la réponse + * @param {Function} error - callback + * @param {Function} success - callback + */ + analyzeResponse: function analyzeResponse(error, success) { + // INFO + this.logger.error("overwritten method !"); + // retourne l'objet spécifique au type de composant (json) + if (error) { + error.call(this, "This method must be overwritten !"); + } + success.call(this, "This method must be overwritten !"); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (CommonService); + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Classe utilitaire + * + * @module Helper + * @alias Gp.Helper + */ +var Helper = { + /** + * concatenation des parametres key/value dans les urls + * + * @method normalyzeParameters + * @static + * @param {Object} params - tableau de clef/valeur + * + * @example + * Gp.Utils.Helper.normalyzeParameters ({ + * key1:value1, + * key2:value2, + * key3:value3 + * }); + * // out : "key1=value1&key2=value2&key3=value3" + * + * @returns {String} retourne les paramètres concaténés + */ + normalyzeParameters: function normalyzeParameters(params) { + var myParams = null; + if (params) { + var tabParams = []; + for (var key in params) { + if (params.hasOwnProperty(key)) { + var value = params[key]; + if (!value) { + value = ""; + } + tabParams.push(key + "=" + value); + } + } + myParams = tabParams.join("&"); + } + return myParams; + }, + /** + * Concaténation et encodage des urls. + * + * @method normalyzeUrl + * @static + * @param {String} url - url + * @param {Object|String} params - tableau de clef/valeur ou string + * @param {Boolean} encode - true|false, false par defaut + * + * @example + * Gp.Utils.Helper.normalyzeUrl (url, { + * key1:value1, + * key2=:value2, + * key3:value3 + * }); + * // out : "url?key1=value1&key2=value2&key3=value3" + * + * @returns {String} retourne une url normalisée + */ + normalyzeUrl: function normalyzeUrl(url, params, encode) { + var myUrl = url; + if (url) { + if (url.split("?").length - 1 >= 2) { + // S'il y a plusieurs "?" dans l'URL, on garde le premier et on remplace les autres par des & + var firstOccuranceIndex = url.search(/\?/) + 1; + myUrl = url.substring(0, firstOccuranceIndex) + url.slice(firstOccuranceIndex).replace(/\?/g, "&"); + } + var k = url.indexOf("?"); + if (k === -1) { + // pas de ? et KVP + myUrl += "?"; + } + if (k !== -1 && k !== url.length - 1) { + // KVP + myUrl += "&"; + } + } + if (params) { + if (typeof params === "string") { + params = params.replace("?", ""); + myUrl += params; + } else { + myUrl += this.normalyzeParameters(params); + } + } + if (encode) { + // FIXME bonne idée ? + myUrl = encodeURIComponent(myUrl); + } + return myUrl; + }, + /** + * Indentation d'une chaine + * + * @method indent + * @static + * @param {Number} n - nombre de tabulation + * @param {String} msg - chaine + * + * @example + * Gp.Utils.Helper.indent (2, "message à indenter") + * // out + * // ........message à indenter + * + * @returns {String} retourne une chaine indentée + */ + indent: function indent(n, msg) { + var num = n || 0; + return new Array(num + 1).join("\t") + msg; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (Helper); + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8); +/* harmony import */ var _XHR__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10); +/* harmony import */ var _JSONP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); +/** + * Interface de dialogue avec les webservices + * + * @module Protocols + * @private + * @alias Gp.Protocols + */ + + + +var Protocol = { + /** + * Interface unique d"envoi d"une requête. + * + * @method send + * @static + * @param {Object} options - options generales + * @param {String} options.url - url du service + * @param {String} options.method - GET, POST, PUT, DELETE + * @param {String} options.protocol - XHR | JSONP + * @param {String} options.format - format de la reponse du service : json, xml ou null (brute)... + * @param {String} options.wrap - encapsuler la reponse du service dans du JSON : true|false (true par defaut sur le protocole JSONP) + * @param {String} options.callbackSuffix - suffixe de la fonction de callback (JSONP uniquement) (ex: si callbackSuffix="", la fonction s'appellera "callback") + * @param {String} options.timeOut - 0 ms + * @param {Boolean} options.nocache - true|false + * @param {Object|String} options.data - content (post) ou param (get) + * @param {Object|String} options.headers - (post) ex. referer + * @param {Object|String} options.content - (post) ex. "application/json" + * @param {String} options.scope - this (TODO) + * @param {Function} options.onResponse - callback + * @param {Function} options.onFailure - callback + * @param {Function} options.onTimeOut - callback + * @param {String} options.proxyUrl - (TODO) + */ + send: function send(options) { + // INFO + // "output" - param est interne à la classe "Protocol" (parametrable via "wrap"), et à ajouter à l"url + // ce param est independant du service car il est géré par le filtre LUA : + // ex. json|xml (json par defaut). + // Ce param. permet d"encapsuler du XML dans du JSON : + // {http : {status:200, error:null},xml :"réponse du service"} + // Utile pour les services qui ne repondent que du XML (ex. Geocodage) + // + // |-------------------------------------------------| + // | \service | | | | + // | output\ format| json | xml | remarques | + // |--------\------|------|-----|--------------------| + // | json | json | json| json/xml encapsulé | + // | xml | json | xml | param inactif | + // |-------------------------------------------------| + // ex. le service demande une reponse native au "format" json et avec un "output" json. + // on a donc une reponse json encapsulé dans un json : ce qu'on ne souhaite pas ! + // dans ce cas on ne renseigne pas output=json + + // INFO + // "wrap" - choix d"encapsuler ou non les reponses dans du JSON. + // Par defaut, on encapsule uniquement les reponses sur le protocole JSONP (et qui sont en xml) ! + + // INFO + // "callback" - param est interne à la classe "Protocol" (non parametrable), et à ajouter à l"url + // ce param est independant du service car il est géré aussi par le filtre LUA : + // ex. callback|null + // Ce param. permet de renvoyer une reponse javascript : + // callback ({http : {status:200, error:null},xml :"réponse du service"}) + // Ce param. est non renseigné par defaut car pour du JSONP, on utilise le + // le protocol JSONP, et ce dernier implemente déjà le callback ! + + // settings par defaut + var settings = options || { + method: "GET", + // protocol : "JSONP", + protocol: "XHR", + timeOut: 0, + format: null, + wrap: true, + nocache: true, + output: "json", + callback: null, + callbackSuffix: null + }; + + // on determine l'environnement d'execution : browser ou non ? + // et on stoppe pour nodeJS... sur un protocole JSONP ! + if (typeof window === "undefined" && options.protocol === "JSONP") { + console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS"); + return; + } + if (options.protocol === "XHR" || options.format === "json") { + settings.wrap = false; + } else if (options.protocol === "JSONP" && options.format === "xml") { + settings.wrap = true; + } + settings.callback = null; // FIXME non géré !? + settings.output = settings.wrap ? "json" : null; + + // on encapsule les reponses dans un objet JSON + if (settings.wrap) { + var params = {}; + params.output = settings.output; + params.callback = settings.callback; + delete params.callback; // FIXME non géré !? + settings.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__["default"].normalyzeUrl(options.url, params); + } + + // choix de l"implementation : + // XHR ou JSONP + switch (settings.protocol) { + case "XHR": + // on normalise l'url (gestion du cache) + if (options.method === "GET" && options.nocache) { + settings.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__["default"].normalyzeUrl(settings.url, { + t: new Date().getTime() + }); + } + // appel du service en XHR + _XHR__WEBPACK_IMPORTED_MODULE_1__["default"].call(settings); + break; + case "JSONP": + // on normalise l'url si les params. sont renseignés dans la string|object "data" + if (settings.data) { + settings.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_0__["default"].normalyzeUrl(settings.url, settings.data); + } + + // appel du service en JSONP + _JSONP__WEBPACK_IMPORTED_MODULE_2__["default"].call(settings); + break; + default: + throw new Error("protocol not supported (XHR|JSONP) !"); + } + } +}; +/* harmony default export */ __webpack_exports__["default"] = (Protocol); + +/***/ }), +/* 10 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8); +/* harmony import */ var es6_promise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11); +/* harmony import */ var es6_promise__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(es6_promise__WEBPACK_IMPORTED_MODULE_2__); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +/* global Promise, require, XDomainRequest */ + + + + +// import __request from "request"; +// import __xmldom from "xmldom"; + +/** + * Ajax Request (use of Promises) + * + * @module XHR + * @alias Gp.Protocols.XHR + * @see dependance 'es6-promise' + */ + +// cf. https://xhr.spec.whatwg.org/ +// cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest + +var XHR = { + /** + * Interface unique d'envoi d'une requête. + * + * @method call + * @static + * @param {Object} settings - options generales + * @param {String} settings.url - url du service + * @param {String} settings.method - GET, POST, PUT, DELETE + * @param {String} settings.format - format de la reponse du service : json, xml ou null (brute) + * @param {String} settings.data - content (post) ou param (get) + * @param {String} settings.proxy - proxy url + * @param {Object|String} settings.headers - (post) ex. referer + * @param {Object|String} settings.content - (post) ex. 'application/json' + * @param {String} settings.timeOut - timeout = 0 par defaut + * @param {String} settings.scope - this + * @param {Function} settings.onResponse - callback + * @param {Function} settings.onFailure - callback + */ + call: function call(settings) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("XHR"); + logger.trace("[XHR::call()]"); + + // FIXME + // To polyfill the global environment + es6_promise__WEBPACK_IMPORTED_MODULE_2___default.a.polyfill(); + + // test sur les settings obligatoires + if (!settings.url) { + throw new Error("missing parameter : url is not defined !"); + } + if (!settings.method) { + throw new Error("missing parameter : method is not defined !"); + } + if (!settings.format) { + settings.format = "text"; // reponse brute ! + } + var options = {}; + options.url = settings.url; + options.data = settings.data ? settings.data : null; + options.method = settings.method; + options.timeOut = settings.timeOut || 0; + options.scope = settings.scope || this; + options.proxy = settings.proxy || null; + options.content = settings.content || null; + options.headers = settings.headers || { + referer: "http://localhost" + }; + + // test sur les valeurs de 'settings.method' + switch (settings.method) { + case "DELETE": + case "GET": + break; + case "PUT": + case "POST": + // on force sur ces params spécifiques au mode POST + options.content = settings.content ? settings.content : "application/x-www-form-urlencoded"; // FIXME en attente des services : bascule en "application/xml" ou "application/json" + options.headers = settings.headers ? settings.headers : { + referer: "http://localhost" + }; // FIXME parametrable... + break; + case "HEAD": + case "OPTIONS": + throw new Error("HTTP method not yet supported !"); + default: + throw new Error("HTTP method unknown !"); + } + + // test sur les valeurs de 'settings.format' + switch (settings.format) { + case "text": + this.__call(options).then(function (response) { + logger.trace(response); + settings.onResponse.call(this, response); + })["catch"](function (error) { + settings.onFailure.call(this, error); + }); + break; + case "json": + this.__callJSON(options).then(function (response) { + logger.trace(response); + settings.onResponse.call(this, response); + })["catch"](function (error) { + settings.onFailure.call(this, error); + }); + break; + case "xml": + this.__callXML(options).then(function (response) { + logger.trace(response); + settings.onResponse.call(this, response); + })["catch"](function (error) { + settings.onFailure.call(this, error); + }); + break; + default: + throw new Error("This output Format is not yet supported !"); + } + }, + /** + * Requete + * + * @method __call + * @private + * @param {Object} options - options + * @return {Object} promise + */ + __call: function __call(options) { + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("XHR"); + logger.trace("[XHR::__call()]"); + var promise = new Promise(function (resolve, reject) { + // traitement du corps de la requête + var corps = options.method === "POST" || options.method === "PUT" ? 1 : 0; + + // seulement si options.data n'est pas vide (peut être un objet ou une chaine de caractères) + if (options.data && (_typeof(options.data) === "object" && Object.keys(options.data).length || typeof options.data === "string" && options.data.length) && !corps) { + options.url = _Utils_Helper__WEBPACK_IMPORTED_MODULE_1__["default"].normalyzeUrl(options.url, options.data); + } + logger.trace("URL = ", options.url); + var hXHR = null; + + // test on env. nodejs or browser + if (typeof window === "undefined") { + var nodefetch = __webpack_require__(14); + var opts = { + headers: { + Referer: "https://localhost" + } + }; + if (options.data && typeof options.data === "string" && corps) { + opts = { + method: options.method, + body: options.data, + headers: { + "Content-Type": options.content, + Referer: "https://localhost" + } + }; + } + return nodefetch(options.url, opts).then(function (response) { + if (response.ok) { + // res.status >= 200 && res.status < 300 + resolve(response.text()); + } else { + var message = "Errors Occured on Http Request (status : '" + response.statusText + "' | url : '" + response.url + "')"; + var status = response.status; + reject({ + message: message, + status: status + }); + } + })["catch"](function (e) { + reject({ + message: e, + status: -1 + }); + }); + } else { + if (window.XMLHttpRequest) { + logger.trace("XMLHttpRequest"); + hXHR = new XMLHttpRequest(); + hXHR.open(options.method, options.url, true); // async + hXHR.overrideMimeType = options.content; + + // gestion du timeout + var onTimeOutTrigger = null; + if (options.timeOut > 0) { + // FIXME le timeout interne ne me permet pas de declencher le bon message... + // hXHR.timeout = options.timeOut; + logger.trace("XHR - TimeOut actif !"); + /** + * Description + * + * @method onTimeOutTrigger + * @private + */ + onTimeOutTrigger = window.setTimeout(function () { + var message = "TimeOut Occured on Http Request with XMLHttpRequest !"; + reject({ + message: message, + status: -1 + }); + }, options.timeOut); + } + if (corps) { + // headers, data, content of data + // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader + logger.trace("data = ", options.data); + hXHR.setRequestHeader("Content-type", options.content); + // FIXME refused to set unsafe header content-length javascript + // hXHR.setRequestHeader ("Content-length", options.data.length); + // hXHR.setRequestHeader ("Referer", options.headers.referer); + } + + /** + * On Error + * FIXME ne se declenche pas !? + * + * @param {Object} e - Event + * @method onerror + * @private + */ + hXHR.onerror = function (e) { + console.log(e); + reject(new Error("Errors Occured on Http Request with XMLHttpRequest !")); + }; + + /** + * On Timeout + * FIXME ne se declenche pas !? + * + * @param {Object} e - Event + * @method ontimeout + * @private + */ + hXHR.ontimeout = function (e) { + console.log(e); + reject(new Error("TimeOut Occured on Http Request with XMLHttpRequest !")); + }; + + /** + * Description + * + * @method onreadystatechange + * @private + */ + hXHR.onreadystatechange = function (e) { + if (hXHR.readyState === 4) { + // DONE + if (hXHR.status === 200) { + window.clearTimeout(onTimeOutTrigger); + resolve(hXHR.response); + } else { + var message = "Errors Occured on Http Request (status : '" + e.target.statusText + "' | url : '" + e.target.responseURL + "' | response : '" + e.target.response + "')"; + var status = e.target.status; + reject({ + message: message, + status: status + }); + } + } + }; + + // gestion du content data + var data4xhr = options.data && corps ? options.data : null; + hXHR.send(data4xhr); + } else if (window.XDomainRequest) { + // worked in Internet Explorer 8–10 only ! + logger.trace("XDomainRequest"); + hXHR = new XDomainRequest(); + hXHR.open(options.method, options.url); + hXHR.overrideMimeType = options.content; + if (options.timeOut > 0) { + hXHR.timeout = options.timeout; + logger.trace("XHR - TimeOut actif !"); + } + if (corps) { + // headers, data, content of data + // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader + hXHR.setRequestHeader("Content-type", options.content); + // FIXME refused to set unsafe header content-length javascript + // hXHR.setRequestHeader ("Content-length", options.data.length); + // hXHR.setRequestHeader ("Referer", options.headers.referer); + } + + /** + * Description + * + * @method onerror + * @private + */ + hXHR.onerror = function () { + reject(new Error("Errors Occured on Http Request with XMLHttpRequest !")); + }; + + /** + * Description + * + * @method ontimeout + * @private + */ + hXHR.ontimeout = function () { + reject(new Error("TimeOut Occured on Http Request with XMLHttpRequest !")); + }; + + /** + * On Load + * + * @method onload + * @private + */ + hXHR.onload = function (e) { + if (hXHR.status === 200) { + resolve(hXHR.responseText); + } else { + var message = "Errors Occured on Http Request (status : '" + e.target.statusText + "' | url : '" + e.target.responseURL + "')"; + var status = e.target.status; + reject({ + message: message, + status: status + }); + } + }; + var data4xdr = options.data && corps ? options.data : null; + hXHR.send(data4xdr); + } else { + throw new Error("CORS not supported"); + } + } + }); + return promise; + }, + /** + * Requete avec parser JSON + * + * @method __callJSON + * @private + * @param {Object} options - options + * @return {Object} promise + */ + __callJSON: function __callJSON(options) { + return this.__call(options).then(JSON.parse)["catch"](function (error) { + console.log("_callJSON failed on : ", options.url, error); + // FIXME pas d'exception, laissons le fil se derouler... + // throw error; + }); + }, + /** + * Requete avec parser XML + * + * @method __callXML + * @private + * @param {Object} options - options + * @return {Object} promise + */ + __callXML: function __callXML(options) { + return this.__call(options).then(function (response) { + var xmlDoc; + + // test on env. nodejs or browser + if (typeof window === "undefined") { + var DOMParser = __webpack_require__(15).DOMParser; // __xmldom.DOMParser + xmlDoc = new DOMParser().parseFromString(response, "text/xml"); + } else { + if (window.DOMParser) { + var parser = new window.DOMParser(); + xmlDoc = parser.parseFromString(response, "text/xml"); + } else { + // IE + xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = false; + xmlDoc.loadXML(response); + } + } + return xmlDoc; + })["catch"](function (error) { + console.log("__callXML failed on : ", options.url, error); + // FIXME pas d'exception, laissons le fil se derouler... + // throw error; + }); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (XHR); + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process, global) {/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version v4.2.8+1e68dce6 + */ + +(function (global, factory) { + true ? module.exports = factory() : + undefined; +}(this, (function () { 'use strict'; + +function objectOrFunction(x) { + var type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} + +function isFunction(x) { + return typeof x === 'function'; +} + + + +var _isArray = void 0; +if (Array.isArray) { + _isArray = Array.isArray; +} else { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = void 0; +var customSchedulerFn = void 0; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : undefined; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + if (typeof vertxNext !== 'undefined') { + return function () { + vertxNext(flush); + }; + } + + return useSetTimeout(); +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = undefined; + queue[i + 1] = undefined; + } + + len = 0; +} + +function attemptVertx() { + try { + var vertx = Function('return this')().require('vertx'); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = void 0; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === undefined && "function" === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === undefined) { + makePromise(child); + } + + var _state = parent._state; + + + if (_state) { + var callback = arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve$1(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(2); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { + try { + then$$1.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then$$1) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then$$1, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + reject(promise, thenable._result); + } else { + subscribe(thenable, undefined, function (value) { + return resolve(promise, value); + }, function (reason) { + return reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$1) { + if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$1 === undefined) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$1)) { + handleForeignThenable(promise, maybeThenable, then$$1); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function resolve(promise, value) { + if (promise === value) { + reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + var then$$1 = void 0; + try { + then$$1 = value.then; + } catch (error) { + reject(promise, error); + return; + } + handleMaybeThenable(promise, value, then$$1); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = void 0, + callback = void 0, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = void 0, + error = void 0, + succeeded = true; + + if (hasCallback) { + try { + value = callback(detail); + } catch (e) { + succeeded = false; + error = e; + } + + if (promise === value) { + reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + resolve(promise, value); + } else if (succeeded === false) { + reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + resolve(promise, value); + }, function rejectPromise(reason) { + reject(promise, reason); + }); + } catch (e) { + reject(promise, e); + } +} + +var id = 0; +function nextId() { + return id++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = undefined; + promise._result = undefined; + promise._subscribers = []; +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +} + +var Enumerator = function () { + function Enumerator(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(input); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + reject(this.promise, validationError()); + } + } + + Enumerator.prototype._enumerate = function _enumerate(input) { + for (var i = 0; this._state === PENDING && i < input.length; i++) { + this._eachEntry(input[i], i); + } + }; + + Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { + var c = this._instanceConstructor; + var resolve$$1 = c.resolve; + + + if (resolve$$1 === resolve$1) { + var _then = void 0; + var error = void 0; + var didError = false; + try { + _then = entry.then; + } catch (e) { + didError = true; + error = e; + } + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise$1) { + var promise = new c(noop); + if (didError) { + reject(promise, error); + } else { + handleMaybeThenable(promise, entry, _then); + } + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$1) { + return resolve$$1(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$1(entry), i); + } + }; + + Enumerator.prototype._settledAt = function _settledAt(state, i, value) { + var promise = this.promise; + + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } + }; + + Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { + var enumerator = this; + + subscribe(promise, undefined, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); + }; + + return Enumerator; +}(); + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all(entries) { + return new Enumerator(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject$1(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {Function} resolver + Useful for tooling. + @constructor +*/ + +var Promise$1 = function () { + function Promise(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise ? initializePromise(this, resolver) : needsNew(); + } + } + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + Chaining + -------- + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + Assimilation + ------------ + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + If the assimliated promise rejects, then the downstream promise will also reject. + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + Simple Example + -------------- + Synchronous Example + ```javascript + let result; + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + Errback Example + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + Promise Example; + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + Advanced Example + -------------- + Synchronous Example + ```javascript + let author, books; + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + Errback Example + ```js + function foundBooks(books) { + } + function failure(reason) { + } + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + Promise Example; + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + + + Promise.prototype.catch = function _catch(onRejection) { + return this.then(null, onRejection); + }; + + /** + `finally` will be invoked regardless of the promise's fate just as native + try/catch/finally behaves + + Synchronous example: + + ```js + findAuthor() { + if (Math.random() > 0.5) { + throw new Error(); + } + return new Author(); + } + + try { + return findAuthor(); // succeed or fail + } catch(error) { + return findOtherAuther(); + } finally { + // always runs + // doesn't affect the return value + } + ``` + + Asynchronous example: + + ```js + findAuthor().catch(function(reason){ + return findOtherAuther(); + }).finally(function(){ + // author was either found, or not + }); + ``` + + @method finally + @param {Function} callback + @return {Promise} + */ + + + Promise.prototype.finally = function _finally(callback) { + var promise = this; + var constructor = promise.constructor; + + if (isFunction(callback)) { + return promise.then(function (value) { + return constructor.resolve(callback()).then(function () { + return value; + }); + }, function (reason) { + return constructor.resolve(callback()).then(function () { + throw reason; + }); + }); + } + + return promise.then(callback, callback); + }; + + return Promise; +}(); + +Promise$1.prototype.then = then; +Promise$1.all = all; +Promise$1.race = race; +Promise$1.resolve = resolve$1; +Promise$1.reject = reject$1; +Promise$1._setScheduler = setScheduler; +Promise$1._setAsap = setAsap; +Promise$1._asap = asap; + +/*global self*/ +function polyfill() { + var local = void 0; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise$1; +} + +// Strange compat.. +Promise$1.polyfill = polyfill; +Promise$1.Promise = Promise$1; + +return Promise$1; + +}))); + + + +//# sourceMappingURL=es6-promise.map + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12), __webpack_require__(13))) + +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || new Function("return this")(); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__14__; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +var dom = __webpack_require__(16) +exports.DOMImplementation = dom.DOMImplementation +exports.XMLSerializer = dom.XMLSerializer +exports.DOMParser = __webpack_require__(18).DOMParser + + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +var conventions = __webpack_require__(17); + +var find = conventions.find; +var NAMESPACE = conventions.NAMESPACE; + +/** + * A prerequisite for `[].filter`, to drop elements that are empty + * @param {string} input + * @returns {boolean} + */ +function notEmptyString (input) { + return input !== '' +} +/** + * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace + * @see https://infra.spec.whatwg.org/#ascii-whitespace + * + * @param {string} input + * @returns {string[]} (can be empty) + */ +function splitOnASCIIWhitespace(input) { + // U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE + return input ? input.split(/[\t\n\f\r ]+/).filter(notEmptyString) : [] +} + +/** + * Adds element as a key to current if it is not already present. + * + * @param {Record} current + * @param {string} element + * @returns {Record} + */ +function orderedSetReducer (current, element) { + if (!current.hasOwnProperty(element)) { + current[element] = true; + } + return current; +} + +/** + * @see https://infra.spec.whatwg.org/#ordered-set + * @param {string} input + * @returns {string[]} + */ +function toOrderedSet(input) { + if (!input) return []; + var list = splitOnASCIIWhitespace(input); + return Object.keys(list.reduce(orderedSetReducer, {})) +} + +/** + * Uses `list.indexOf` to implement something like `Array.prototype.includes`, + * which we can not rely on being available. + * + * @param {any[]} list + * @returns {function(any): boolean} + */ +function arrayIncludes (list) { + return function(element) { + return list && list.indexOf(element) !== -1; + } +} + +function copy(src,dest){ + for(var p in src){ + if (Object.prototype.hasOwnProperty.call(src, p)) { + dest[p] = src[p]; + } + } +} + +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknown Class:"+Class) + } + pt.constructor = Class + } +} + +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + +/** + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + */ +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 + * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. + * The items in the NodeList are accessible via an integral index, starting from 0. + */ +function NodeList() { +}; +NodeList.prototype = { + /** + * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. + * @standard level1 + */ + length:0, + /** + * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. + * @standard level1 + * @param index unsigned long + * Index into the collection. + * @return Node + * The node at the indexth position in the NodeList, or null if that is not a valid index. + */ + item: function(index) { + return index >= 0 && index < this.length ? this[index] : null; + }, + toString:function(isHTML,nodeFilter){ + for(var buf = [], i = 0;i=0){ + var lastIndex = list.length-1 + while(i0 || key == 'xmlns'){ +// return null; +// } + //console.log() + var i = this.length; + while(i--){ + var attr = this[i]; + //console.log(attr.nodeName,key) + if(attr.nodeName == key){ + return attr; + } + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; + } + } + return null; + } +}; + +/** + * The DOMImplementation interface represents an object providing methods + * which are not dependent on any particular document. + * Such an object is returned by the `Document.implementation` property. + * + * __The individual methods describe the differences compared to the specs.__ + * + * @constructor + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN + * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial) + * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core + * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core + * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard + */ +function DOMImplementation() { +} + +DOMImplementation.prototype = { + /** + * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported. + * The different implementations fairly diverged in what kind of features were reported. + * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use. + * + * @deprecated It is deprecated and modern browsers return true in all cases. + * + * @param {string} feature + * @param {string} [version] + * @returns {boolean} always true + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN + * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core + * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard + */ + hasFeature: function(feature, version) { + return true; + }, + /** + * Creates an XML Document object of the specified type with its document element. + * + * __It behaves slightly different from the description in the living standard__: + * - There is no interface/class `XMLDocument`, it returns a `Document` instance. + * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared. + * - this implementation is not validating names or qualified names + * (when parsing XML strings, the SAX parser takes care of that) + * + * @param {string|null} namespaceURI + * @param {string} qualifiedName + * @param {DocumentType=null} doctype + * @returns {Document} + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN + * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial) + * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core + * + * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract + * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names + * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names + */ + createDocument: function(namespaceURI, qualifiedName, doctype){ + var doc = new Document(); + doc.implementation = this; + doc.childNodes = new NodeList(); + doc.doctype = doctype || null; + if (doctype){ + doc.appendChild(doctype); + } + if (qualifiedName){ + var root = doc.createElementNS(namespaceURI, qualifiedName); + doc.appendChild(root); + } + return doc; + }, + /** + * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`. + * + * __This behavior is slightly different from the in the specs__: + * - this implementation is not validating names or qualified names + * (when parsing XML strings, the SAX parser takes care of that) + * + * @param {string} qualifiedName + * @param {string} [publicId] + * @param {string} [systemId] + * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation + * or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()` + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN + * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core + * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard + * + * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract + * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names + * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names + */ + createDocumentType: function(qualifiedName, publicId, systemId){ + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId || ''; + node.systemId = systemId || ''; + + return node; + } +}; + + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { +}; + +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + _insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; + }, + /** + * Look up the prefix associated to the given namespace URI, starting from this node. + * **The default namespace declarations are ignored by this method.** + * See Namespace Prefix Lookup for details on the algorithm used by this method. + * + * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._ + * + * @param {string | null} namespaceURI + * @returns {string | null} + * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix + * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo + * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix + * @see https://github.com/xmldom/xmldom/issues/322 + */ + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) { + return n; + } + } + } + el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(Object.prototype.hasOwnProperty.call(map, prefix)){ + return map[prefix] ; + } + } + el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; + } +}; + + +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} + + +copy(NodeType,Node); +copy(NodeType,Node.prototype); + +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} + + + +function Document(){ + this.ownerDocument = this; +} + +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns === NAMESPACE.XMLNS){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} + +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns === NAMESPACE.XMLNS){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} + +/** + * Updates `el.childNodes`, updating the indexed items and it's `length`. + * Passing `newChild` means it will be appended. + * Otherwise it's assumed that an item has been removed, + * and `el.firstNode` and it's `.nextSibling` are used + * to walk the current list of child nodes. + * + * @param {Document} doc + * @param {Node} el + * @param {Node} [newChild] + * @private + */ +function _onUpdateChild (doc, el, newChild) { + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if (newChild) { + cs[cs.length++] = newChild; + } else { + var child = el.firstChild; + var i = 0; + while (child) { + cs[i++] = child; + child = child.nextSibling; + } + cs.length = i; + delete cs[cs.length]; + } + } +} + +/** + * Removes the connections between `parentNode` and `child` + * and any existing `child.previousSibling` or `child.nextSibling`. + * + * @see https://github.com/xmldom/xmldom/issues/135 + * @see https://github.com/xmldom/xmldom/issues/145 + * + * @param {Node} parentNode + * @param {Node} child + * @returns {Node} the child that was removed. + * @private + */ +function _removeChild (parentNode, child) { + var previous = child.previousSibling; + var next = child.nextSibling; + if (previous) { + previous.nextSibling = next; + } else { + parentNode.firstChild = next; + } + if (next) { + next.previousSibling = previous; + } else { + parentNode.lastChild = previous; + } + child.parentNode = null; + child.previousSibling = null; + child.nextSibling = null; + _onUpdateChild(parentNode.ownerDocument, parentNode); + return child; +} + +/** + * Returns `true` if `node` can be a parent for insertion. + * @param {Node} node + * @returns {boolean} + */ +function hasValidParentNodeType(node) { + return ( + node && + (node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE) + ); +} + +/** + * Returns `true` if `node` can be inserted according to it's `nodeType`. + * @param {Node} node + * @returns {boolean} + */ +function hasInsertableNodeType(node) { + return ( + node && + (isElementNode(node) || + isTextNode(node) || + isDocTypeNode(node) || + node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || + node.nodeType === Node.COMMENT_NODE || + node.nodeType === Node.PROCESSING_INSTRUCTION_NODE) + ); +} + +/** + * Returns true if `node` is a DOCTYPE node + * @param {Node} node + * @returns {boolean} + */ +function isDocTypeNode(node) { + return node && node.nodeType === Node.DOCUMENT_TYPE_NODE; +} + +/** + * Returns true if the node is an element + * @param {Node} node + * @returns {boolean} + */ +function isElementNode(node) { + return node && node.nodeType === Node.ELEMENT_NODE; +} +/** + * Returns true if `node` is a text node + * @param {Node} node + * @returns {boolean} + */ +function isTextNode(node) { + return node && node.nodeType === Node.TEXT_NODE; +} + +/** + * Check if en element node can be inserted before `child`, or at the end if child is falsy, + * according to the presence and position of a doctype node on the same level. + * + * @param {Document} doc The document node + * @param {Node} child the node that would become the nextSibling if the element would be inserted + * @returns {boolean} `true` if an element can be inserted before child + * @private + * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity + */ +function isElementInsertionPossible(doc, child) { + var parentChildNodes = doc.childNodes || []; + if (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) { + return false; + } + var docTypeNode = find(parentChildNodes, isDocTypeNode); + return !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child)); +} + +/** + * Check if en element node can be inserted before `child`, or at the end if child is falsy, + * according to the presence and position of a doctype node on the same level. + * + * @param {Node} doc The document node + * @param {Node} child the node that would become the nextSibling if the element would be inserted + * @returns {boolean} `true` if an element can be inserted before child + * @private + * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity + */ +function isElementReplacementPossible(doc, child) { + var parentChildNodes = doc.childNodes || []; + + function hasElementChildThatIsNotChild(node) { + return isElementNode(node) && node !== child; + } + + if (find(parentChildNodes, hasElementChildThatIsNotChild)) { + return false; + } + var docTypeNode = find(parentChildNodes, isDocTypeNode); + return !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child)); +} + +/** + * @private + * Steps 1-5 of the checks before inserting and before replacing a child are the same. + * + * @param {Node} parent the parent node to insert `node` into + * @param {Node} node the node to insert + * @param {Node=} child the node that should become the `nextSibling` of `node` + * @returns {Node} + * @throws DOMException for several node combinations that would create a DOM that is not well-formed. + * @throws DOMException if `child` is provided but is not a child of `parent`. + * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity + * @see https://dom.spec.whatwg.org/#concept-node-replace + */ +function assertPreInsertionValidity1to5(parent, node, child) { + // 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a "HierarchyRequestError" DOMException. + if (!hasValidParentNodeType(parent)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType); + } + // 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a "HierarchyRequestError" DOMException. + // not implemented! + // 3. If `child` is non-null and its parent is not `parent`, then throw a "NotFoundError" DOMException. + if (child && child.parentNode !== parent) { + throw new DOMException(NOT_FOUND_ERR, 'child not in parent'); + } + if ( + // 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a "HierarchyRequestError" DOMException. + !hasInsertableNodeType(node) || + // 5. If either `node` is a Text node and `parent` is a document, + // the sax parser currently adds top level text nodes, this will be fixed in 0.9.0 + // || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE) + // or `node` is a doctype and `parent` is not a document, then throw a "HierarchyRequestError" DOMException. + (isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE) + ) { + throw new DOMException( + HIERARCHY_REQUEST_ERR, + 'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType + ); + } +} + +/** + * @private + * Step 6 of the checks before inserting and before replacing a child are different. + * + * @param {Document} parent the parent node to insert `node` into + * @param {Node} node the node to insert + * @param {Node | undefined} child the node that should become the `nextSibling` of `node` + * @returns {Node} + * @throws DOMException for several node combinations that would create a DOM that is not well-formed. + * @throws DOMException if `child` is provided but is not a child of `parent`. + * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity + * @see https://dom.spec.whatwg.org/#concept-node-replace + */ +function assertPreInsertionValidityInDocument(parent, node, child) { + var parentChildNodes = parent.childNodes || []; + var nodeChildNodes = node.childNodes || []; + + // DocumentFragment + if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + var nodeChildElements = nodeChildNodes.filter(isElementNode); + // If node has more than one element child or has a Text node child. + if (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment'); + } + // Otherwise, if `node` has one element child and either `parent` has an element child, + // `child` is a doctype, or `child` is non-null and a doctype is following `child`. + if (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype'); + } + } + // Element + if (isElementNode(node)) { + // `parent` has an element child, `child` is a doctype, + // or `child` is non-null and a doctype is following `child`. + if (!isElementInsertionPossible(parent, child)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype'); + } + } + // DocumentType + if (isDocTypeNode(node)) { + // `parent` has a doctype child, + if (find(parentChildNodes, isDocTypeNode)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed'); + } + var parentElementChild = find(parentChildNodes, isElementNode); + // `child` is non-null and an element is preceding `child`, + if (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element'); + } + // or `child` is null and `parent` has an element child. + if (!child && parentElementChild) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present'); + } + } +} + +/** + * @private + * Step 6 of the checks before inserting and before replacing a child are different. + * + * @param {Document} parent the parent node to insert `node` into + * @param {Node} node the node to insert + * @param {Node | undefined} child the node that should become the `nextSibling` of `node` + * @returns {Node} + * @throws DOMException for several node combinations that would create a DOM that is not well-formed. + * @throws DOMException if `child` is provided but is not a child of `parent`. + * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity + * @see https://dom.spec.whatwg.org/#concept-node-replace + */ +function assertPreReplacementValidityInDocument(parent, node, child) { + var parentChildNodes = parent.childNodes || []; + var nodeChildNodes = node.childNodes || []; + + // DocumentFragment + if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + var nodeChildElements = nodeChildNodes.filter(isElementNode); + // If `node` has more than one element child or has a Text node child. + if (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment'); + } + // Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`. + if (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype'); + } + } + // Element + if (isElementNode(node)) { + // `parent` has an element child that is not `child` or a doctype is following `child`. + if (!isElementReplacementPossible(parent, child)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype'); + } + } + // DocumentType + if (isDocTypeNode(node)) { + function hasDoctypeChildThatIsNotChild(node) { + return isDocTypeNode(node) && node !== child; + } + + // `parent` has a doctype child that is not `child`, + if (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed'); + } + var parentElementChild = find(parentChildNodes, isElementNode); + // or an element is preceding `child`. + if (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) { + throw new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element'); + } + } +} + +/** + * @private + * @param {Node} parent the parent node to insert `node` into + * @param {Node} node the node to insert + * @param {Node=} child the node that should become the `nextSibling` of `node` + * @returns {Node} + * @throws DOMException for several node combinations that would create a DOM that is not well-formed. + * @throws DOMException if `child` is provided but is not a child of `parent`. + * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity + */ +function _insertBefore(parent, node, child, _inDocumentAssertion) { + // To ensure pre-insertion validity of a node into a parent before a child, run these steps: + assertPreInsertionValidity1to5(parent, node, child); + + // If parent is a document, and any of the statements below, switched on the interface node implements, + // are true, then throw a "HierarchyRequestError" DOMException. + if (parent.nodeType === Node.DOCUMENT_NODE) { + (_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child); + } + + var cp = node.parentNode; + if(cp){ + cp.removeChild(node);//remove and update + } + if(node.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = node.firstChild; + if (newFirst == null) { + return node; + } + var newLast = node.lastChild; + }else{ + newFirst = newLast = node; + } + var pre = child ? child.previousSibling : parent.lastChild; + + newFirst.previousSibling = pre; + newLast.nextSibling = child; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parent.firstChild = newFirst; + } + if(child == null){ + parent.lastChild = newLast; + }else{ + child.previousSibling = newLast; + } + do{ + newFirst.parentNode = parent; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parent.ownerDocument||parent, parent); + //console.log(parent.lastChild.nextSibling == null) + if (node.nodeType == DOCUMENT_FRAGMENT_NODE) { + node.firstChild = node.lastChild = null; + } + return node; +} + +/** + * Appends `newChild` to `parentNode`. + * If `newChild` is already connected to a `parentNode` it is first removed from it. + * + * @see https://github.com/xmldom/xmldom/issues/135 + * @see https://github.com/xmldom/xmldom/issues/145 + * @param {Node} parentNode + * @param {Node} newChild + * @returns {Node} + * @private + */ +function _appendSingleChild (parentNode, newChild) { + if (newChild.parentNode) { + newChild.parentNode.removeChild(newChild); + } + newChild.parentNode = parentNode; + newChild.previousSibling = parentNode.lastChild; + newChild.nextSibling = null; + if (newChild.previousSibling) { + newChild.previousSibling.nextSibling = newChild; + } else { + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument, parentNode, newChild); + return newChild; +} + +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + /** + * The DocumentType node of the document. + * + * @readonly + * @type DocumentType + */ + doctype : null, + documentElement : null, + _inc : 1, + + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + _insertBefore(this, newChild, refChild); + newChild.ownerDocument = this; + if (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) { + this.documentElement = newChild; + } + + return newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + replaceChild: function (newChild, oldChild) { + //raises + _insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument); + newChild.ownerDocument = this; + if (oldChild) { + this.removeChild(oldChild); + } + if (isElementNode(newChild)) { + this.documentElement = newChild; + } + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == ELEMENT_NODE){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, + + /** + * The `getElementsByClassName` method of `Document` interface returns an array-like object + * of all child elements which have **all** of the given class name(s). + * + * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters. + * + * + * Warning: This is a live LiveNodeList. + * Changes in the DOM will reflect in the array as the changes occur. + * If an element selected by this array no longer qualifies for the selector, + * it will automatically be removed. Be aware of this for iteration purposes. + * + * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName + * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname + */ + getElementsByClassName: function(classNames) { + var classNamesSet = toOrderedSet(classNames) + return new LiveNodeList(this, function(base) { + var ls = []; + if (classNamesSet.length > 0) { + _visitNode(base.documentElement, function(node) { + if(node !== base && node.nodeType === ELEMENT_NODE) { + var nodeClassNames = node.getAttribute('class') + // can be null if the attribute does not exist + if (nodeClassNames) { + // before splitting and iterating just compare them for the most common case + var matches = classNames === nodeClassNames; + if (!matches) { + var nodeClassNamesSet = toOrderedSet(nodeClassNames) + matches = classNamesSet.every(arrayIncludes(nodeClassNamesSet)) + } + if(matches) { + ls.push(node); + } + } + } + }); + } + return ls; + }); + }, + + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.localName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.nodeName = node.target = target; + node.nodeValue = node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); + + +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + //console.log(this == oldAttr.ownerElement) + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; + + +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); + + +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR]) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); + +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE +} +_extends(CDATASection,CharacterData); + + +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); + +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); + +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); + +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); + +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); + + +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){ + return nodeSerializeToString.call(node,isHtml,nodeFilter); +} +Node.prototype.toString = nodeSerializeToString; +function nodeSerializeToString(isHtml,nodeFilter){ + var buf = []; + var refNode = this.nodeType == 9 && this.documentElement || this; + var prefix = refNode.prefix; + var uri = refNode.namespaceURI; + + if(uri && prefix == null){ + //console.log(prefix) + var prefix = refNode.lookupPrefix(uri); + if(prefix == null){ + //isHTML = true; + var visibleNamespaces=[ + {namespace:uri,prefix:null} + //{namespace:uri,prefix:''} + ] + } + } + serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces); + //console.log('###',this.nodeType,uri,prefix,buf.join('')) + return buf.join(''); +} + +function needNamespaceDefine(node, isHTML, visibleNamespaces) { + var prefix = node.prefix || ''; + var uri = node.namespaceURI; + // According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) , + // and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl : + // > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty. + // in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using) + // and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared : + // > [...] Furthermore, the attribute value [...] must not be an empty string. + // so serializing empty namespace value like xmlns:ds="" would produce an invalid XML document. + if (!uri) { + return false; + } + if (prefix === "xml" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) { + return false; + } + + var i = visibleNamespaces.length + while (i--) { + var ns = visibleNamespaces[i]; + // get namespace prefix + if (ns.prefix === prefix) { + return ns.namespace !== uri; + } + } + return true; +} +/** + * Well-formed constraint: No < in Attribute Values + * > The replacement text of any entity referred to directly or indirectly + * > in an attribute value must not contain a <. + * @see https://www.w3.org/TR/xml11/#CleanAttrVals + * @see https://www.w3.org/TR/xml11/#NT-AttValue + * + * Literal whitespace other than space that appear in attribute values + * are serialized as their entity references, so they will be preserved. + * (In contrast to whitespace literals in the input which are normalized to spaces) + * @see https://www.w3.org/TR/xml11/#AVNormalize + * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes + */ +function addSerializedAttribute(buf, qualifiedName, value) { + buf.push(' ', qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"') +} + +function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){ + if (!visibleNamespaces) { + visibleNamespaces = []; + } + + if(nodeFilter){ + node = nodeFilter(node); + if(node){ + if(typeof node == 'string'){ + buf.push(node); + return; + } + }else{ + return; + } + //buf.sort.apply(attrs, attributeSorter); + } + + switch(node.nodeType){ + case ELEMENT_NODE: + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + + isHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML + + var prefixedNodeName = nodeName + if (!isHTML && !node.prefix && node.namespaceURI) { + var defaultNS + // lookup current default ns from `xmlns` attribute + for (var ai = 0; ai < attrs.length; ai++) { + if (attrs.item(ai).name === 'xmlns') { + defaultNS = attrs.item(ai).value + break + } + } + if (!defaultNS) { + // lookup current default ns in visibleNamespaces + for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { + var namespace = visibleNamespaces[nsi] + if (namespace.prefix === '' && namespace.namespace === node.namespaceURI) { + defaultNS = namespace.namespace + break + } + } + } + if (defaultNS !== node.namespaceURI) { + for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { + var namespace = visibleNamespaces[nsi] + if (namespace.namespace === node.namespaceURI) { + if (namespace.prefix) { + prefixedNodeName = namespace.prefix + ':' + nodeName + } + break + } + } + } + } + + buf.push('<', prefixedNodeName); + + for(var i=0;i'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + while(child){ + if(child.data){ + buf.push(child.data); + }else{ + serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); + } + child = child.nextSibling; + } + }else + { + while(child){ + serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); + child = child.nextSibling; + } + } + buf.push(''); + }else{ + buf.push('/>'); + } + // remove added visible namespaces + //visibleNamespaces.length = startVisibleNamespaces; + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return addSerializedAttribute(buf, node.name, node.value); + case TEXT_NODE: + /** + * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form, + * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. + * If they are needed elsewhere, they must be escaped using either numeric character references or the strings + * `&` and `<` respectively. + * The right angle bracket (>) may be represented using the string " > ", and must, for compatibility, + * be escaped using either `>` or a character reference when it appears in the string `]]>` in content, + * when that string is not marking the end of a CDATA section. + * + * In the content of elements, character data is any string of characters + * which does not contain the start-delimiter of any markup + * and does not include the CDATA-section-close delimiter, `]]>`. + * + * @see https://www.w3.org/TR/xml/#NT-CharData + * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node + */ + return buf.push(node.data + .replace(/[<&>]/g,_xmlEncoder) + ); + case CDATA_SECTION_NODE: + return buf.push( ''); + case COMMENT_NODE: + return buf.push( ""); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM ', sysid, '>'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i | ({length:number, [number]: T})} list + * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate + * @param {Partial>?} ac `Array.prototype` by default, + * allows injecting a custom implementation in tests + * @returns {T | undefined} + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find + * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find + */ +function find(list, predicate, ac) { + if (ac === undefined) { + ac = Array.prototype; + } + if (list && typeof ac.find === 'function') { + return ac.find.call(list, predicate); + } + for (var i = 0; i < list.length; i++) { + if (Object.prototype.hasOwnProperty.call(list, i)) { + var item = list[i]; + if (predicate.call(undefined, item, i, list)) { + return item; + } + } + } +} + +/** + * "Shallow freezes" an object to render it immutable. + * Uses `Object.freeze` if available, + * otherwise the immutability is only in the type. + * + * Is used to create "enum like" objects. + * + * @template T + * @param {T} object the object to freeze + * @param {Pick = Object} oc `Object` by default, + * allows to inject custom object constructor for tests + * @returns {Readonly} + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze + */ +function freeze(object, oc) { + if (oc === undefined) { + oc = Object + } + return oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object +} + +/** + * Since we can not rely on `Object.assign` we provide a simplified version + * that is sufficient for our needs. + * + * @param {Object} target + * @param {Object | null | undefined} source + * + * @returns {Object} target + * @throws TypeError if target is not an object + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign + */ +function assign(target, source) { + if (target === null || typeof target !== 'object') { + throw new TypeError('target is not an object') + } + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + return target +} + +/** + * All mime types that are allowed as input to `DOMParser.parseFromString` + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec + * @see DOMParser.prototype.parseFromString + */ +var MIME_TYPE = freeze({ + /** + * `text/html`, the only mime type that triggers treating an XML document as HTML. + * + * @see DOMParser.SupportedType.isHTML + * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration + * @see https://en.wikipedia.org/wiki/HTML Wikipedia + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec + */ + HTML: 'text/html', + + /** + * Helper method to check a mime type if it indicates an HTML document + * + * @param {string} [value] + * @returns {boolean} + * + * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration + * @see https://en.wikipedia.org/wiki/HTML Wikipedia + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */ + isHTML: function (value) { + return value === MIME_TYPE.HTML + }, + + /** + * `application/xml`, the standard mime type for XML documents. + * + * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration + * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303 + * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia + */ + XML_APPLICATION: 'application/xml', + + /** + * `text/html`, an alias for `application/xml`. + * + * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303 + * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration + * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia + */ + XML_TEXT: 'text/xml', + + /** + * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace, + * but is parsed as an XML document. + * + * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration + * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec + * @see https://en.wikipedia.org/wiki/XHTML Wikipedia + */ + XML_XHTML_APPLICATION: 'application/xhtml+xml', + + /** + * `image/svg+xml`, + * + * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration + * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1 + * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia + */ + XML_SVG_IMAGE: 'image/svg+xml', +}) + +/** + * Namespaces that are used in this code base. + * + * @see http://www.w3.org/TR/REC-xml-names + */ +var NAMESPACE = freeze({ + /** + * The XHTML namespace. + * + * @see http://www.w3.org/1999/xhtml + */ + HTML: 'http://www.w3.org/1999/xhtml', + + /** + * Checks if `uri` equals `NAMESPACE.HTML`. + * + * @param {string} [uri] + * + * @see NAMESPACE.HTML + */ + isHTML: function (uri) { + return uri === NAMESPACE.HTML + }, + + /** + * The SVG namespace. + * + * @see http://www.w3.org/2000/svg + */ + SVG: 'http://www.w3.org/2000/svg', + + /** + * The `xml:` namespace. + * + * @see http://www.w3.org/XML/1998/namespace + */ + XML: 'http://www.w3.org/XML/1998/namespace', + + /** + * The `xmlns:` namespace + * + * @see https://www.w3.org/2000/xmlns/ + */ + XMLNS: 'http://www.w3.org/2000/xmlns/', +}) + +exports.assign = assign; +exports.find = find; +exports.freeze = freeze; +exports.MIME_TYPE = MIME_TYPE; +exports.NAMESPACE = NAMESPACE; + + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +var conventions = __webpack_require__(17); +var dom = __webpack_require__(16) +var entities = __webpack_require__(19); +var sax = __webpack_require__(20); + +var DOMImplementation = dom.DOMImplementation; + +var NAMESPACE = conventions.NAMESPACE; + +var ParseError = sax.ParseError; +var XMLReader = sax.XMLReader; + +/** + * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends: + * + * > XML parsed entities are often stored in computer files which, + * > for editing convenience, are organized into lines. + * > These lines are typically separated by some combination + * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA). + * > + * > To simplify the tasks of applications, the XML processor must behave + * > as if it normalized all line breaks in external parsed entities (including the document entity) + * > on input, before parsing, by translating all of the following to a single #xA character: + * > + * > 1. the two-character sequence #xD #xA + * > 2. the two-character sequence #xD #x85 + * > 3. the single character #x85 + * > 4. the single character #x2028 + * > 5. any #xD character that is not immediately followed by #xA or #x85. + * + * @param {string} input + * @returns {string} + */ +function normalizeLineEndings(input) { + return input + .replace(/\r[\n\u0085]/g, '\n') + .replace(/[\r\u0085\u2028]/g, '\n') +} + +/** + * @typedef Locator + * @property {number} [columnNumber] + * @property {number} [lineNumber] + */ + +/** + * @typedef DOMParserOptions + * @property {DOMHandler} [domBuilder] + * @property {Function} [errorHandler] + * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing + * defaults to `normalizeLineEndings` + * @property {Locator} [locator] + * @property {Record} [xmlns] + * + * @see normalizeLineEndings + */ + +/** + * The DOMParser interface provides the ability to parse XML or HTML source code + * from a string into a DOM `Document`. + * + * _xmldom is different from the spec in that it allows an `options` parameter, + * to override the default behavior._ + * + * @param {DOMParserOptions} [options] + * @constructor + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization + */ +function DOMParser(options){ + this.options = options ||{locator:{}}; +} + +DOMParser.prototype.parseFromString = function(source,mimeType){ + var options = this.options; + var sax = new XMLReader(); + var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler + var errorHandler = options.errorHandler; + var locator = options.locator; + var defaultNSMap = options.xmlns||{}; + var isHTML = /\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1; + var entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES; + if(locator){ + domBuilder.setDocumentLocator(locator) + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(isHTML){ + defaultNSMap[''] = NAMESPACE.HTML; + } + defaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML; + var normalize = options.normalizeLineEndings || normalizeLineEndings; + if (source && typeof source === 'string') { + sax.parse( + normalize(source), + defaultNSMap, + entityMap + ) + } else { + sax.errorHandler.error('invalid doc source') + } + return domBuilder.doc; +} +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn && isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + } + errorHandler[key] = fn && function(msg){ + fn('[xmldom '+key+']\t'+msg+_locator(locator)); + }||function(){}; + } + build('warning'); + build('error'); + build('fatalError'); + return errorHandler; +} + +//console.log('#\n\n\n\n\n\n\n####') +/** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; +} +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.doc = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.doc.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.doc; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + this.locator &&position(attrs.getLocator(i),attr); + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.doc.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(chars){ + if (this.cdata) { + var charNode = this.doc.createCDATASection(chars); + } else { + var charNode = this.doc.createTextNode(chars); + } + if(this.currentElement){ + this.currentElement.appendChild(charNode); + }else if(/^\s*$/.test(chars)){ + this.doc.appendChild(charNode); + //process xml + } + this.locator && position(this.locator,charNode) + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.doc.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.doc.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.doc.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + this.doc.doctype = dt; + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn('[xmldom warning]\t'+error,_locator(this.locator)); + }, + error:function(error) { + console.error('[xmldom error]\t'+error,_locator(this.locator)); + }, + fatalError:function(error) { + throw new ParseError(error, this.locator); + } +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } +} +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } +} + +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) + +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.doc.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key + +exports.__DOMHandler = DOMHandler; +exports.normalizeLineEndings = normalizeLineEndings; +exports.DOMParser = DOMParser; + + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var freeze = __webpack_require__(17).freeze; + +/** + * The entities that are predefined in every XML document. + * + * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1 + * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0 + * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia + */ +exports.XML_ENTITIES = freeze({ + amp: '&', + apos: "'", + gt: '>', + lt: '<', + quot: '"', +}); + +/** + * A map of all entities that are detected in an HTML document. + * They contain all entries from `XML_ENTITIES`. + * + * @see XML_ENTITIES + * @see DOMParser.parseFromString + * @see DOMImplementation.prototype.createHTMLDocument + * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec + * @see https://html.spec.whatwg.org/entities.json JSON + * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names + * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML + * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML) + * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML) + */ +exports.HTML_ENTITIES = freeze({ + Aacute: '\u00C1', + aacute: '\u00E1', + Abreve: '\u0102', + abreve: '\u0103', + ac: '\u223E', + acd: '\u223F', + acE: '\u223E\u0333', + Acirc: '\u00C2', + acirc: '\u00E2', + acute: '\u00B4', + Acy: '\u0410', + acy: '\u0430', + AElig: '\u00C6', + aelig: '\u00E6', + af: '\u2061', + Afr: '\uD835\uDD04', + afr: '\uD835\uDD1E', + Agrave: '\u00C0', + agrave: '\u00E0', + alefsym: '\u2135', + aleph: '\u2135', + Alpha: '\u0391', + alpha: '\u03B1', + Amacr: '\u0100', + amacr: '\u0101', + amalg: '\u2A3F', + AMP: '\u0026', + amp: '\u0026', + And: '\u2A53', + and: '\u2227', + andand: '\u2A55', + andd: '\u2A5C', + andslope: '\u2A58', + andv: '\u2A5A', + ang: '\u2220', + ange: '\u29A4', + angle: '\u2220', + angmsd: '\u2221', + angmsdaa: '\u29A8', + angmsdab: '\u29A9', + angmsdac: '\u29AA', + angmsdad: '\u29AB', + angmsdae: '\u29AC', + angmsdaf: '\u29AD', + angmsdag: '\u29AE', + angmsdah: '\u29AF', + angrt: '\u221F', + angrtvb: '\u22BE', + angrtvbd: '\u299D', + angsph: '\u2222', + angst: '\u00C5', + angzarr: '\u237C', + Aogon: '\u0104', + aogon: '\u0105', + Aopf: '\uD835\uDD38', + aopf: '\uD835\uDD52', + ap: '\u2248', + apacir: '\u2A6F', + apE: '\u2A70', + ape: '\u224A', + apid: '\u224B', + apos: '\u0027', + ApplyFunction: '\u2061', + approx: '\u2248', + approxeq: '\u224A', + Aring: '\u00C5', + aring: '\u00E5', + Ascr: '\uD835\uDC9C', + ascr: '\uD835\uDCB6', + Assign: '\u2254', + ast: '\u002A', + asymp: '\u2248', + asympeq: '\u224D', + Atilde: '\u00C3', + atilde: '\u00E3', + Auml: '\u00C4', + auml: '\u00E4', + awconint: '\u2233', + awint: '\u2A11', + backcong: '\u224C', + backepsilon: '\u03F6', + backprime: '\u2035', + backsim: '\u223D', + backsimeq: '\u22CD', + Backslash: '\u2216', + Barv: '\u2AE7', + barvee: '\u22BD', + Barwed: '\u2306', + barwed: '\u2305', + barwedge: '\u2305', + bbrk: '\u23B5', + bbrktbrk: '\u23B6', + bcong: '\u224C', + Bcy: '\u0411', + bcy: '\u0431', + bdquo: '\u201E', + becaus: '\u2235', + Because: '\u2235', + because: '\u2235', + bemptyv: '\u29B0', + bepsi: '\u03F6', + bernou: '\u212C', + Bernoullis: '\u212C', + Beta: '\u0392', + beta: '\u03B2', + beth: '\u2136', + between: '\u226C', + Bfr: '\uD835\uDD05', + bfr: '\uD835\uDD1F', + bigcap: '\u22C2', + bigcirc: '\u25EF', + bigcup: '\u22C3', + bigodot: '\u2A00', + bigoplus: '\u2A01', + bigotimes: '\u2A02', + bigsqcup: '\u2A06', + bigstar: '\u2605', + bigtriangledown: '\u25BD', + bigtriangleup: '\u25B3', + biguplus: '\u2A04', + bigvee: '\u22C1', + bigwedge: '\u22C0', + bkarow: '\u290D', + blacklozenge: '\u29EB', + blacksquare: '\u25AA', + blacktriangle: '\u25B4', + blacktriangledown: '\u25BE', + blacktriangleleft: '\u25C2', + blacktriangleright: '\u25B8', + blank: '\u2423', + blk12: '\u2592', + blk14: '\u2591', + blk34: '\u2593', + block: '\u2588', + bne: '\u003D\u20E5', + bnequiv: '\u2261\u20E5', + bNot: '\u2AED', + bnot: '\u2310', + Bopf: '\uD835\uDD39', + bopf: '\uD835\uDD53', + bot: '\u22A5', + bottom: '\u22A5', + bowtie: '\u22C8', + boxbox: '\u29C9', + boxDL: '\u2557', + boxDl: '\u2556', + boxdL: '\u2555', + boxdl: '\u2510', + boxDR: '\u2554', + boxDr: '\u2553', + boxdR: '\u2552', + boxdr: '\u250C', + boxH: '\u2550', + boxh: '\u2500', + boxHD: '\u2566', + boxHd: '\u2564', + boxhD: '\u2565', + boxhd: '\u252C', + boxHU: '\u2569', + boxHu: '\u2567', + boxhU: '\u2568', + boxhu: '\u2534', + boxminus: '\u229F', + boxplus: '\u229E', + boxtimes: '\u22A0', + boxUL: '\u255D', + boxUl: '\u255C', + boxuL: '\u255B', + boxul: '\u2518', + boxUR: '\u255A', + boxUr: '\u2559', + boxuR: '\u2558', + boxur: '\u2514', + boxV: '\u2551', + boxv: '\u2502', + boxVH: '\u256C', + boxVh: '\u256B', + boxvH: '\u256A', + boxvh: '\u253C', + boxVL: '\u2563', + boxVl: '\u2562', + boxvL: '\u2561', + boxvl: '\u2524', + boxVR: '\u2560', + boxVr: '\u255F', + boxvR: '\u255E', + boxvr: '\u251C', + bprime: '\u2035', + Breve: '\u02D8', + breve: '\u02D8', + brvbar: '\u00A6', + Bscr: '\u212C', + bscr: '\uD835\uDCB7', + bsemi: '\u204F', + bsim: '\u223D', + bsime: '\u22CD', + bsol: '\u005C', + bsolb: '\u29C5', + bsolhsub: '\u27C8', + bull: '\u2022', + bullet: '\u2022', + bump: '\u224E', + bumpE: '\u2AAE', + bumpe: '\u224F', + Bumpeq: '\u224E', + bumpeq: '\u224F', + Cacute: '\u0106', + cacute: '\u0107', + Cap: '\u22D2', + cap: '\u2229', + capand: '\u2A44', + capbrcup: '\u2A49', + capcap: '\u2A4B', + capcup: '\u2A47', + capdot: '\u2A40', + CapitalDifferentialD: '\u2145', + caps: '\u2229\uFE00', + caret: '\u2041', + caron: '\u02C7', + Cayleys: '\u212D', + ccaps: '\u2A4D', + Ccaron: '\u010C', + ccaron: '\u010D', + Ccedil: '\u00C7', + ccedil: '\u00E7', + Ccirc: '\u0108', + ccirc: '\u0109', + Cconint: '\u2230', + ccups: '\u2A4C', + ccupssm: '\u2A50', + Cdot: '\u010A', + cdot: '\u010B', + cedil: '\u00B8', + Cedilla: '\u00B8', + cemptyv: '\u29B2', + cent: '\u00A2', + CenterDot: '\u00B7', + centerdot: '\u00B7', + Cfr: '\u212D', + cfr: '\uD835\uDD20', + CHcy: '\u0427', + chcy: '\u0447', + check: '\u2713', + checkmark: '\u2713', + Chi: '\u03A7', + chi: '\u03C7', + cir: '\u25CB', + circ: '\u02C6', + circeq: '\u2257', + circlearrowleft: '\u21BA', + circlearrowright: '\u21BB', + circledast: '\u229B', + circledcirc: '\u229A', + circleddash: '\u229D', + CircleDot: '\u2299', + circledR: '\u00AE', + circledS: '\u24C8', + CircleMinus: '\u2296', + CirclePlus: '\u2295', + CircleTimes: '\u2297', + cirE: '\u29C3', + cire: '\u2257', + cirfnint: '\u2A10', + cirmid: '\u2AEF', + cirscir: '\u29C2', + ClockwiseContourIntegral: '\u2232', + CloseCurlyDoubleQuote: '\u201D', + CloseCurlyQuote: '\u2019', + clubs: '\u2663', + clubsuit: '\u2663', + Colon: '\u2237', + colon: '\u003A', + Colone: '\u2A74', + colone: '\u2254', + coloneq: '\u2254', + comma: '\u002C', + commat: '\u0040', + comp: '\u2201', + compfn: '\u2218', + complement: '\u2201', + complexes: '\u2102', + cong: '\u2245', + congdot: '\u2A6D', + Congruent: '\u2261', + Conint: '\u222F', + conint: '\u222E', + ContourIntegral: '\u222E', + Copf: '\u2102', + copf: '\uD835\uDD54', + coprod: '\u2210', + Coproduct: '\u2210', + COPY: '\u00A9', + copy: '\u00A9', + copysr: '\u2117', + CounterClockwiseContourIntegral: '\u2233', + crarr: '\u21B5', + Cross: '\u2A2F', + cross: '\u2717', + Cscr: '\uD835\uDC9E', + cscr: '\uD835\uDCB8', + csub: '\u2ACF', + csube: '\u2AD1', + csup: '\u2AD0', + csupe: '\u2AD2', + ctdot: '\u22EF', + cudarrl: '\u2938', + cudarrr: '\u2935', + cuepr: '\u22DE', + cuesc: '\u22DF', + cularr: '\u21B6', + cularrp: '\u293D', + Cup: '\u22D3', + cup: '\u222A', + cupbrcap: '\u2A48', + CupCap: '\u224D', + cupcap: '\u2A46', + cupcup: '\u2A4A', + cupdot: '\u228D', + cupor: '\u2A45', + cups: '\u222A\uFE00', + curarr: '\u21B7', + curarrm: '\u293C', + curlyeqprec: '\u22DE', + curlyeqsucc: '\u22DF', + curlyvee: '\u22CE', + curlywedge: '\u22CF', + curren: '\u00A4', + curvearrowleft: '\u21B6', + curvearrowright: '\u21B7', + cuvee: '\u22CE', + cuwed: '\u22CF', + cwconint: '\u2232', + cwint: '\u2231', + cylcty: '\u232D', + Dagger: '\u2021', + dagger: '\u2020', + daleth: '\u2138', + Darr: '\u21A1', + dArr: '\u21D3', + darr: '\u2193', + dash: '\u2010', + Dashv: '\u2AE4', + dashv: '\u22A3', + dbkarow: '\u290F', + dblac: '\u02DD', + Dcaron: '\u010E', + dcaron: '\u010F', + Dcy: '\u0414', + dcy: '\u0434', + DD: '\u2145', + dd: '\u2146', + ddagger: '\u2021', + ddarr: '\u21CA', + DDotrahd: '\u2911', + ddotseq: '\u2A77', + deg: '\u00B0', + Del: '\u2207', + Delta: '\u0394', + delta: '\u03B4', + demptyv: '\u29B1', + dfisht: '\u297F', + Dfr: '\uD835\uDD07', + dfr: '\uD835\uDD21', + dHar: '\u2965', + dharl: '\u21C3', + dharr: '\u21C2', + DiacriticalAcute: '\u00B4', + DiacriticalDot: '\u02D9', + DiacriticalDoubleAcute: '\u02DD', + DiacriticalGrave: '\u0060', + DiacriticalTilde: '\u02DC', + diam: '\u22C4', + Diamond: '\u22C4', + diamond: '\u22C4', + diamondsuit: '\u2666', + diams: '\u2666', + die: '\u00A8', + DifferentialD: '\u2146', + digamma: '\u03DD', + disin: '\u22F2', + div: '\u00F7', + divide: '\u00F7', + divideontimes: '\u22C7', + divonx: '\u22C7', + DJcy: '\u0402', + djcy: '\u0452', + dlcorn: '\u231E', + dlcrop: '\u230D', + dollar: '\u0024', + Dopf: '\uD835\uDD3B', + dopf: '\uD835\uDD55', + Dot: '\u00A8', + dot: '\u02D9', + DotDot: '\u20DC', + doteq: '\u2250', + doteqdot: '\u2251', + DotEqual: '\u2250', + dotminus: '\u2238', + dotplus: '\u2214', + dotsquare: '\u22A1', + doublebarwedge: '\u2306', + DoubleContourIntegral: '\u222F', + DoubleDot: '\u00A8', + DoubleDownArrow: '\u21D3', + DoubleLeftArrow: '\u21D0', + DoubleLeftRightArrow: '\u21D4', + DoubleLeftTee: '\u2AE4', + DoubleLongLeftArrow: '\u27F8', + DoubleLongLeftRightArrow: '\u27FA', + DoubleLongRightArrow: '\u27F9', + DoubleRightArrow: '\u21D2', + DoubleRightTee: '\u22A8', + DoubleUpArrow: '\u21D1', + DoubleUpDownArrow: '\u21D5', + DoubleVerticalBar: '\u2225', + DownArrow: '\u2193', + Downarrow: '\u21D3', + downarrow: '\u2193', + DownArrowBar: '\u2913', + DownArrowUpArrow: '\u21F5', + DownBreve: '\u0311', + downdownarrows: '\u21CA', + downharpoonleft: '\u21C3', + downharpoonright: '\u21C2', + DownLeftRightVector: '\u2950', + DownLeftTeeVector: '\u295E', + DownLeftVector: '\u21BD', + DownLeftVectorBar: '\u2956', + DownRightTeeVector: '\u295F', + DownRightVector: '\u21C1', + DownRightVectorBar: '\u2957', + DownTee: '\u22A4', + DownTeeArrow: '\u21A7', + drbkarow: '\u2910', + drcorn: '\u231F', + drcrop: '\u230C', + Dscr: '\uD835\uDC9F', + dscr: '\uD835\uDCB9', + DScy: '\u0405', + dscy: '\u0455', + dsol: '\u29F6', + Dstrok: '\u0110', + dstrok: '\u0111', + dtdot: '\u22F1', + dtri: '\u25BF', + dtrif: '\u25BE', + duarr: '\u21F5', + duhar: '\u296F', + dwangle: '\u29A6', + DZcy: '\u040F', + dzcy: '\u045F', + dzigrarr: '\u27FF', + Eacute: '\u00C9', + eacute: '\u00E9', + easter: '\u2A6E', + Ecaron: '\u011A', + ecaron: '\u011B', + ecir: '\u2256', + Ecirc: '\u00CA', + ecirc: '\u00EA', + ecolon: '\u2255', + Ecy: '\u042D', + ecy: '\u044D', + eDDot: '\u2A77', + Edot: '\u0116', + eDot: '\u2251', + edot: '\u0117', + ee: '\u2147', + efDot: '\u2252', + Efr: '\uD835\uDD08', + efr: '\uD835\uDD22', + eg: '\u2A9A', + Egrave: '\u00C8', + egrave: '\u00E8', + egs: '\u2A96', + egsdot: '\u2A98', + el: '\u2A99', + Element: '\u2208', + elinters: '\u23E7', + ell: '\u2113', + els: '\u2A95', + elsdot: '\u2A97', + Emacr: '\u0112', + emacr: '\u0113', + empty: '\u2205', + emptyset: '\u2205', + EmptySmallSquare: '\u25FB', + emptyv: '\u2205', + EmptyVerySmallSquare: '\u25AB', + emsp: '\u2003', + emsp13: '\u2004', + emsp14: '\u2005', + ENG: '\u014A', + eng: '\u014B', + ensp: '\u2002', + Eogon: '\u0118', + eogon: '\u0119', + Eopf: '\uD835\uDD3C', + eopf: '\uD835\uDD56', + epar: '\u22D5', + eparsl: '\u29E3', + eplus: '\u2A71', + epsi: '\u03B5', + Epsilon: '\u0395', + epsilon: '\u03B5', + epsiv: '\u03F5', + eqcirc: '\u2256', + eqcolon: '\u2255', + eqsim: '\u2242', + eqslantgtr: '\u2A96', + eqslantless: '\u2A95', + Equal: '\u2A75', + equals: '\u003D', + EqualTilde: '\u2242', + equest: '\u225F', + Equilibrium: '\u21CC', + equiv: '\u2261', + equivDD: '\u2A78', + eqvparsl: '\u29E5', + erarr: '\u2971', + erDot: '\u2253', + Escr: '\u2130', + escr: '\u212F', + esdot: '\u2250', + Esim: '\u2A73', + esim: '\u2242', + Eta: '\u0397', + eta: '\u03B7', + ETH: '\u00D0', + eth: '\u00F0', + Euml: '\u00CB', + euml: '\u00EB', + euro: '\u20AC', + excl: '\u0021', + exist: '\u2203', + Exists: '\u2203', + expectation: '\u2130', + ExponentialE: '\u2147', + exponentiale: '\u2147', + fallingdotseq: '\u2252', + Fcy: '\u0424', + fcy: '\u0444', + female: '\u2640', + ffilig: '\uFB03', + fflig: '\uFB00', + ffllig: '\uFB04', + Ffr: '\uD835\uDD09', + ffr: '\uD835\uDD23', + filig: '\uFB01', + FilledSmallSquare: '\u25FC', + FilledVerySmallSquare: '\u25AA', + fjlig: '\u0066\u006A', + flat: '\u266D', + fllig: '\uFB02', + fltns: '\u25B1', + fnof: '\u0192', + Fopf: '\uD835\uDD3D', + fopf: '\uD835\uDD57', + ForAll: '\u2200', + forall: '\u2200', + fork: '\u22D4', + forkv: '\u2AD9', + Fouriertrf: '\u2131', + fpartint: '\u2A0D', + frac12: '\u00BD', + frac13: '\u2153', + frac14: '\u00BC', + frac15: '\u2155', + frac16: '\u2159', + frac18: '\u215B', + frac23: '\u2154', + frac25: '\u2156', + frac34: '\u00BE', + frac35: '\u2157', + frac38: '\u215C', + frac45: '\u2158', + frac56: '\u215A', + frac58: '\u215D', + frac78: '\u215E', + frasl: '\u2044', + frown: '\u2322', + Fscr: '\u2131', + fscr: '\uD835\uDCBB', + gacute: '\u01F5', + Gamma: '\u0393', + gamma: '\u03B3', + Gammad: '\u03DC', + gammad: '\u03DD', + gap: '\u2A86', + Gbreve: '\u011E', + gbreve: '\u011F', + Gcedil: '\u0122', + Gcirc: '\u011C', + gcirc: '\u011D', + Gcy: '\u0413', + gcy: '\u0433', + Gdot: '\u0120', + gdot: '\u0121', + gE: '\u2267', + ge: '\u2265', + gEl: '\u2A8C', + gel: '\u22DB', + geq: '\u2265', + geqq: '\u2267', + geqslant: '\u2A7E', + ges: '\u2A7E', + gescc: '\u2AA9', + gesdot: '\u2A80', + gesdoto: '\u2A82', + gesdotol: '\u2A84', + gesl: '\u22DB\uFE00', + gesles: '\u2A94', + Gfr: '\uD835\uDD0A', + gfr: '\uD835\uDD24', + Gg: '\u22D9', + gg: '\u226B', + ggg: '\u22D9', + gimel: '\u2137', + GJcy: '\u0403', + gjcy: '\u0453', + gl: '\u2277', + gla: '\u2AA5', + glE: '\u2A92', + glj: '\u2AA4', + gnap: '\u2A8A', + gnapprox: '\u2A8A', + gnE: '\u2269', + gne: '\u2A88', + gneq: '\u2A88', + gneqq: '\u2269', + gnsim: '\u22E7', + Gopf: '\uD835\uDD3E', + gopf: '\uD835\uDD58', + grave: '\u0060', + GreaterEqual: '\u2265', + GreaterEqualLess: '\u22DB', + GreaterFullEqual: '\u2267', + GreaterGreater: '\u2AA2', + GreaterLess: '\u2277', + GreaterSlantEqual: '\u2A7E', + GreaterTilde: '\u2273', + Gscr: '\uD835\uDCA2', + gscr: '\u210A', + gsim: '\u2273', + gsime: '\u2A8E', + gsiml: '\u2A90', + Gt: '\u226B', + GT: '\u003E', + gt: '\u003E', + gtcc: '\u2AA7', + gtcir: '\u2A7A', + gtdot: '\u22D7', + gtlPar: '\u2995', + gtquest: '\u2A7C', + gtrapprox: '\u2A86', + gtrarr: '\u2978', + gtrdot: '\u22D7', + gtreqless: '\u22DB', + gtreqqless: '\u2A8C', + gtrless: '\u2277', + gtrsim: '\u2273', + gvertneqq: '\u2269\uFE00', + gvnE: '\u2269\uFE00', + Hacek: '\u02C7', + hairsp: '\u200A', + half: '\u00BD', + hamilt: '\u210B', + HARDcy: '\u042A', + hardcy: '\u044A', + hArr: '\u21D4', + harr: '\u2194', + harrcir: '\u2948', + harrw: '\u21AD', + Hat: '\u005E', + hbar: '\u210F', + Hcirc: '\u0124', + hcirc: '\u0125', + hearts: '\u2665', + heartsuit: '\u2665', + hellip: '\u2026', + hercon: '\u22B9', + Hfr: '\u210C', + hfr: '\uD835\uDD25', + HilbertSpace: '\u210B', + hksearow: '\u2925', + hkswarow: '\u2926', + hoarr: '\u21FF', + homtht: '\u223B', + hookleftarrow: '\u21A9', + hookrightarrow: '\u21AA', + Hopf: '\u210D', + hopf: '\uD835\uDD59', + horbar: '\u2015', + HorizontalLine: '\u2500', + Hscr: '\u210B', + hscr: '\uD835\uDCBD', + hslash: '\u210F', + Hstrok: '\u0126', + hstrok: '\u0127', + HumpDownHump: '\u224E', + HumpEqual: '\u224F', + hybull: '\u2043', + hyphen: '\u2010', + Iacute: '\u00CD', + iacute: '\u00ED', + ic: '\u2063', + Icirc: '\u00CE', + icirc: '\u00EE', + Icy: '\u0418', + icy: '\u0438', + Idot: '\u0130', + IEcy: '\u0415', + iecy: '\u0435', + iexcl: '\u00A1', + iff: '\u21D4', + Ifr: '\u2111', + ifr: '\uD835\uDD26', + Igrave: '\u00CC', + igrave: '\u00EC', + ii: '\u2148', + iiiint: '\u2A0C', + iiint: '\u222D', + iinfin: '\u29DC', + iiota: '\u2129', + IJlig: '\u0132', + ijlig: '\u0133', + Im: '\u2111', + Imacr: '\u012A', + imacr: '\u012B', + image: '\u2111', + ImaginaryI: '\u2148', + imagline: '\u2110', + imagpart: '\u2111', + imath: '\u0131', + imof: '\u22B7', + imped: '\u01B5', + Implies: '\u21D2', + in: '\u2208', + incare: '\u2105', + infin: '\u221E', + infintie: '\u29DD', + inodot: '\u0131', + Int: '\u222C', + int: '\u222B', + intcal: '\u22BA', + integers: '\u2124', + Integral: '\u222B', + intercal: '\u22BA', + Intersection: '\u22C2', + intlarhk: '\u2A17', + intprod: '\u2A3C', + InvisibleComma: '\u2063', + InvisibleTimes: '\u2062', + IOcy: '\u0401', + iocy: '\u0451', + Iogon: '\u012E', + iogon: '\u012F', + Iopf: '\uD835\uDD40', + iopf: '\uD835\uDD5A', + Iota: '\u0399', + iota: '\u03B9', + iprod: '\u2A3C', + iquest: '\u00BF', + Iscr: '\u2110', + iscr: '\uD835\uDCBE', + isin: '\u2208', + isindot: '\u22F5', + isinE: '\u22F9', + isins: '\u22F4', + isinsv: '\u22F3', + isinv: '\u2208', + it: '\u2062', + Itilde: '\u0128', + itilde: '\u0129', + Iukcy: '\u0406', + iukcy: '\u0456', + Iuml: '\u00CF', + iuml: '\u00EF', + Jcirc: '\u0134', + jcirc: '\u0135', + Jcy: '\u0419', + jcy: '\u0439', + Jfr: '\uD835\uDD0D', + jfr: '\uD835\uDD27', + jmath: '\u0237', + Jopf: '\uD835\uDD41', + jopf: '\uD835\uDD5B', + Jscr: '\uD835\uDCA5', + jscr: '\uD835\uDCBF', + Jsercy: '\u0408', + jsercy: '\u0458', + Jukcy: '\u0404', + jukcy: '\u0454', + Kappa: '\u039A', + kappa: '\u03BA', + kappav: '\u03F0', + Kcedil: '\u0136', + kcedil: '\u0137', + Kcy: '\u041A', + kcy: '\u043A', + Kfr: '\uD835\uDD0E', + kfr: '\uD835\uDD28', + kgreen: '\u0138', + KHcy: '\u0425', + khcy: '\u0445', + KJcy: '\u040C', + kjcy: '\u045C', + Kopf: '\uD835\uDD42', + kopf: '\uD835\uDD5C', + Kscr: '\uD835\uDCA6', + kscr: '\uD835\uDCC0', + lAarr: '\u21DA', + Lacute: '\u0139', + lacute: '\u013A', + laemptyv: '\u29B4', + lagran: '\u2112', + Lambda: '\u039B', + lambda: '\u03BB', + Lang: '\u27EA', + lang: '\u27E8', + langd: '\u2991', + langle: '\u27E8', + lap: '\u2A85', + Laplacetrf: '\u2112', + laquo: '\u00AB', + Larr: '\u219E', + lArr: '\u21D0', + larr: '\u2190', + larrb: '\u21E4', + larrbfs: '\u291F', + larrfs: '\u291D', + larrhk: '\u21A9', + larrlp: '\u21AB', + larrpl: '\u2939', + larrsim: '\u2973', + larrtl: '\u21A2', + lat: '\u2AAB', + lAtail: '\u291B', + latail: '\u2919', + late: '\u2AAD', + lates: '\u2AAD\uFE00', + lBarr: '\u290E', + lbarr: '\u290C', + lbbrk: '\u2772', + lbrace: '\u007B', + lbrack: '\u005B', + lbrke: '\u298B', + lbrksld: '\u298F', + lbrkslu: '\u298D', + Lcaron: '\u013D', + lcaron: '\u013E', + Lcedil: '\u013B', + lcedil: '\u013C', + lceil: '\u2308', + lcub: '\u007B', + Lcy: '\u041B', + lcy: '\u043B', + ldca: '\u2936', + ldquo: '\u201C', + ldquor: '\u201E', + ldrdhar: '\u2967', + ldrushar: '\u294B', + ldsh: '\u21B2', + lE: '\u2266', + le: '\u2264', + LeftAngleBracket: '\u27E8', + LeftArrow: '\u2190', + Leftarrow: '\u21D0', + leftarrow: '\u2190', + LeftArrowBar: '\u21E4', + LeftArrowRightArrow: '\u21C6', + leftarrowtail: '\u21A2', + LeftCeiling: '\u2308', + LeftDoubleBracket: '\u27E6', + LeftDownTeeVector: '\u2961', + LeftDownVector: '\u21C3', + LeftDownVectorBar: '\u2959', + LeftFloor: '\u230A', + leftharpoondown: '\u21BD', + leftharpoonup: '\u21BC', + leftleftarrows: '\u21C7', + LeftRightArrow: '\u2194', + Leftrightarrow: '\u21D4', + leftrightarrow: '\u2194', + leftrightarrows: '\u21C6', + leftrightharpoons: '\u21CB', + leftrightsquigarrow: '\u21AD', + LeftRightVector: '\u294E', + LeftTee: '\u22A3', + LeftTeeArrow: '\u21A4', + LeftTeeVector: '\u295A', + leftthreetimes: '\u22CB', + LeftTriangle: '\u22B2', + LeftTriangleBar: '\u29CF', + LeftTriangleEqual: '\u22B4', + LeftUpDownVector: '\u2951', + LeftUpTeeVector: '\u2960', + LeftUpVector: '\u21BF', + LeftUpVectorBar: '\u2958', + LeftVector: '\u21BC', + LeftVectorBar: '\u2952', + lEg: '\u2A8B', + leg: '\u22DA', + leq: '\u2264', + leqq: '\u2266', + leqslant: '\u2A7D', + les: '\u2A7D', + lescc: '\u2AA8', + lesdot: '\u2A7F', + lesdoto: '\u2A81', + lesdotor: '\u2A83', + lesg: '\u22DA\uFE00', + lesges: '\u2A93', + lessapprox: '\u2A85', + lessdot: '\u22D6', + lesseqgtr: '\u22DA', + lesseqqgtr: '\u2A8B', + LessEqualGreater: '\u22DA', + LessFullEqual: '\u2266', + LessGreater: '\u2276', + lessgtr: '\u2276', + LessLess: '\u2AA1', + lesssim: '\u2272', + LessSlantEqual: '\u2A7D', + LessTilde: '\u2272', + lfisht: '\u297C', + lfloor: '\u230A', + Lfr: '\uD835\uDD0F', + lfr: '\uD835\uDD29', + lg: '\u2276', + lgE: '\u2A91', + lHar: '\u2962', + lhard: '\u21BD', + lharu: '\u21BC', + lharul: '\u296A', + lhblk: '\u2584', + LJcy: '\u0409', + ljcy: '\u0459', + Ll: '\u22D8', + ll: '\u226A', + llarr: '\u21C7', + llcorner: '\u231E', + Lleftarrow: '\u21DA', + llhard: '\u296B', + lltri: '\u25FA', + Lmidot: '\u013F', + lmidot: '\u0140', + lmoust: '\u23B0', + lmoustache: '\u23B0', + lnap: '\u2A89', + lnapprox: '\u2A89', + lnE: '\u2268', + lne: '\u2A87', + lneq: '\u2A87', + lneqq: '\u2268', + lnsim: '\u22E6', + loang: '\u27EC', + loarr: '\u21FD', + lobrk: '\u27E6', + LongLeftArrow: '\u27F5', + Longleftarrow: '\u27F8', + longleftarrow: '\u27F5', + LongLeftRightArrow: '\u27F7', + Longleftrightarrow: '\u27FA', + longleftrightarrow: '\u27F7', + longmapsto: '\u27FC', + LongRightArrow: '\u27F6', + Longrightarrow: '\u27F9', + longrightarrow: '\u27F6', + looparrowleft: '\u21AB', + looparrowright: '\u21AC', + lopar: '\u2985', + Lopf: '\uD835\uDD43', + lopf: '\uD835\uDD5D', + loplus: '\u2A2D', + lotimes: '\u2A34', + lowast: '\u2217', + lowbar: '\u005F', + LowerLeftArrow: '\u2199', + LowerRightArrow: '\u2198', + loz: '\u25CA', + lozenge: '\u25CA', + lozf: '\u29EB', + lpar: '\u0028', + lparlt: '\u2993', + lrarr: '\u21C6', + lrcorner: '\u231F', + lrhar: '\u21CB', + lrhard: '\u296D', + lrm: '\u200E', + lrtri: '\u22BF', + lsaquo: '\u2039', + Lscr: '\u2112', + lscr: '\uD835\uDCC1', + Lsh: '\u21B0', + lsh: '\u21B0', + lsim: '\u2272', + lsime: '\u2A8D', + lsimg: '\u2A8F', + lsqb: '\u005B', + lsquo: '\u2018', + lsquor: '\u201A', + Lstrok: '\u0141', + lstrok: '\u0142', + Lt: '\u226A', + LT: '\u003C', + lt: '\u003C', + ltcc: '\u2AA6', + ltcir: '\u2A79', + ltdot: '\u22D6', + lthree: '\u22CB', + ltimes: '\u22C9', + ltlarr: '\u2976', + ltquest: '\u2A7B', + ltri: '\u25C3', + ltrie: '\u22B4', + ltrif: '\u25C2', + ltrPar: '\u2996', + lurdshar: '\u294A', + luruhar: '\u2966', + lvertneqq: '\u2268\uFE00', + lvnE: '\u2268\uFE00', + macr: '\u00AF', + male: '\u2642', + malt: '\u2720', + maltese: '\u2720', + Map: '\u2905', + map: '\u21A6', + mapsto: '\u21A6', + mapstodown: '\u21A7', + mapstoleft: '\u21A4', + mapstoup: '\u21A5', + marker: '\u25AE', + mcomma: '\u2A29', + Mcy: '\u041C', + mcy: '\u043C', + mdash: '\u2014', + mDDot: '\u223A', + measuredangle: '\u2221', + MediumSpace: '\u205F', + Mellintrf: '\u2133', + Mfr: '\uD835\uDD10', + mfr: '\uD835\uDD2A', + mho: '\u2127', + micro: '\u00B5', + mid: '\u2223', + midast: '\u002A', + midcir: '\u2AF0', + middot: '\u00B7', + minus: '\u2212', + minusb: '\u229F', + minusd: '\u2238', + minusdu: '\u2A2A', + MinusPlus: '\u2213', + mlcp: '\u2ADB', + mldr: '\u2026', + mnplus: '\u2213', + models: '\u22A7', + Mopf: '\uD835\uDD44', + mopf: '\uD835\uDD5E', + mp: '\u2213', + Mscr: '\u2133', + mscr: '\uD835\uDCC2', + mstpos: '\u223E', + Mu: '\u039C', + mu: '\u03BC', + multimap: '\u22B8', + mumap: '\u22B8', + nabla: '\u2207', + Nacute: '\u0143', + nacute: '\u0144', + nang: '\u2220\u20D2', + nap: '\u2249', + napE: '\u2A70\u0338', + napid: '\u224B\u0338', + napos: '\u0149', + napprox: '\u2249', + natur: '\u266E', + natural: '\u266E', + naturals: '\u2115', + nbsp: '\u00A0', + nbump: '\u224E\u0338', + nbumpe: '\u224F\u0338', + ncap: '\u2A43', + Ncaron: '\u0147', + ncaron: '\u0148', + Ncedil: '\u0145', + ncedil: '\u0146', + ncong: '\u2247', + ncongdot: '\u2A6D\u0338', + ncup: '\u2A42', + Ncy: '\u041D', + ncy: '\u043D', + ndash: '\u2013', + ne: '\u2260', + nearhk: '\u2924', + neArr: '\u21D7', + nearr: '\u2197', + nearrow: '\u2197', + nedot: '\u2250\u0338', + NegativeMediumSpace: '\u200B', + NegativeThickSpace: '\u200B', + NegativeThinSpace: '\u200B', + NegativeVeryThinSpace: '\u200B', + nequiv: '\u2262', + nesear: '\u2928', + nesim: '\u2242\u0338', + NestedGreaterGreater: '\u226B', + NestedLessLess: '\u226A', + NewLine: '\u000A', + nexist: '\u2204', + nexists: '\u2204', + Nfr: '\uD835\uDD11', + nfr: '\uD835\uDD2B', + ngE: '\u2267\u0338', + nge: '\u2271', + ngeq: '\u2271', + ngeqq: '\u2267\u0338', + ngeqslant: '\u2A7E\u0338', + nges: '\u2A7E\u0338', + nGg: '\u22D9\u0338', + ngsim: '\u2275', + nGt: '\u226B\u20D2', + ngt: '\u226F', + ngtr: '\u226F', + nGtv: '\u226B\u0338', + nhArr: '\u21CE', + nharr: '\u21AE', + nhpar: '\u2AF2', + ni: '\u220B', + nis: '\u22FC', + nisd: '\u22FA', + niv: '\u220B', + NJcy: '\u040A', + njcy: '\u045A', + nlArr: '\u21CD', + nlarr: '\u219A', + nldr: '\u2025', + nlE: '\u2266\u0338', + nle: '\u2270', + nLeftarrow: '\u21CD', + nleftarrow: '\u219A', + nLeftrightarrow: '\u21CE', + nleftrightarrow: '\u21AE', + nleq: '\u2270', + nleqq: '\u2266\u0338', + nleqslant: '\u2A7D\u0338', + nles: '\u2A7D\u0338', + nless: '\u226E', + nLl: '\u22D8\u0338', + nlsim: '\u2274', + nLt: '\u226A\u20D2', + nlt: '\u226E', + nltri: '\u22EA', + nltrie: '\u22EC', + nLtv: '\u226A\u0338', + nmid: '\u2224', + NoBreak: '\u2060', + NonBreakingSpace: '\u00A0', + Nopf: '\u2115', + nopf: '\uD835\uDD5F', + Not: '\u2AEC', + not: '\u00AC', + NotCongruent: '\u2262', + NotCupCap: '\u226D', + NotDoubleVerticalBar: '\u2226', + NotElement: '\u2209', + NotEqual: '\u2260', + NotEqualTilde: '\u2242\u0338', + NotExists: '\u2204', + NotGreater: '\u226F', + NotGreaterEqual: '\u2271', + NotGreaterFullEqual: '\u2267\u0338', + NotGreaterGreater: '\u226B\u0338', + NotGreaterLess: '\u2279', + NotGreaterSlantEqual: '\u2A7E\u0338', + NotGreaterTilde: '\u2275', + NotHumpDownHump: '\u224E\u0338', + NotHumpEqual: '\u224F\u0338', + notin: '\u2209', + notindot: '\u22F5\u0338', + notinE: '\u22F9\u0338', + notinva: '\u2209', + notinvb: '\u22F7', + notinvc: '\u22F6', + NotLeftTriangle: '\u22EA', + NotLeftTriangleBar: '\u29CF\u0338', + NotLeftTriangleEqual: '\u22EC', + NotLess: '\u226E', + NotLessEqual: '\u2270', + NotLessGreater: '\u2278', + NotLessLess: '\u226A\u0338', + NotLessSlantEqual: '\u2A7D\u0338', + NotLessTilde: '\u2274', + NotNestedGreaterGreater: '\u2AA2\u0338', + NotNestedLessLess: '\u2AA1\u0338', + notni: '\u220C', + notniva: '\u220C', + notnivb: '\u22FE', + notnivc: '\u22FD', + NotPrecedes: '\u2280', + NotPrecedesEqual: '\u2AAF\u0338', + NotPrecedesSlantEqual: '\u22E0', + NotReverseElement: '\u220C', + NotRightTriangle: '\u22EB', + NotRightTriangleBar: '\u29D0\u0338', + NotRightTriangleEqual: '\u22ED', + NotSquareSubset: '\u228F\u0338', + NotSquareSubsetEqual: '\u22E2', + NotSquareSuperset: '\u2290\u0338', + NotSquareSupersetEqual: '\u22E3', + NotSubset: '\u2282\u20D2', + NotSubsetEqual: '\u2288', + NotSucceeds: '\u2281', + NotSucceedsEqual: '\u2AB0\u0338', + NotSucceedsSlantEqual: '\u22E1', + NotSucceedsTilde: '\u227F\u0338', + NotSuperset: '\u2283\u20D2', + NotSupersetEqual: '\u2289', + NotTilde: '\u2241', + NotTildeEqual: '\u2244', + NotTildeFullEqual: '\u2247', + NotTildeTilde: '\u2249', + NotVerticalBar: '\u2224', + npar: '\u2226', + nparallel: '\u2226', + nparsl: '\u2AFD\u20E5', + npart: '\u2202\u0338', + npolint: '\u2A14', + npr: '\u2280', + nprcue: '\u22E0', + npre: '\u2AAF\u0338', + nprec: '\u2280', + npreceq: '\u2AAF\u0338', + nrArr: '\u21CF', + nrarr: '\u219B', + nrarrc: '\u2933\u0338', + nrarrw: '\u219D\u0338', + nRightarrow: '\u21CF', + nrightarrow: '\u219B', + nrtri: '\u22EB', + nrtrie: '\u22ED', + nsc: '\u2281', + nsccue: '\u22E1', + nsce: '\u2AB0\u0338', + Nscr: '\uD835\uDCA9', + nscr: '\uD835\uDCC3', + nshortmid: '\u2224', + nshortparallel: '\u2226', + nsim: '\u2241', + nsime: '\u2244', + nsimeq: '\u2244', + nsmid: '\u2224', + nspar: '\u2226', + nsqsube: '\u22E2', + nsqsupe: '\u22E3', + nsub: '\u2284', + nsubE: '\u2AC5\u0338', + nsube: '\u2288', + nsubset: '\u2282\u20D2', + nsubseteq: '\u2288', + nsubseteqq: '\u2AC5\u0338', + nsucc: '\u2281', + nsucceq: '\u2AB0\u0338', + nsup: '\u2285', + nsupE: '\u2AC6\u0338', + nsupe: '\u2289', + nsupset: '\u2283\u20D2', + nsupseteq: '\u2289', + nsupseteqq: '\u2AC6\u0338', + ntgl: '\u2279', + Ntilde: '\u00D1', + ntilde: '\u00F1', + ntlg: '\u2278', + ntriangleleft: '\u22EA', + ntrianglelefteq: '\u22EC', + ntriangleright: '\u22EB', + ntrianglerighteq: '\u22ED', + Nu: '\u039D', + nu: '\u03BD', + num: '\u0023', + numero: '\u2116', + numsp: '\u2007', + nvap: '\u224D\u20D2', + nVDash: '\u22AF', + nVdash: '\u22AE', + nvDash: '\u22AD', + nvdash: '\u22AC', + nvge: '\u2265\u20D2', + nvgt: '\u003E\u20D2', + nvHarr: '\u2904', + nvinfin: '\u29DE', + nvlArr: '\u2902', + nvle: '\u2264\u20D2', + nvlt: '\u003C\u20D2', + nvltrie: '\u22B4\u20D2', + nvrArr: '\u2903', + nvrtrie: '\u22B5\u20D2', + nvsim: '\u223C\u20D2', + nwarhk: '\u2923', + nwArr: '\u21D6', + nwarr: '\u2196', + nwarrow: '\u2196', + nwnear: '\u2927', + Oacute: '\u00D3', + oacute: '\u00F3', + oast: '\u229B', + ocir: '\u229A', + Ocirc: '\u00D4', + ocirc: '\u00F4', + Ocy: '\u041E', + ocy: '\u043E', + odash: '\u229D', + Odblac: '\u0150', + odblac: '\u0151', + odiv: '\u2A38', + odot: '\u2299', + odsold: '\u29BC', + OElig: '\u0152', + oelig: '\u0153', + ofcir: '\u29BF', + Ofr: '\uD835\uDD12', + ofr: '\uD835\uDD2C', + ogon: '\u02DB', + Ograve: '\u00D2', + ograve: '\u00F2', + ogt: '\u29C1', + ohbar: '\u29B5', + ohm: '\u03A9', + oint: '\u222E', + olarr: '\u21BA', + olcir: '\u29BE', + olcross: '\u29BB', + oline: '\u203E', + olt: '\u29C0', + Omacr: '\u014C', + omacr: '\u014D', + Omega: '\u03A9', + omega: '\u03C9', + Omicron: '\u039F', + omicron: '\u03BF', + omid: '\u29B6', + ominus: '\u2296', + Oopf: '\uD835\uDD46', + oopf: '\uD835\uDD60', + opar: '\u29B7', + OpenCurlyDoubleQuote: '\u201C', + OpenCurlyQuote: '\u2018', + operp: '\u29B9', + oplus: '\u2295', + Or: '\u2A54', + or: '\u2228', + orarr: '\u21BB', + ord: '\u2A5D', + order: '\u2134', + orderof: '\u2134', + ordf: '\u00AA', + ordm: '\u00BA', + origof: '\u22B6', + oror: '\u2A56', + orslope: '\u2A57', + orv: '\u2A5B', + oS: '\u24C8', + Oscr: '\uD835\uDCAA', + oscr: '\u2134', + Oslash: '\u00D8', + oslash: '\u00F8', + osol: '\u2298', + Otilde: '\u00D5', + otilde: '\u00F5', + Otimes: '\u2A37', + otimes: '\u2297', + otimesas: '\u2A36', + Ouml: '\u00D6', + ouml: '\u00F6', + ovbar: '\u233D', + OverBar: '\u203E', + OverBrace: '\u23DE', + OverBracket: '\u23B4', + OverParenthesis: '\u23DC', + par: '\u2225', + para: '\u00B6', + parallel: '\u2225', + parsim: '\u2AF3', + parsl: '\u2AFD', + part: '\u2202', + PartialD: '\u2202', + Pcy: '\u041F', + pcy: '\u043F', + percnt: '\u0025', + period: '\u002E', + permil: '\u2030', + perp: '\u22A5', + pertenk: '\u2031', + Pfr: '\uD835\uDD13', + pfr: '\uD835\uDD2D', + Phi: '\u03A6', + phi: '\u03C6', + phiv: '\u03D5', + phmmat: '\u2133', + phone: '\u260E', + Pi: '\u03A0', + pi: '\u03C0', + pitchfork: '\u22D4', + piv: '\u03D6', + planck: '\u210F', + planckh: '\u210E', + plankv: '\u210F', + plus: '\u002B', + plusacir: '\u2A23', + plusb: '\u229E', + pluscir: '\u2A22', + plusdo: '\u2214', + plusdu: '\u2A25', + pluse: '\u2A72', + PlusMinus: '\u00B1', + plusmn: '\u00B1', + plussim: '\u2A26', + plustwo: '\u2A27', + pm: '\u00B1', + Poincareplane: '\u210C', + pointint: '\u2A15', + Popf: '\u2119', + popf: '\uD835\uDD61', + pound: '\u00A3', + Pr: '\u2ABB', + pr: '\u227A', + prap: '\u2AB7', + prcue: '\u227C', + prE: '\u2AB3', + pre: '\u2AAF', + prec: '\u227A', + precapprox: '\u2AB7', + preccurlyeq: '\u227C', + Precedes: '\u227A', + PrecedesEqual: '\u2AAF', + PrecedesSlantEqual: '\u227C', + PrecedesTilde: '\u227E', + preceq: '\u2AAF', + precnapprox: '\u2AB9', + precneqq: '\u2AB5', + precnsim: '\u22E8', + precsim: '\u227E', + Prime: '\u2033', + prime: '\u2032', + primes: '\u2119', + prnap: '\u2AB9', + prnE: '\u2AB5', + prnsim: '\u22E8', + prod: '\u220F', + Product: '\u220F', + profalar: '\u232E', + profline: '\u2312', + profsurf: '\u2313', + prop: '\u221D', + Proportion: '\u2237', + Proportional: '\u221D', + propto: '\u221D', + prsim: '\u227E', + prurel: '\u22B0', + Pscr: '\uD835\uDCAB', + pscr: '\uD835\uDCC5', + Psi: '\u03A8', + psi: '\u03C8', + puncsp: '\u2008', + Qfr: '\uD835\uDD14', + qfr: '\uD835\uDD2E', + qint: '\u2A0C', + Qopf: '\u211A', + qopf: '\uD835\uDD62', + qprime: '\u2057', + Qscr: '\uD835\uDCAC', + qscr: '\uD835\uDCC6', + quaternions: '\u210D', + quatint: '\u2A16', + quest: '\u003F', + questeq: '\u225F', + QUOT: '\u0022', + quot: '\u0022', + rAarr: '\u21DB', + race: '\u223D\u0331', + Racute: '\u0154', + racute: '\u0155', + radic: '\u221A', + raemptyv: '\u29B3', + Rang: '\u27EB', + rang: '\u27E9', + rangd: '\u2992', + range: '\u29A5', + rangle: '\u27E9', + raquo: '\u00BB', + Rarr: '\u21A0', + rArr: '\u21D2', + rarr: '\u2192', + rarrap: '\u2975', + rarrb: '\u21E5', + rarrbfs: '\u2920', + rarrc: '\u2933', + rarrfs: '\u291E', + rarrhk: '\u21AA', + rarrlp: '\u21AC', + rarrpl: '\u2945', + rarrsim: '\u2974', + Rarrtl: '\u2916', + rarrtl: '\u21A3', + rarrw: '\u219D', + rAtail: '\u291C', + ratail: '\u291A', + ratio: '\u2236', + rationals: '\u211A', + RBarr: '\u2910', + rBarr: '\u290F', + rbarr: '\u290D', + rbbrk: '\u2773', + rbrace: '\u007D', + rbrack: '\u005D', + rbrke: '\u298C', + rbrksld: '\u298E', + rbrkslu: '\u2990', + Rcaron: '\u0158', + rcaron: '\u0159', + Rcedil: '\u0156', + rcedil: '\u0157', + rceil: '\u2309', + rcub: '\u007D', + Rcy: '\u0420', + rcy: '\u0440', + rdca: '\u2937', + rdldhar: '\u2969', + rdquo: '\u201D', + rdquor: '\u201D', + rdsh: '\u21B3', + Re: '\u211C', + real: '\u211C', + realine: '\u211B', + realpart: '\u211C', + reals: '\u211D', + rect: '\u25AD', + REG: '\u00AE', + reg: '\u00AE', + ReverseElement: '\u220B', + ReverseEquilibrium: '\u21CB', + ReverseUpEquilibrium: '\u296F', + rfisht: '\u297D', + rfloor: '\u230B', + Rfr: '\u211C', + rfr: '\uD835\uDD2F', + rHar: '\u2964', + rhard: '\u21C1', + rharu: '\u21C0', + rharul: '\u296C', + Rho: '\u03A1', + rho: '\u03C1', + rhov: '\u03F1', + RightAngleBracket: '\u27E9', + RightArrow: '\u2192', + Rightarrow: '\u21D2', + rightarrow: '\u2192', + RightArrowBar: '\u21E5', + RightArrowLeftArrow: '\u21C4', + rightarrowtail: '\u21A3', + RightCeiling: '\u2309', + RightDoubleBracket: '\u27E7', + RightDownTeeVector: '\u295D', + RightDownVector: '\u21C2', + RightDownVectorBar: '\u2955', + RightFloor: '\u230B', + rightharpoondown: '\u21C1', + rightharpoonup: '\u21C0', + rightleftarrows: '\u21C4', + rightleftharpoons: '\u21CC', + rightrightarrows: '\u21C9', + rightsquigarrow: '\u219D', + RightTee: '\u22A2', + RightTeeArrow: '\u21A6', + RightTeeVector: '\u295B', + rightthreetimes: '\u22CC', + RightTriangle: '\u22B3', + RightTriangleBar: '\u29D0', + RightTriangleEqual: '\u22B5', + RightUpDownVector: '\u294F', + RightUpTeeVector: '\u295C', + RightUpVector: '\u21BE', + RightUpVectorBar: '\u2954', + RightVector: '\u21C0', + RightVectorBar: '\u2953', + ring: '\u02DA', + risingdotseq: '\u2253', + rlarr: '\u21C4', + rlhar: '\u21CC', + rlm: '\u200F', + rmoust: '\u23B1', + rmoustache: '\u23B1', + rnmid: '\u2AEE', + roang: '\u27ED', + roarr: '\u21FE', + robrk: '\u27E7', + ropar: '\u2986', + Ropf: '\u211D', + ropf: '\uD835\uDD63', + roplus: '\u2A2E', + rotimes: '\u2A35', + RoundImplies: '\u2970', + rpar: '\u0029', + rpargt: '\u2994', + rppolint: '\u2A12', + rrarr: '\u21C9', + Rrightarrow: '\u21DB', + rsaquo: '\u203A', + Rscr: '\u211B', + rscr: '\uD835\uDCC7', + Rsh: '\u21B1', + rsh: '\u21B1', + rsqb: '\u005D', + rsquo: '\u2019', + rsquor: '\u2019', + rthree: '\u22CC', + rtimes: '\u22CA', + rtri: '\u25B9', + rtrie: '\u22B5', + rtrif: '\u25B8', + rtriltri: '\u29CE', + RuleDelayed: '\u29F4', + ruluhar: '\u2968', + rx: '\u211E', + Sacute: '\u015A', + sacute: '\u015B', + sbquo: '\u201A', + Sc: '\u2ABC', + sc: '\u227B', + scap: '\u2AB8', + Scaron: '\u0160', + scaron: '\u0161', + sccue: '\u227D', + scE: '\u2AB4', + sce: '\u2AB0', + Scedil: '\u015E', + scedil: '\u015F', + Scirc: '\u015C', + scirc: '\u015D', + scnap: '\u2ABA', + scnE: '\u2AB6', + scnsim: '\u22E9', + scpolint: '\u2A13', + scsim: '\u227F', + Scy: '\u0421', + scy: '\u0441', + sdot: '\u22C5', + sdotb: '\u22A1', + sdote: '\u2A66', + searhk: '\u2925', + seArr: '\u21D8', + searr: '\u2198', + searrow: '\u2198', + sect: '\u00A7', + semi: '\u003B', + seswar: '\u2929', + setminus: '\u2216', + setmn: '\u2216', + sext: '\u2736', + Sfr: '\uD835\uDD16', + sfr: '\uD835\uDD30', + sfrown: '\u2322', + sharp: '\u266F', + SHCHcy: '\u0429', + shchcy: '\u0449', + SHcy: '\u0428', + shcy: '\u0448', + ShortDownArrow: '\u2193', + ShortLeftArrow: '\u2190', + shortmid: '\u2223', + shortparallel: '\u2225', + ShortRightArrow: '\u2192', + ShortUpArrow: '\u2191', + shy: '\u00AD', + Sigma: '\u03A3', + sigma: '\u03C3', + sigmaf: '\u03C2', + sigmav: '\u03C2', + sim: '\u223C', + simdot: '\u2A6A', + sime: '\u2243', + simeq: '\u2243', + simg: '\u2A9E', + simgE: '\u2AA0', + siml: '\u2A9D', + simlE: '\u2A9F', + simne: '\u2246', + simplus: '\u2A24', + simrarr: '\u2972', + slarr: '\u2190', + SmallCircle: '\u2218', + smallsetminus: '\u2216', + smashp: '\u2A33', + smeparsl: '\u29E4', + smid: '\u2223', + smile: '\u2323', + smt: '\u2AAA', + smte: '\u2AAC', + smtes: '\u2AAC\uFE00', + SOFTcy: '\u042C', + softcy: '\u044C', + sol: '\u002F', + solb: '\u29C4', + solbar: '\u233F', + Sopf: '\uD835\uDD4A', + sopf: '\uD835\uDD64', + spades: '\u2660', + spadesuit: '\u2660', + spar: '\u2225', + sqcap: '\u2293', + sqcaps: '\u2293\uFE00', + sqcup: '\u2294', + sqcups: '\u2294\uFE00', + Sqrt: '\u221A', + sqsub: '\u228F', + sqsube: '\u2291', + sqsubset: '\u228F', + sqsubseteq: '\u2291', + sqsup: '\u2290', + sqsupe: '\u2292', + sqsupset: '\u2290', + sqsupseteq: '\u2292', + squ: '\u25A1', + Square: '\u25A1', + square: '\u25A1', + SquareIntersection: '\u2293', + SquareSubset: '\u228F', + SquareSubsetEqual: '\u2291', + SquareSuperset: '\u2290', + SquareSupersetEqual: '\u2292', + SquareUnion: '\u2294', + squarf: '\u25AA', + squf: '\u25AA', + srarr: '\u2192', + Sscr: '\uD835\uDCAE', + sscr: '\uD835\uDCC8', + ssetmn: '\u2216', + ssmile: '\u2323', + sstarf: '\u22C6', + Star: '\u22C6', + star: '\u2606', + starf: '\u2605', + straightepsilon: '\u03F5', + straightphi: '\u03D5', + strns: '\u00AF', + Sub: '\u22D0', + sub: '\u2282', + subdot: '\u2ABD', + subE: '\u2AC5', + sube: '\u2286', + subedot: '\u2AC3', + submult: '\u2AC1', + subnE: '\u2ACB', + subne: '\u228A', + subplus: '\u2ABF', + subrarr: '\u2979', + Subset: '\u22D0', + subset: '\u2282', + subseteq: '\u2286', + subseteqq: '\u2AC5', + SubsetEqual: '\u2286', + subsetneq: '\u228A', + subsetneqq: '\u2ACB', + subsim: '\u2AC7', + subsub: '\u2AD5', + subsup: '\u2AD3', + succ: '\u227B', + succapprox: '\u2AB8', + succcurlyeq: '\u227D', + Succeeds: '\u227B', + SucceedsEqual: '\u2AB0', + SucceedsSlantEqual: '\u227D', + SucceedsTilde: '\u227F', + succeq: '\u2AB0', + succnapprox: '\u2ABA', + succneqq: '\u2AB6', + succnsim: '\u22E9', + succsim: '\u227F', + SuchThat: '\u220B', + Sum: '\u2211', + sum: '\u2211', + sung: '\u266A', + Sup: '\u22D1', + sup: '\u2283', + sup1: '\u00B9', + sup2: '\u00B2', + sup3: '\u00B3', + supdot: '\u2ABE', + supdsub: '\u2AD8', + supE: '\u2AC6', + supe: '\u2287', + supedot: '\u2AC4', + Superset: '\u2283', + SupersetEqual: '\u2287', + suphsol: '\u27C9', + suphsub: '\u2AD7', + suplarr: '\u297B', + supmult: '\u2AC2', + supnE: '\u2ACC', + supne: '\u228B', + supplus: '\u2AC0', + Supset: '\u22D1', + supset: '\u2283', + supseteq: '\u2287', + supseteqq: '\u2AC6', + supsetneq: '\u228B', + supsetneqq: '\u2ACC', + supsim: '\u2AC8', + supsub: '\u2AD4', + supsup: '\u2AD6', + swarhk: '\u2926', + swArr: '\u21D9', + swarr: '\u2199', + swarrow: '\u2199', + swnwar: '\u292A', + szlig: '\u00DF', + Tab: '\u0009', + target: '\u2316', + Tau: '\u03A4', + tau: '\u03C4', + tbrk: '\u23B4', + Tcaron: '\u0164', + tcaron: '\u0165', + Tcedil: '\u0162', + tcedil: '\u0163', + Tcy: '\u0422', + tcy: '\u0442', + tdot: '\u20DB', + telrec: '\u2315', + Tfr: '\uD835\uDD17', + tfr: '\uD835\uDD31', + there4: '\u2234', + Therefore: '\u2234', + therefore: '\u2234', + Theta: '\u0398', + theta: '\u03B8', + thetasym: '\u03D1', + thetav: '\u03D1', + thickapprox: '\u2248', + thicksim: '\u223C', + ThickSpace: '\u205F\u200A', + thinsp: '\u2009', + ThinSpace: '\u2009', + thkap: '\u2248', + thksim: '\u223C', + THORN: '\u00DE', + thorn: '\u00FE', + Tilde: '\u223C', + tilde: '\u02DC', + TildeEqual: '\u2243', + TildeFullEqual: '\u2245', + TildeTilde: '\u2248', + times: '\u00D7', + timesb: '\u22A0', + timesbar: '\u2A31', + timesd: '\u2A30', + tint: '\u222D', + toea: '\u2928', + top: '\u22A4', + topbot: '\u2336', + topcir: '\u2AF1', + Topf: '\uD835\uDD4B', + topf: '\uD835\uDD65', + topfork: '\u2ADA', + tosa: '\u2929', + tprime: '\u2034', + TRADE: '\u2122', + trade: '\u2122', + triangle: '\u25B5', + triangledown: '\u25BF', + triangleleft: '\u25C3', + trianglelefteq: '\u22B4', + triangleq: '\u225C', + triangleright: '\u25B9', + trianglerighteq: '\u22B5', + tridot: '\u25EC', + trie: '\u225C', + triminus: '\u2A3A', + TripleDot: '\u20DB', + triplus: '\u2A39', + trisb: '\u29CD', + tritime: '\u2A3B', + trpezium: '\u23E2', + Tscr: '\uD835\uDCAF', + tscr: '\uD835\uDCC9', + TScy: '\u0426', + tscy: '\u0446', + TSHcy: '\u040B', + tshcy: '\u045B', + Tstrok: '\u0166', + tstrok: '\u0167', + twixt: '\u226C', + twoheadleftarrow: '\u219E', + twoheadrightarrow: '\u21A0', + Uacute: '\u00DA', + uacute: '\u00FA', + Uarr: '\u219F', + uArr: '\u21D1', + uarr: '\u2191', + Uarrocir: '\u2949', + Ubrcy: '\u040E', + ubrcy: '\u045E', + Ubreve: '\u016C', + ubreve: '\u016D', + Ucirc: '\u00DB', + ucirc: '\u00FB', + Ucy: '\u0423', + ucy: '\u0443', + udarr: '\u21C5', + Udblac: '\u0170', + udblac: '\u0171', + udhar: '\u296E', + ufisht: '\u297E', + Ufr: '\uD835\uDD18', + ufr: '\uD835\uDD32', + Ugrave: '\u00D9', + ugrave: '\u00F9', + uHar: '\u2963', + uharl: '\u21BF', + uharr: '\u21BE', + uhblk: '\u2580', + ulcorn: '\u231C', + ulcorner: '\u231C', + ulcrop: '\u230F', + ultri: '\u25F8', + Umacr: '\u016A', + umacr: '\u016B', + uml: '\u00A8', + UnderBar: '\u005F', + UnderBrace: '\u23DF', + UnderBracket: '\u23B5', + UnderParenthesis: '\u23DD', + Union: '\u22C3', + UnionPlus: '\u228E', + Uogon: '\u0172', + uogon: '\u0173', + Uopf: '\uD835\uDD4C', + uopf: '\uD835\uDD66', + UpArrow: '\u2191', + Uparrow: '\u21D1', + uparrow: '\u2191', + UpArrowBar: '\u2912', + UpArrowDownArrow: '\u21C5', + UpDownArrow: '\u2195', + Updownarrow: '\u21D5', + updownarrow: '\u2195', + UpEquilibrium: '\u296E', + upharpoonleft: '\u21BF', + upharpoonright: '\u21BE', + uplus: '\u228E', + UpperLeftArrow: '\u2196', + UpperRightArrow: '\u2197', + Upsi: '\u03D2', + upsi: '\u03C5', + upsih: '\u03D2', + Upsilon: '\u03A5', + upsilon: '\u03C5', + UpTee: '\u22A5', + UpTeeArrow: '\u21A5', + upuparrows: '\u21C8', + urcorn: '\u231D', + urcorner: '\u231D', + urcrop: '\u230E', + Uring: '\u016E', + uring: '\u016F', + urtri: '\u25F9', + Uscr: '\uD835\uDCB0', + uscr: '\uD835\uDCCA', + utdot: '\u22F0', + Utilde: '\u0168', + utilde: '\u0169', + utri: '\u25B5', + utrif: '\u25B4', + uuarr: '\u21C8', + Uuml: '\u00DC', + uuml: '\u00FC', + uwangle: '\u29A7', + vangrt: '\u299C', + varepsilon: '\u03F5', + varkappa: '\u03F0', + varnothing: '\u2205', + varphi: '\u03D5', + varpi: '\u03D6', + varpropto: '\u221D', + vArr: '\u21D5', + varr: '\u2195', + varrho: '\u03F1', + varsigma: '\u03C2', + varsubsetneq: '\u228A\uFE00', + varsubsetneqq: '\u2ACB\uFE00', + varsupsetneq: '\u228B\uFE00', + varsupsetneqq: '\u2ACC\uFE00', + vartheta: '\u03D1', + vartriangleleft: '\u22B2', + vartriangleright: '\u22B3', + Vbar: '\u2AEB', + vBar: '\u2AE8', + vBarv: '\u2AE9', + Vcy: '\u0412', + vcy: '\u0432', + VDash: '\u22AB', + Vdash: '\u22A9', + vDash: '\u22A8', + vdash: '\u22A2', + Vdashl: '\u2AE6', + Vee: '\u22C1', + vee: '\u2228', + veebar: '\u22BB', + veeeq: '\u225A', + vellip: '\u22EE', + Verbar: '\u2016', + verbar: '\u007C', + Vert: '\u2016', + vert: '\u007C', + VerticalBar: '\u2223', + VerticalLine: '\u007C', + VerticalSeparator: '\u2758', + VerticalTilde: '\u2240', + VeryThinSpace: '\u200A', + Vfr: '\uD835\uDD19', + vfr: '\uD835\uDD33', + vltri: '\u22B2', + vnsub: '\u2282\u20D2', + vnsup: '\u2283\u20D2', + Vopf: '\uD835\uDD4D', + vopf: '\uD835\uDD67', + vprop: '\u221D', + vrtri: '\u22B3', + Vscr: '\uD835\uDCB1', + vscr: '\uD835\uDCCB', + vsubnE: '\u2ACB\uFE00', + vsubne: '\u228A\uFE00', + vsupnE: '\u2ACC\uFE00', + vsupne: '\u228B\uFE00', + Vvdash: '\u22AA', + vzigzag: '\u299A', + Wcirc: '\u0174', + wcirc: '\u0175', + wedbar: '\u2A5F', + Wedge: '\u22C0', + wedge: '\u2227', + wedgeq: '\u2259', + weierp: '\u2118', + Wfr: '\uD835\uDD1A', + wfr: '\uD835\uDD34', + Wopf: '\uD835\uDD4E', + wopf: '\uD835\uDD68', + wp: '\u2118', + wr: '\u2240', + wreath: '\u2240', + Wscr: '\uD835\uDCB2', + wscr: '\uD835\uDCCC', + xcap: '\u22C2', + xcirc: '\u25EF', + xcup: '\u22C3', + xdtri: '\u25BD', + Xfr: '\uD835\uDD1B', + xfr: '\uD835\uDD35', + xhArr: '\u27FA', + xharr: '\u27F7', + Xi: '\u039E', + xi: '\u03BE', + xlArr: '\u27F8', + xlarr: '\u27F5', + xmap: '\u27FC', + xnis: '\u22FB', + xodot: '\u2A00', + Xopf: '\uD835\uDD4F', + xopf: '\uD835\uDD69', + xoplus: '\u2A01', + xotime: '\u2A02', + xrArr: '\u27F9', + xrarr: '\u27F6', + Xscr: '\uD835\uDCB3', + xscr: '\uD835\uDCCD', + xsqcup: '\u2A06', + xuplus: '\u2A04', + xutri: '\u25B3', + xvee: '\u22C1', + xwedge: '\u22C0', + Yacute: '\u00DD', + yacute: '\u00FD', + YAcy: '\u042F', + yacy: '\u044F', + Ycirc: '\u0176', + ycirc: '\u0177', + Ycy: '\u042B', + ycy: '\u044B', + yen: '\u00A5', + Yfr: '\uD835\uDD1C', + yfr: '\uD835\uDD36', + YIcy: '\u0407', + yicy: '\u0457', + Yopf: '\uD835\uDD50', + yopf: '\uD835\uDD6A', + Yscr: '\uD835\uDCB4', + yscr: '\uD835\uDCCE', + YUcy: '\u042E', + yucy: '\u044E', + Yuml: '\u0178', + yuml: '\u00FF', + Zacute: '\u0179', + zacute: '\u017A', + Zcaron: '\u017D', + zcaron: '\u017E', + Zcy: '\u0417', + zcy: '\u0437', + Zdot: '\u017B', + zdot: '\u017C', + zeetrf: '\u2128', + ZeroWidthSpace: '\u200B', + Zeta: '\u0396', + zeta: '\u03B6', + Zfr: '\u2128', + zfr: '\uD835\uDD37', + ZHcy: '\u0416', + zhcy: '\u0436', + zigrarr: '\u21DD', + Zopf: '\u2124', + zopf: '\uD835\uDD6B', + Zscr: '\uD835\uDCB5', + zscr: '\uD835\uDCCF', + zwj: '\u200D', + zwnj: '\u200C', +}); + +/** + * @deprecated use `HTML_ENTITIES` instead + * @see HTML_ENTITIES + */ +exports.entityMap = exports.HTML_ENTITIES; + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +var NAMESPACE = __webpack_require__(17).NAMESPACE; + +//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +//[5] Name ::= NameStartChar (NameChar)* +var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF +var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"); +var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); +//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ +//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') + +//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE +//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE +var S_TAG = 0;//tag name offerring +var S_ATTR = 1;//attr name offerring +var S_ATTR_SPACE=2;//attr name end and space offer +var S_EQ = 3;//=space? +var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only) +var S_ATTR_END = 5;//attr value end and no space(quot end) +var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer) +var S_TAG_CLOSE = 7;//closed el + +/** + * Creates an error that will not be caught by XMLReader aka the SAX parser. + * + * @param {string} message + * @param {any?} locator Optional, can provide details about the location in the source + * @constructor + */ +function ParseError(message, locator) { + this.message = message + this.locator = locator + if(Error.captureStackTrace) Error.captureStackTrace(this, ParseError); +} +ParseError.prototype = new Error(); +ParseError.prototype.name = ParseError.name + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if (Object.hasOwnProperty.call(entityMap, k)) { + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + if(end>start){ + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + } + function position(p,m){ + while(p>=lineEnd && (m = linePattern.exec(source))){ + lineStart = m.index; + lineEnd = lineStart + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = p-lineStart+1; + } + var lineStart = 0; + var lineEnd = 0; + var linePattern = /.*(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + try{ + var tagStart = source.indexOf('<',start); + if(tagStart<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.doc; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(tagStart>start){ + appendText(tagStart); + } + switch(source.charAt(tagStart+1)){ + case '/': + var end = source.indexOf('>',tagStart+3); + var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, ''); + var config = parseStack.pop(); + if(end<0){ + + tagName = source.substring(tagStart+2).replace(/[\s<].*/,''); + errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName); + end = tagStart+1+tagName.length; + }else if(tagName.match(/\s + locator&&position(tagStart); + end = parseInstruction(source,tagStart,domBuilder); + break; + case '!':// start){ + start = end; + }else{ + //TODO: 这里有可能sax回退,有位置错误风险 + appendText(Math.max(tagStart,start)+1); + } + } +} +function copyLocator(f,t){ + t.lineNumber = f.lineNumber; + t.columnNumber = f.columnNumber; + return t; +} + +/** + * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){ + + /** + * @param {string} qname + * @param {string} value + * @param {number} startIndex + */ + function addAttribute(qname, value, startIndex) { + if (el.attributeNames.hasOwnProperty(qname)) { + errorHandler.fatalError('Attribute ' + qname + ' redefined') + } + el.addValue( + qname, + // @see https://www.w3.org/TR/xml/#AVNormalize + // since the xmldom sax parser does not "interpret" DTD the following is not implemented: + // - recursive replacement of (DTD) entity references + // - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA + value.replace(/[\t\n\r]/g, ' ').replace(/&#?\w+;/g, entityReplacer), + startIndex + ) + } + var attrName; + var value; + var p = ++start; + var s = S_TAG;//status + while(true){ + var c = source.charAt(p); + switch(c){ + case '=': + if(s === S_ATTR){//attrName + attrName = source.slice(start,p); + s = S_EQ; + }else if(s === S_ATTR_SPACE){ + s = S_EQ; + }else{ + //fatalError: equal must after attrName or space after attrName + throw new Error('attribute equal must after attrName'); // No known test case + } + break; + case '\'': + case '"': + if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE + ){//equal + if(s === S_ATTR){ + errorHandler.warning('attribute value must after "="') + attrName = source.slice(start,p) + } + start = p+1; + p = source.indexOf(c,start) + if(p>0){ + value = source.slice(start, p); + addAttribute(attrName, value, start-1); + s = S_ATTR_END; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_ATTR_NOQUOT_VALUE){ + value = source.slice(start, p); + addAttribute(attrName, value, start); + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_ATTR_END + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); // No known test case + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + s =S_TAG_CLOSE; + el.closed = true; + case S_ATTR_NOQUOT_VALUE: + case S_ATTR: + break; + case S_ATTR_SPACE: + el.closed = true; + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") // No known test case + } + break; + case ''://end document + errorHandler.error('unexpected end of input'); + if(s == S_TAG){ + el.setTagName(source.slice(start,p)); + } + return p; + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + break;//normal + case S_ATTR_NOQUOT_VALUE://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_SPACE: + if(s === S_ATTR_SPACE){ + value = attrName; + } + if(s == S_ATTR_NOQUOT_VALUE){ + errorHandler.warning('attribute "'+value+'" missed quot(")!'); + addAttribute(attrName, value, start) + }else{ + if(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + } + addAttribute(value, value, start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_TAG_SPACE; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_SPACE; + break; + case S_ATTR_NOQUOT_VALUE: + var value = source.slice(start, p); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + addAttribute(attrName, value, start) + case S_ATTR_END: + s = S_TAG_SPACE; + break; + //case S_TAG_SPACE: + //case S_EQ: + //case S_ATTR_SPACE: + // void();break; + //case S_TAG_CLOSE: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE +//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_ATTR_NOQUOT_VALUE:void();break; + case S_ATTR_SPACE: + var tagName = el.tagName; + if (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) { + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!') + } + addAttribute(attrName, attrName, start); + start = p; + s = S_ATTR; + break; + case S_ATTR_END: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_TAG_SPACE: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_ATTR_NOQUOT_VALUE; + start = p; + break; + case S_TAG_CLOSE: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + }//end outer switch + //console.log('p++',p) + p++; + } +} +/** + * @return true if has new namespace define + */ +function appendElement(el,domBuilder,currentNSMap){ + var tagName = el.tagName; + var localNSMap = null; + //var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = NAMESPACE.XMLNS + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = NAMESPACE.XML; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix || ''] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for (prefix in localNSMap) { + if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) { + domBuilder.endPrefixMapping(prefix); + } + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + //parseStack.push(el); + return true; + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = source.lastIndexOf('') + if(pos',start+4); + //append comment source.substring(4,end)//", + input: "__KEY__=__DATA__" + }, + post: { + value: "" + "" + "__IDENTIFIER__" + "" + "" + "" + "" + "" + "__RAWDATAOUTPUT__" + "" + "" + "", + input: "" + "__KEY__" + "" + "__DATA__" + "" + "" + } + }, + /** + * Namespace par defaut de la requete POST. + * + * @returns {String} namespace + */ + namespaceByDefault: function namespaceByDefault() { + var ns = ["xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "xmlns=\"http://www.opengis.net/wps/1.0.0\"", "xmlns:wfs=\"http://www.opengis.net/wfs\"", "xmlns:wps=\"http://www.opengis.net/wps/1.0.0\"", "xmlns:ows=\"http://www.opengis.net/ows/1.1\"", "xmlns:gml=\"http://www.opengis.net/gml\"", "xmlns:ogc=\"http://www.opengis.net/ogc\"", "xmlns:wcs=\"http://www.opengis.net/wcs/1.1.1\"", "xmlns:xlink=\"http://www.w3.org/1999/xlink\""]; + return ns.join(" "); + }, + /** + * Schemalocation par defaut. + * + * @returns {String} schemaLocation + */ + schemaLocationByDefault: function schemaLocationByDefault() { + return "xsi:schemaLocation=\"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd\""; + }, + /** + * Construction de la requête. + * + * @example + * // GET out : + * // service=__SERVICE__ + * // &version=__VERSION__ + * // &rawdataoutput=__RAWDATAOUTPUT__ + * // &identifier=__IDENTIFIER__ + * // &request=__REQUEST__ + * // &datainputs="__DATAINPUTS__" + * // avec __DATAINPUTS__ = __KEY__=__DATA__;... + * + * // POST out : + * // + * // + * // __IDENTIFIER__ + * // + * // + * // + * // + * // + * // __RAWDATAOUTPUT__ + * // + * // + * // ", + * // avec __DATAINPUTS__ + * // + * // __KEY__ + * // + * // __DATA__ + * // + * // + * + * @returns {Boolean} validation de la construction de la requete + */ + processRequestString: function processRequestString() { + this.logger.trace("WPS::processRequestString ()"); + var template = ""; + if (this.method === "POST") { + template = this.template.post.value; + } else if (this.method === "GET") { + template = this.template.get.value; + } else { + this.logger.error("No other method supported by the service !"); + return false; + } + template = template.replace(/__SERVICE__/g, this.paramservice); + template = template.replace(/__VERSION__/g, this.paramversion); + template = template.replace(/__RAWDATAOUTPUT__/g, this.paramrawdataoutput); + template = template.replace(/__IDENTIFIER__/g, this.paramidentifier); + template = template.replace(/__REQUEST__/g, this.paramrequest); + + // ajout + + if (this.method === "POST") { + template = template.replace(/__NAMESPACE__/g, this.namespaceByDefault); + template = template.replace(/__SCHEMALOCATION__/g, this.schemaLocationByDefault); + } + + // ajout des datainputs + template = template.replace(//g, this.__addDataInputs()); + if (!template) { + this.logger.warn("traduction tmpl : empty request !?"); + return false; + } + this.requestString = template; + this.logger.trace("traduction tmpl", template); + return true; + }, + /** + * Ajout des données + * + * @returns {String} Données concaténées dans une chaine + */ + __addDataInputs: function __addDataInputs() { + this.logger.trace("WPS::__addDataInputs ()"); + + // c'est un peu grossier... + var tmpl = this.method === "GET" ? this.template.get.input : this.template.post.input; + var sep = this.method === "GET" ? ";" : ""; + var result = ""; + var that = this; + var map = this.DataObject.getData(); + for (var i = 0; i < map.length; i++) { + // FIXME closure ? + (function (j) { + if (sep) { + sep = j === map.length - 1 ? "" : ";"; + } + result = result.concat(that.__addDataInput(tmpl, map[j].k, map[j].v), sep); + })(i); + } + return result; + }, + /** + * Ajout d'une donnée. + * + * @param {String} tmpl - template + * @param {String} key - clef + * @param {String} data - valeur + * @returns {String} chaine avec les substitutions clef/valeur + */ + __addDataInput: function __addDataInput(tmpl, key, data) { + var tmp = tmpl; + tmp = tmp.replace(/__KEY__/g, key); + tmp = tmp.replace(/__DATA__/g, data); + return tmp; + }, + /** + * Definir le mode de requête + * + * @param {String} method - GET|POST + */ + setMethod: function setMethod(method) { + if (method === "GET" || method === "POST") { + this.method = method; + } else { + this.logger.warn("support only GET and POST method !"); + } + }, + /** + * Retourne le mode de requete (GET|POST). + * + * @returns {AltiRequest.options.mode|String} methode (GET|POST) + */ + getMethod: function getMethod() { + return this.method; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (WPS); + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _Formats_XML__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(35); +/* harmony import */ var _Formats_AltiResponseReader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36); +/* harmony import */ var _model_AltiResponse__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(37); +/* harmony import */ var _model_Elevation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(38); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +/** + * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON + * (Factory) + * + * @module AltiResponseFactory + * @private + * @alias Gp.Services.Alti.Response.AltiResponseFactory + */ + + + + + + + +var AltiResponseFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant Alti + * + * @example + * var options = { + * response : + * outputFormat : + * rawResponse : + * scope : + * onSuccess : + * onError : + * }; + * + */ + build: function build(options) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("AltiResponseFactory"); + logger.trace(["AltiResponseFactory::build()"]); + var data = null; + if (options.response) { + if (options.rawResponse) { + logger.trace("analyze response : raw"); + data = options.response; + } else { + switch (options.outputFormat) { + case "xml": + logger.trace("analyze response : xml"); + try { + var p = new _Formats_XML__WEBPACK_IMPORTED_MODULE_3__["default"]({ + reader: _Formats_AltiResponseReader__WEBPACK_IMPORTED_MODULE_4__["default"] + }); + if (typeof options.response === "string") { + p.setXMLString(options.response); + } else { + p.setXMLDoc(options.response); + } + data = p.parse(); + if (!data) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION_2")); + } + } catch (e) { + var message = e.message; + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", message), + status: 200, + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR + })); + return; + } + break; + case "json": + logger.trace("analyze response : json"); + logger.trace("analyze response : ", _typeof(options.response)); + var JSONResponse = null; + if (typeof options.response === "string") { + JSONResponse = JSON.parse(options.response); + } else { + JSONResponse = options.response; + } + + // le service renvoie t il une erreur ? + if (JSONResponse && JSONResponse.error) { + // ex. {"error": {"code": "BAD_PARAMETER","description": "The values () cannot be parsed as a valid longitude (double value such as -180 < lat < 180)."}} + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", JSONResponse.error.description), + status: 200, + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR + })); + return; + } + + // analyse de la reponse + if (JSONResponse) { + var elevations = JSONResponse.elevations; + var altiResponse = new _model_AltiResponse__WEBPACK_IMPORTED_MODULE_5__["default"](); + var elevation; + if (Array.isArray(elevations) && elevations.length) { + for (var i = 0; i < elevations.length; i++) { + elevation = new _model_Elevation__WEBPACK_IMPORTED_MODULE_6__["default"](); + if (_typeof(elevations[i]) === "object") { + // elevations[i] est un objet elevation + if (elevations[i].lon) { + elevation.lon = elevations[i].lon; + } + if (elevations[i].lat) { + elevation.lat = elevations[i].lat; + } + if (elevations[i].z) { + elevation.z = elevations[i].z; + } + if (elevations[i].acc) { + elevation.acc = elevations[i].acc; + } + if (elevations[i].measures) { + elevation.measures = elevations[i].measures; + } + } else if (typeof elevations[i] === "number") { + // elevations[i] est un nombre, dans le cas de zonly=true notamment + elevation.z = elevations[i]; + } + if (Array.isArray(altiResponse.elevations)) { + altiResponse.elevations.push(elevation); + } + } + } + data = altiResponse; + } + if (!data) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_ANALYSE_2"), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_UNKERR, + status: -1 + })); + return; + } + break; + default: + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_FORMAT_2"), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_UNKERR, + status: -1 + })); + return; + } + + // Si la réponse contenait une exception renvoyée par le service + if (data.exceptionReport) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", data.exceptionReport), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR, + status: 200 + })); + return; + } else if (data.error) { + var errorMess = data.error.description; + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", errorMess), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR, + status: 200 + })); + return; + } + } + } else { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + return; + } + options.onSuccess.call(options.scope, data); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (AltiResponseFactory); + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* global require */ + + +// import __xmldom from "xmldom"; + +/** + * @classdesc + * + * Classe permettant d'écrire ou de lire du XML, sous forme de document DOM, + * éventuellement selon des clés de lecture (readers) ou d'écriture (writers) spécifiques. + * + * @constructor + * @alias Gp.Formats.XML + * + * @param {Object} [options] - options du format XML + * + * @param {Object} [options.reader] - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.) + * utile pour interpréter le XML lorsque sa structure est connue. + * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture. + * + * @param {Object} [options.writers] - writers + * + * @param {String} [options.xmlString] - chaîne de caractère contenant du XML à interpréter. + * + * @private + */ +function XML(options) { + if (!(this instanceof XML)) { + throw new TypeError("XML constructor cannot be called as a function."); + } + + // FIXME : notion de singleton + + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger(); + this.logger.trace("[Constructeur XML ()]"); + + /** + * Chaîne de caractères contenant le texte XML + * @type {String} + */ + this.xmlString = null; + + /** + * DOM Element correspondant à la structure du XML. + * @type {DOMElement} + */ + this.xmlDoc = null; + + /** + * Objet contenant des fonctions de lecture des différentes balises XML. + * @type {Object} + */ + this.reader = null; + + // traitement des paramètres d'options s'il y en a + if (options) { + if (options.xmlString && typeof options.xmlString === "string") { + this.xmlString = options.xmlString; + // Si une chaine de caractère a été passée en entrée : on la transforme aussi en XML document + this.xmlDoc = __getXMLDOC(options.xmlString); + } + if (options.reader) { + this.setReader(options.reader); + } + } +} +XML.prototype = { + /** + * @lends module:XML + */ + + /* + * Constructeur (alias) + */ + constructor: XML, + /** + * Méthode permettant de récupérer la chaîne de caractères associée au format XML + * + * @returns {String} xmlString - la chaîne de caractères correspondant au format XML + */ + getXMLString: function getXMLString() { + return this.xmlString; + }, + /** + * Méthode permettant d'attribuer une chaîne de caractères au format XML (attribut xmlString). + * La méthode va aussi transformer cette chaîne de caractères en document XML, + * afin de remplir l'attribut xmlDoc. + * + * @param {String} xmlString - la chaîne de caractères correspondant au format XML + */ + setXMLString: function setXMLString(xmlString) { + if (xmlString && typeof xmlString === "string") { + this.xmlString = xmlString; + this.xmlDoc = __getXMLDOC(xmlString); + } + }, + /** + * Méthode permettant de récupérer les readers associés au format XML, s'ils ont été définis + * + * @return {Object} readers - les readers associés au format XML, s'ils existent, + * sous forme d'une collection de fonctions + */ + getReader: function getReader() { + return this.reader; + }, + /** + * Méthode permettant d'attribuer des readers, sous la forme d'un objet de fonctions (node, data), + * lorsqu'ils n'ont pas été définis lors de l'instanciation par exemple (new XML (options)). + * + * @param {Object} reader - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.) + * utile pour interpréter le XML lorsque sa structure est connue. + * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture. + */ + setReader: function setReader(reader) { + if (reader && reader.read && typeof reader.read === "function") { + this.reader = reader; + } + }, + /** + * Méthode permettant de récupérer le document XML associé au format, s'il existe. + * + * @return {DOMElement} xmlDoc - le document XML (DOM document node) s'il existe + */ + getXMLDoc: function getXMLDoc() { + return this.xmlDoc; + }, + /** + * Setter + */ + setXMLDoc: function setXMLDoc(doc) { + this.xmlDoc = doc; + }, + /** + * Méthode initialisant la lecture du XML, à partir d'un XML Document : + * création d'un objet JavaScript contenant les informations du XML, + * sauf dans le cas où il n'existe pas de XML Document à interpréter (retourne un objet vide). + * + * @return {Object} [parserOutput] - un objet JavaScript contenant les informations du XML : + * - soit toutes les informations si aucun reader n'a été spécifié à la création du format + * - soit les informations spécifiées dans le reader. + */ + parse: function parse() { + // build xml document from xmlString + if (!this.xmlDoc && this.xmlString) { + this.xmlDoc = __getXMLDOC(this.xmlString); + } + if (this.xmlDoc) { + var root = __getRootNode(this.xmlDoc); + if (root) { + var parserOutput; + // call reader if exists + if (this.reader && this.reader.read) { + parserOutput = this.reader.read(root); + } else { + parserOutput = {}; + parserOutput[root.nodeName] = __readDefault(root); + } + return parserOutput; + } else { + return {}; + } + } + } +}; + +/** + * Méthode de la classe (privée) permettant de créer un XML Document à partir d'une chaîne de caractères XML, + * en utilisant DOMParser () lorsque c'est possible. + * For more information, see: https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface + * + * @private + * @memberof XML + * @method __getXMLDOC + * @param {String} xmlString - xml string to be converted into DOM element + * @return {DOMElement} - the corresponding XML Document + */ +function __getXMLDOC(xmlString) { + if (typeof window === "undefined") { + // env. nodejs + var DOMParser = __webpack_require__(15).DOMParser; // __xmldom.DOMParser; + return new DOMParser().parseFromString(xmlString, "text/xml"); + } else { + // env. browser + + var parser; + var xmlDoc; + var errorMsg = "Erreur lors du parsing de la réponse du service : XML non conforme"; + if (window.ActiveXObject) { + // Internet Explorer < 9 + xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = false; + xmlDoc.loadXML(xmlString); + var parseError = xmlDoc.parseError; + if (parseError.errorCode) { + if (parseError.line && parseError.linepos) { + errorMsg += "( ligne " + parseError.line + ", colonne " + parseError.linepos; + } + if (parseError.reason) { + errorMsg += ": " + parseError.reason + ")"; + } + throw new Error(errorMsg); + } + return xmlDoc; + } else if (window.DOMParser) { + // les autres (Chrome, Mozilla, IE >= 9) + parser = new window.DOMParser(); + try { + xmlDoc = parser.parseFromString(xmlString, "text/xml"); + } catch (e) { + // Internet Explorer browser raises exception if xmlString is not valid XML + if (e.message === "SyntaxError") { + throw new Error(errorMsg); + } else { + throw new Error("Erreur lors du parsing de la réponse du service : " + e.message); + } + } + // look for parsing error in case no exception was raised + if (xmlDoc.getElementsByTagName("parsererror").length > 0) { + var parsererror = xmlDoc.getElementsByTagName("parsererror"); + for (var i = 0; i < parsererror.length; i++) { + var content = parsererror[i].innerHTML; + // except in case parsererror is just because of huge xml, but parsing is done. + if (content.indexOf("Huge input lookup") === -1) { + errorMsg += "(" + content + ")"; + throw new Error(errorMsg); + } + } + } else if (!xmlDoc.documentElement) { + // may happen in chrome browser + throw new Error(errorMsg); + } + return xmlDoc; + } else { + // FIXME + throw new Error("Incompatible DOM Parser pour ce navigateur !"); + } + } +} + +/** + * Méthode de la classe (privée) permettant de récupérer le noeud racine du document, + * à partir d'un document node (nodeType=9), puis lecture de ce noeud (readNode) + * + * @private + * @memberof XML + * @method __getRootNode + * @param {DOMElement} [xmlDoc] - a Document Node + * @return {DOMElement} root - the document root node + */ +function __getRootNode(xmlDoc) { + var root; + if (xmlDoc.nodeType === 9) { + // INFO : nodeType 9 represents the entire document (the root-node of the DOM tree) + root = xmlDoc.documentElement; + } else if (xmlDoc.nodeType === 1) { + root = xmlDoc; + } + return root; +} + +/** + * Méthode de la classe (privée) permettant de lire automatiquement un noeud XML, + * lorsqu'aucun reader spécifique n'a été spécifié (parser brut) + * + * @private + * @memberof XML + * @method readDefault + * @param {DOMElement} node - a DOM element node + * @example final data object looks like : + * data = { + * attributeName: attributeValue, + * childName: { + * attributeName: attributeValue, + * attributeName: attributeValue, + * childName: { + * "textContent": textContent + * }, + * childName: { + * childName: { + * attributeName:attributeValue + * } + * } + * } + * } + */ +function __readDefault(node) { + var data = {}; + + // if element node has attributes, set their values to data + if (node.attributes.length > 0) { + var dataAttributes = __getAttributes(node); + data["attributes"] = dataAttributes; + } + + // if element node has childNodes, read them and set them to data + if (node.hasChildNodes()) { + var childData = {}; + var child; + var children = node.childNodes; + for (var i = 0; i < children.length; i++) { + child = children[i]; + if (child.nodeType === 3) { + // TEXT_NODE + data["textContent"] = child.nodeValue; + } else if (child.nodeType === 1) { + childData = __readDefault(child); + if (!data[child.nodeName]) { + // store childData in an object + data[child.nodeName] = childData; + } else { + // in case several childNodes has the same name : store them in an array. + // if data[nodeName] already exists but is not an array + if (!Array.isArray(data[child.nodeName])) { + var old = data[child.nodeName]; + data[child.nodeName] = []; + data[child.nodeName].push(old); + } + data[child.nodeName].push(childData); + } + } + // TODO : manage other node types (4=CDATA, etc) + } + } + return data; +} + +/** + * Méthode de la classe (privée) permettant de récupérer les attributs d'un noeud élément + * + * @private + * @memberof XML + * @method __getAttributes + * @param {DOMElement} node - noeud contenant l'attribut recherché + * @return {Object} nodeAttributes - objet contenant les noms et valeurs des différents attributs + */ +function __getAttributes(node) { + if (node.attributes.length > 0) { + var nodeAttributes = {}; + var attributes = node.attributes; + for (var i = 0; i < attributes.length; i++) { + var attribute = attributes[i]; + nodeAttributes[attribute.nodeName] = attribute.nodeValue; + } + return nodeAttributes; + } +} +/* harmony default export */ __webpack_exports__["default"] = (XML); + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37); +/* harmony import */ var _Response_model_Elevation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38); +/* harmony import */ var _Response_model_Measure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39); +/** + * Fonction retournant un objet contenant des clés de lecture (readers) + * qui permettent de parser des réponses XML du service Altimétrique du Géoportail + * (calcul altimétrique simple ou profil altimétrique d'une courbe), + * lorsque le paramètre output = xml, + * afin de récupérer les élévations retournées. + * + * @module AltiResponseReader + * @alias Gp.Services.Alti.Formats.AltiResponseReader + * @private + */ + +// import Logger from "../../../Utils/LoggerByDefault"; + + + + +/** + * + * Objet AltiResponseReader + * + * @member {Object} AltiResponseReader + * + * @property {Object} AltiResponseReader.READERS - Objet contenant des fonctions de lecture, appelées "readers" + * dont chaque clé correspond au nom d'un tag du XML que l'on souhaite lire + * et la valeur associée est une fonction (node, data) + * où node est un noeud du document DOM + * et data est un objet où l'on stocke les informations lues dans le XML. + * + * @property {Method} AltiResponseReader.READERS.elevations - Lecture d'un noeud "elevations" de la réponse XML + * du service alti, correspondant logiquement à la racine du document + * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée) + * + * @property {Method} AltiResponseReader.READERS.elevation - Lecture d'un noeud "elevation" de la réponse xml du service alti. + * (contient un ou 4 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, et acc) + * + * @property {Method} AltiResponseReader.READERS.lat - Lecture d'un noeud "lat" de la réponse xml du service alti. + * (contient une valeur de latitude, qui est un flottant) + * + * @property {Method} AltiResponseReader.READERS.lon - Lecture d'un noeud "lon" de la réponse xml du service alti. + * (contient une valeur de longitude, qui est un flottant) + * + * @property {Method} AltiResponseReader.READERS.z - Lecture d'un noeud "z" de la réponse xml du service alti. + * (contient une valeur d'altitude, qui est un flottant) + * + * @property {Method} AltiResponseReader.READERS.acc - Lecture d'un noeud "acc" de la réponse xml du service alti. + * (contient une valeur de précision, qui est un flottant) + * + * @property {Method} AltiResponseReader.READERS.measures - Lecture d'un noeud "measures" de la réponse xml du service alti. + * (contient une valeur de précision, qui est un flottant) + * + * @property {Method} AltiResponseReader.READERS.source_name - Lecture d'un noeud "source_name" de la réponse xml du service alti. + * (pour remplir l'éventuel objet measure) + * + * @property {Method} AltiResponseReader.READERS.source_mesure - Lecture d'un noeud "source_mesure" de la réponse xml du service alti. + * (pour remplir l'éventuel objet measure) + * + * @property {Method} AltiResponseReader.READERS.exceptionreport - Lecture d'un noeud "ExceptionReport" de la réponse xml du service alti. + * + * @property {Method} AltiResponseReader.READERS.exception - Lecture d'un noeud "Exception" de la réponse xml du service alti. + * + * @property {Method} AltiResponseReader.read - Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique, + * à l'aide des readers de la classe. + * + */ +var AltiResponseReader = {}; +AltiResponseReader.READERS = { + /** + * Lecture d'un noeud "elevations" de la réponse XML du service alti, correspondant logiquement à la racine du document + * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée) + * + * @param {DOMElement} root - racine de la réponse XML + * @static + * @memberof AltiResponseReader + * @returns {Object} Retourne un objet de type AltiResponse + */ + elevations: function elevations(root) { + // INFO : on passe en paramètre l'objet en entrée elevations, vide, à remplir. + var altiResponse = new _Response_model_AltiResponse__WEBPACK_IMPORTED_MODULE_0__["default"](); + if (root.hasChildNodes()) { + var children = root.childNodes; + var child; + var elevation; + for (var i = 0; i < children.length; i++) { + child = children[i]; + if (AltiResponseReader.READERS[child.nodeName]) { + elevation = AltiResponseReader.READERS[child.nodeName](child); + altiResponse.elevations.push(elevation); + } + } + } + return altiResponse; + }, + /** + * Lecture d'un noeud "elevation" de la réponse xml du service alti. + * (contient un ou 5 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, acc et measures) + * + * @param {DOMElement} node - noeud elevation à lire pour récupérer les informations de l'élévation retournée (z [, lon, lat, acc, measures]) + * @return {Array} elevationResponse - format de la réponse en sortie, instance de AltiResponse + * @static + * @memberof AltiResponseReader + */ + elevation: function elevation(node) { + var elevation = new _Response_model_Elevation__WEBPACK_IMPORTED_MODULE_1__["default"](); + if (node.hasChildNodes()) { + var children = node.childNodes; + var child; + for (var i = 0; i < children.length; i++) { + child = children[i]; + if (AltiResponseReader.READERS[child.nodeName]) { + // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir. + AltiResponseReader.READERS[child.nodeName](child, elevation); + } + } + } + return elevation; + }, + /** + * Lecture d'un noeud "lat" de la réponse xml du service alti. + * (contient une valeur de latitude, qui est un flottant) + * + * @param {DOMElement} node - noeud à lire pour récupérer la latitude + * @param {Object} elevation - objet dans lequel stocker la latitude retournée + * @static + * @memberof AltiResponseReader + */ + lat: function lat(node, elevation) { + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + elevation.lat = parseFloat(textNode.nodeValue); + } else { + throw new Error("Erreur dans la lecture de la réponse du service : latitude attendue mais absente"); + } + }, + /** + * Lecture d'un noeud "lon" de la réponse xml du service alti. + * (contient une valeur de longitude, qui est un flottant) + * + * @param {DOMElement} node - noeud à lire pour récupérer la longitude + * @param {Object} elevation - objet dans lequel stocker la longitude retournée + * @static + * @memberof AltiResponseReader + */ + lon: function lon(node, elevation) { + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + elevation.lon = parseFloat(textNode.nodeValue); + } else { + throw new Error("Erreur dans la lecture de la réponse du service : longitude attendue mais absente"); + } + }, + /** + * Lecture d'un noeud "z" de la réponse xml du service alti. + * (contient une valeur d'altitude, qui est un flottant) + * + * @param {DOMElement} node - noeud à lire pour récupérer l'altitude + * @param {Object} elevationObject - objet dans lequel stocker l'altitude retournée : elevation ou measure + * @static + * @memberof AltiResponseReader + */ + z: function z(node, elevationObject) { + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + if (elevationObject) { + elevationObject.z = parseFloat(textNode.nodeValue); + } else { + elevationObject = new _Response_model_Elevation__WEBPACK_IMPORTED_MODULE_1__["default"](); + elevationObject.z = parseFloat(textNode.nodeValue); + return elevationObject; + } + } else { + throw new Error("Erreur dans la lecture de la réponse du service : altitude attendue mais absente"); + } + }, + /** + * Lecture d'un noeud "acc" de la réponse xml du service alti. + * (contient une valeur de précision, qui est un flottant) + * + * @param {DOMElement} node - noeud à lire pour récupérer la précision + * @param {Object} elevationObject - objet dans lequel stocker la précision retournée : elevation ou measure + * @static + * @memberof AltiResponseReader + */ + acc: function acc(node, elevationObject) { + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + elevationObject.acc = parseFloat(textNode.nodeValue); + } else { + throw new Error("Erreur dans la lecture de la réponse du service : précision (acc) attendue mais absente"); + } + }, + /** + * Lecture d'un noeud "source_name" de la réponse xml du service alti. + * (contient le nom de la source, qui est un string) + * + * @param {DOMElement} node - noeud à lire pour récupérer la précision + * @param {Object} measure - objet dans lequel stocker le nom de la source retourné + * @static + * @memberof AltiResponseReader + */ + source_name: function source_name(node, measure) { + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + measure.source_name = textNode.nodeValue; + } else { + throw new Error("Erreur dans la lecture de la réponse du service : source_name attendue mais absente"); + } + }, + /** + * Lecture d'un noeud "source_measure" de la réponse xml du service alti. + * (contient le nom de la mesure, qui est un string) + * + * @param {DOMElement} node - noeud à lire pour récupérer la précision + * @param {Object} measure - objet dans lequel stocker le nom de la source retourné + * @static + * @memberof AltiResponseReader + */ + source_measure: function source_measure(node, measure) { + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + measure.source_measure = textNode.nodeValue; + } else { + throw new Error("Erreur dans la lecture de la réponse du service : source_measure attendue mais absente"); + } + }, + /** + * Lecture d'un noeud "measures" et de ses enfants "measure" de la réponse xml du service alti. + * (contient une valeur de précision, qui est un flottant) + * + * @param {DOMElement} node - noeud à lire pour récupérer la précision + * @param {Object} elevation - objet dans lequel stocker la précision retournée + * @static + * @memberof AltiResponseReader + */ + measures: function measures(node, elevation) { + elevation.measures = []; + var measure; + if (node.hasChildNodes()) { + var children = node.childNodes; + var measureNode; + var measureChildren; + for (var i = 0; i < children.length; i++) { + measure = new _Response_model_Measure__WEBPACK_IMPORTED_MODULE_2__["default"](); + measureNode = children[i]; + measureChildren = measureNode.childNodes; + for (var j = 0; j < measureChildren.length; j++) { + if (AltiResponseReader.READERS[measureChildren[j].nodeName]) { + // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir. + AltiResponseReader.READERS[measureChildren[j].nodeName](measureChildren[j], measure); + } else { + throw new Error("Erreur dans la lecture de la réponse du service : measures attendues mais absentes"); + } + } + elevation.measures.push(measure); + } + } + }, + /** + * Lecture d'un noeud "ExceptionReport" de la réponse xml du service alti. + * + * @param {DOMElement} node - noeud à lire pour récupérer l'exception + * @return {Object} exceptionReport - objet contenant l'exception + * @static + * @memberof AltiResponseReader + */ + exceptionreport: function exceptionreport(node) { + var response = {}; + if (node.hasChildNodes()) { + var children = node.childNodes; + var child; + for (var i = 0; i < children.length; i++) { + child = children[i]; + if (child.nodeName === "Exception") { + response.exceptionReport = AltiResponseReader.READERS.exception(child); + } + } + } + return response; + }, + /** + * Lecture d'un noeud "Exception" de la réponse xml du service alti. + * + * @param {DOMElement} node - noeud à lire pour récupérer l'exception + * @return {Object} exceptionReport - objet contenant l'exception, avec deux attributs : + * {String} exceptionReport.exceptionCode - qui contient l'identifiant du code de l'exception + * {String} exceptionReport.exception - qui contient le message de l'exception + * @static + * @memberof AltiResponseReader + */ + exception: function exception(node) { + var exceptionReport = {}; + + // get exception code + var exceptionCode = node.getAttribute("exceptionCode"); + if (exceptionCode) { + exceptionReport.exceptionCode = exceptionCode; + } + + // get exception message + var textNode = node.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + exceptionReport.exception = textNode.nodeValue; + } + return exceptionReport; + }, + /** + * Lecture d'un noeud "Error" de la réponse xml du service alti. + * + * @param {DOMElement} node - noeud à lire pour récupérer l'exception + * @return {Object} error - objet contenant l'exception + * @static + */ + error: function error(node) { + var response = { + error: {} + }; + // get error code and description + if (node.hasChildNodes()) { + var children = node.childNodes; + var child; + for (var i = 0; i < children.length; i++) { + child = children[i]; + var textNode; + // get error code + if (child.nodeType === 1 && child.nodeName === "code") { + // 1 === node.ELEMENT_NODE + textNode = child.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + response.error.code = textNode.nodeValue; + } + } + // get error description + if (child.nodeType === 1 && child.nodeName === "description") { + // 1 === node.ELEMENT_NODE + textNode = child.firstChild; + if (textNode && textNode.nodeType === 3) { + // 3 === node.TEXT_NODE + response.error.description = textNode.nodeValue; + } + } + } + } + return response; + } +}; + +/** + * Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique, + * à l'aide des readers de la classe. + * + * @method AltiResponseReader.read + * @param {DOMElement} root - racine de la réponse XML à lire + * @static + * @memberof AltiResponseReader + */ +AltiResponseReader.read = function (root) { + if (root.nodeName === "elevations") { + var altiResponse = AltiResponseReader.READERS.elevations(root); + return altiResponse; + } else if (root.nodeName === "ExceptionReport") { + var exceptionReport = AltiResponseReader.READERS.exceptionreport(root); + return exceptionReport; + } else if (root.nodeName === "error") { + var error = AltiResponseReader.READERS.error(root); + return error; + } else { + throw new Error("Erreur lors de la lecture de la réponse : elle n'est pas au format attendu."); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (AltiResponseReader); + +/***/ }), +/* 37 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Response object for {@link module:Services~getAltitude Gp.Services.getAltitude ()} invocation when successful. Received as the argument of onSuccess callback function. + * + * @property {Array.} elevations - Elevations array. + * + * @namespace + * @alias Gp.Services.AltiResponse + */ +function AltiResponse() { + if (!(this instanceof AltiResponse)) { + throw new TypeError("AltiResponse constructor cannot be called as a function."); + } + this.elevations = []; +} +AltiResponse.prototype = { + constructor: AltiResponse +}; +/* harmony default export */ __webpack_exports__["default"] = (AltiResponse); + +/***/ }), +/* 38 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if "zonly" parameter wasn't set to true. + * + * @property {Float} lat - Point latitude. (only if zonly=false) + * @property {Float} lon - Point longitude. (only if zonly=false) + * @property {Float} z - Point elevation. + * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false) + * + * @namespace + * @alias Gp.Services.Alti.Elevation + */ +function Elevation() { + if (!(this instanceof Elevation)) { + throw new TypeError("Elevation constructor cannot be called as a function."); + } + this.z = null; +} +Elevation.prototype = { + constructor: Elevation +}; +/* harmony default export */ __webpack_exports__["default"] = (Elevation); + +/***/ }), +/* 39 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Single measure object returned by underlying web service if measures = true and zonly = false + * + * @property {String} source_name - Name of the source + * @property {String} source_measure - Name of the measure + * @property {Float} z - Point elevation. + * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false) + * + * @namespace + * @alias Gp.Services.Alti.Measure + */ +function Measure() { + if (!(this instanceof Measure)) { + throw new TypeError("Measure constructor cannot be called as a function."); + } + this.source_name = null; + this.source_measure = null; + this.z = null; + this.acc = null; +} +Measure.prototype = { + constructor: Measure +}; +/* harmony default export */ __webpack_exports__["default"] = (Measure); + +/***/ }), +/* 40 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7); +/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24); +/* harmony import */ var _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41); +/* harmony import */ var _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(44); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } + + + + + + + + +/** + * @classdesc + * Appel du service de géocodage direct du Géoportail : + * envoi de la requête construite selon les paramètres en options, + * éventuellement parsing et analyse de la réponse, + * retour d'une réponse en paramètre de la fonction onSuccess. + * + * + * @constructor + * @extends {Gp.Services.CommonService} + * @alias Gp.Services.Geocode + * + * @param {Object} options - options spécifiques au service (+ les options heritées) + * + * @param {String|Object} options.query - Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée. + * + * @param {Object} [options.filters] - Les propriétés possibles de cet objet sont décrites ci-après. + * @param {String} [options.filters.[prop]] - Critère supplémentaire pour filtrer la recherche sous la forme + * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête. + * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés : + * "postalCode", "inseeCode", "city". + * Il permet également de filtrer les toponymes avec les propriétés : + * "postalCode", "inseeCode", "type". + * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés : + * "codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille". + * + * @param {String} [options.index = "StreetAddress"] - Type de l'objet recherché. + * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress' + * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. + * L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'. + * D'autres types pourront être rajoutés selon l'évolution du service. + * Par défaut, index = 'StreetAddress'. + * + * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs. + * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité. + * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité. + * + * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir. + * Pas de valeur par défaut. + * Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20. + * + * @param {Boolean} [options.returnTrueGeometry = false] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés. + * false par défaut. + * + * + * @example + * var options = { + * apiKey : null, + * serverUrl : 'http://localhost/service/', + * proxyURL : null, + * timeOut : 10000, // ms + * rawResponse : false, // true|false + * scope : null, // this + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * // spécifique au service + * position : {lon:, lat:}, + * index : 'StreetAddress', + * query : '10 rue du pont Machin-ville' + * (...) + * }; + */ +function Geocode(options_) { + if (!(this instanceof Geocode)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("CLASS_CONSTRUCTOR", "Geocode")); + } + + /** + * Nom de la classe (heritage) + * FIXME instance ou classe ? + */ + this.CLASSNAME = "Geocode"; + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("Gp.Services.Geocode"); + this.logger.trace("[Constructeur Geocode (options)]"); + var options = this.patchOptionConvertor(options_); + if (!options.serverUrl) { + options.serverUrl = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__["default"].Geocode.newUrl(); + } + + // appel du constructeur par heritage + _CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].apply(this, [options]); + if (!options.hasOwnProperty("query")) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "query")); + } + + // ajout des options spécifiques au service + this.options.query = options.query; + + // on definit l'index par defaut + if (!options.index) { + this.options.index = options.index = "StreetAddress"; + } + if (options.filters) { + var filter = Object.keys(options.filters); + for (var i = 0; i < filter.length; i++) { + var key = filter[i]; + // on supprime les filtres vides + if (typeof options.filters[key] === "undefined" || _typeof(options.filters[key]) === "object" && Object.keys(options.filters[key]).length === 0 || typeof options.filters[key] === "string" && options.filters[key].length === 0 || Array.isArray(options.filters[key]) && options.filters[key].length === 0) { + delete this.options.filters[key]; + } + } + } + this.options.index = options.index || "StreetAddress"; + this.options.maximumResponses = options.maximumResponses || 20; +} + +/** + * @lends module:Geocode# + */ +Geocode.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].prototype, { + // todo + // getter/setter +}); + +/* + * Constructeur (alias) + */ +Geocode.prototype.constructor = Geocode; + +/** + * Patch pour la convertion des options vers le nouveau formalisme. + * + * @param {Object} options_ - options du service + * @return {Object} - options + */ +Geocode.prototype.patchOptionConvertor = function (options_) { + var options = options_; + if (options.hasOwnProperty("location")) { + this.logger.warn("The parameter 'location' is deprecated"); + if (!options.query) { + options.query = options.location; + } + delete options.location; + } + if (options.filterOptions) { + this.logger.warn("The parameter 'filterOptions' is deprecated"); + if (!options.filters) { + options.filters = options.filterOptions; + if (options.filters.type) { + this.logger.warn("The parameter 'filterOptions.type' is deprecated"); + if (!options.index) { + if (Array.isArray(options.filters.type) && options.filters.type.length > 0) { + options.index = options.filters.type[0]; + } else { + options.index = options.filters.type; + } + } + delete options.filters.type; + } + if (options.filters.bbox) { + this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"); + delete options.filters.bbox; + } + } + delete options.filterOptions; + } + if (options.position) { + if (options.position.x) { + this.logger.warn("The parameter 'position.x' is deprecated"); + if (!options.position.lon) { + options.position.lon = options.position.x; + } + delete options.position.x; + } + if (options.position.y) { + this.logger.warn("The parameter 'position.y' is deprecated"); + if (!options.position.lat) { + options.position.lat = options.position.y; + } + delete options.position.y; + } + } + if (options.returnFreeForm) { + this.logger.warn("The parameter 'returnFreeForm' is deprecated"); + delete options.returnFreeForm; + } + if (options.srs) { + this.logger.warn("The parameter 'srs' is deprecated"); + delete options.srs; + } + return options; +}; + +/** + * Création de la requête (overwrite) + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +Geocode.prototype.buildRequest = function (error, success) { + var options = { + httpMethod: this.options.httpMethod, + // options specifiques du service + geocodeMethod: "search", + query: this.options.query, + index: this.options.index, + returnTrueGeometry: this.options.returnTrueGeometry, + position: this.options.position, + maxResp: this.options.maximumResponses, + filters: this.options.filters + }; + this.request = _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__["default"].build(options); + + // on teste si la requete a bien été construite ! + !this.request ? error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_REQUEST_BUILD"))) : success.call(this, this.request); +}; + +/** + * Analyse de la reponse (overwrite) + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +Geocode.prototype.analyzeResponse = function (error, success) { + /* INFO : + Etape 1 : Création de la requête (URL) + -> stockage de la requête dans this.request + Etape 2 : Envoi de la requête + -> appel du protocol XHR, et envoi (par ex send ()) + -> récupération de la réponse JSON dans la fonction onSuccess () (this.response) + -> si code HTTP 200 et pas de message d'erreur : etape 3 + -> si code HTTP != 200 : lancement de la fonction de callback onFailure avec le message d'erreur + Etape 3 : Analyse de la réponse JSON (si rawResponse === false ) + -> appel du parser pour récupérer le document + Etape 4 : Lancement de la fonction de callback onSuccess avec la réponse : + -> JSON (si rawResponse === true) + -> ou geocodedLocations + */ + + if (this.response) { + var options = { + response: this.response, + rawResponse: this.options.rawResponse, + onError: error, + onSuccess: success, + scope: this + }; + _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__["default"].build(options); + } else { + error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (Geocode); + +/***/ }), +/* 41 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _GeocodeRequestREST__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42); + + + +/** + * Creation d'une requête + * (Factory) + * + * @module GeocodeRequestFactory + * @alias Gp.Services.Geocode.Request.GeocodeRequestFactory + * @private + */ +var GeocodeRequestFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant Geocode + * + * @example + * var options = { + * // options specifiques du service + * geocodeMethod: + * query: + * filters: + * maximumResponses: + * }; + * var result = GeocodeRequestFactory.build(options); + * if (!result) { + * // error... + * } + * @returns {String} request + */ + build: function build(options) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("GeocodeRequestFactory"); + logger.trace(["GeocodeRequestFactory::build()"]); + var settings = options || {}; + var myReq = new _GeocodeRequestREST__WEBPACK_IMPORTED_MODULE_1__["default"](settings); + if (!myReq.processRequestString()) { + throw new Error("Error process request (rest) !"); + } + var request = myReq.requestString; + logger.trace(request); + return request; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (GeocodeRequestFactory); + +/***/ }), +/* 42 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _model_GeocodeParamREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43); + + + + +/** + * @classdesc + * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire + * (uniquement en GET) + * + * @constructor + * @alias Gp.Services.Geocode.Request.GeocodeRequestREST + * @param {Object} options - options definies dans le composant Route + * + * @example + * var options = { + * (...) + * }; + * + * @private + */ +function GeocodeRequestREST(options) { + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("GeocodeRequestREST"); + this.logger.trace("[Constructeur GeocodeRequestREST ()]"); + if (!(this instanceof GeocodeRequestREST)) { + throw new TypeError("GeocodeRequestREST constructor cannot be called as a function."); + } + + // existance des options + if (!options) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_EMPTY", "options")); + } + + /** liste des options */ + this.settings = options; +} +GeocodeRequestREST.prototype = { + /** + * @lends module:GeocodeRequestREST# + */ + + /** + * request + * @type {String} + */ + requestString: null, + /** + * Constructeur (alias) + */ + constructor: GeocodeRequestREST, + /** + * Construction de la requête. + * + * @returns {String} request + */ + processRequestString: function processRequestString() { + var request = ""; + + // Mapping des options avec le service de l'API REST + var oParams = new _model_GeocodeParamREST__WEBPACK_IMPORTED_MODULE_2__["default"](this.settings); + var params = oParams.getParams(); + for (var i = 0; i < params.length; i++) { + var o = params[i]; + if (request) { + request += "&"; + } + request += o.k + "=" + o.v; + } + if (!this.settings.geocodeMethod || this.settings.geocodeMethod !== "search" && this.settings.geocodeMethod !== "reverse") { + throw new Error("Error geocodeMethod not valid"); + } + this.requestString = "?" + request; + this.logger.trace(this.requestString); + return this.requestString; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (GeocodeRequestREST); + +/***/ }), +/* 43 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); + + +/** + * @classdesc + * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST). + * Permet le mapping avec les options du service. + * @constructor + * @alias Gp.Services.Route.Request.RouteParamREST + * @param {Object} options - options + * + * @private + */ +function GeocodeParamREST(options) { + if (!(this instanceof GeocodeParamREST)) { + throw new TypeError("GeocodeParamREST constructor cannot be called as a function."); + } + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger(); + this.logger.trace("[Constructeur GeocodeParamREST ()]"); + + /** + * Options en paramêtres du constructeur. + */ + this.options = options || {}; + + // methode de geocodage + if (!this.options.geocodeMethod || this.options.geocodeMethod !== "search" && this.options.geocodeMethod !== "reverse") { + throw new Error("Error geocodeMethod not valid"); + } + this.geocodeMethod = this.options.geocodeMethod; + + // mapping des options avec l'API REST + this.query = typeof this.options !== "undefined" ? this.options.query : null; + this.searchGeometry = this.options.searchGeometry || null; + this.index = this.options.index || null; + this.lon = this.options.position && this.options.position.lon ? this.options.position.lon : null; + this.lat = this.options.position && this.options.position.lat ? this.options.position.lat : null; + this.maxResp = this.options.maxResp || null; + this.returnTrueGeometry = this.options.returnTrueGeometry || null; + this.filters = this.options.filters || {}; +} + +/** + * CLASSNAME + */ +GeocodeParamREST.CLASSNAME = "GeocodeParamREST"; +GeocodeParamREST.prototype = { + /** + * @lends module:GeocodeParamREST# + */ + + /** + * Constructeur (alias) + */ + constructor: GeocodeParamREST, + /** + * Retourne les filtres + * @returns {String} les filtres + */ + getFilters: function getFilters() { + var filters = {}; + for (var prop in this.filters) { + if (this.filters.hasOwnProperty(prop)) { + filters[prop] = this.filters[prop]; + } + } + return filters; + }, + /** + * Retourne l'index + * @returns {String} l'index + */ + getIndex: function getIndex() { + if (this.index === undefined) { + return null; + } + if (this.index === "StreetAddress") { + return "address"; + } else if (this.index === "CadastralParcel") { + return "parcel"; + } else if (this.index === "PositionOfInterest") { + return "poi"; + } else if (this.index === "location") { + return "location"; + } + return this.index; + }, + /** + * Retourne la géométrie de recherche + * @returns {String} la géométrie de recherche au format json + */ + getSearchGeometry: function getSearchGeometry() { + return JSON.stringify(this.searchGeometry); + } +}; + +/** + * Tableau de clefs/valeurs pour param. + * + * @returns {Array} liste de paramêtres + */ +GeocodeParamREST.prototype.getParams = function () { + var map = []; + if (this.geocodeMethod === "search") { + map.push({ + k: "q", + v: this.query + }); + } + if (this.index) { + map.push({ + k: "index", + v: this.getIndex() + }); + } + if (this.geocodeMethod === "reverse" && this.searchGeometry) { + map.push({ + k: "searchgeom", + v: this.getSearchGeometry() + }); + } + if (this.lon && this.lat) { + map.push({ + k: "lon", + v: this.lon + }); + map.push({ + k: "lat", + v: this.lat + }); + } + if (this.maxResp) { + map.push({ + k: "limit", + v: this.maxResp + }); + } + if (this.returnTrueGeometry) { + map.push({ + k: "returntruegeometry", + v: this.returnTrueGeometry + }); + } + var filters = this.getFilters(); + for (var key in filters) { + map.push({ + k: key, + v: filters[key] + }); + } + return map; +}; +/* harmony default export */ __webpack_exports__["default"] = (GeocodeParamREST); + +/***/ }), +/* 44 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Formats_GeocodeResponseParser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45); +/** + * Factory pour générer une reponse JSON à partir d'un XML + * (Factory) + * + * @module GeocodeResponseFactory + * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory + * @private + */ +// import Logger from "../../../Utils/LoggerByDefault"; + + + +var GeocodeReponseFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant Geocode + * + * @example + * var options = { + * response : + * rawResponse : + * scope : + * onSuccess : + * onError : + * }; + * + */ + build: function build(options) { + // data de type GeocodeResponse + var data = null; + if (options.response) { + if (options.rawResponse) { + data = options.response; + } else { + try { + var parser = new _Formats_GeocodeResponseParser__WEBPACK_IMPORTED_MODULE_2__["default"](); + data = parser.parse(options.response); + if (!data) { + throw new Error("L'analyse de la réponse du service !?"); + } + } catch (e) { + var message = e.message; + if (typeof options.response === "string") { + message += "('" + options.response + "')"; + } else { + message += "('" + options.response.documentElement.innerHTML + "')"; + } + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_ANALYSE", message), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__["default"].TYPE_UNKERR, + status: -1 + })); + return; + } + + // Si la réponse contenait une exception renvoyée par le service + if (data.exceptionReport) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", data.exceptionReport), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__["default"].TYPE_SRVERR, + status: 200 // FIXME : 200 ? + })); + return; + } + } + } else { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_0__["default"].TYPE_SRVERR, + status: -1 // FIXME : status response + })); + return; + } + options.onSuccess.call(options.scope, data); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (GeocodeReponseFactory); + +/***/ }), +/* 45 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22); +/* harmony import */ var _Response_model_GeocodeResponse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46); +/* harmony import */ var _Response_model_GeocodedLocation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(47); +// import Logger from "../../../Utils/LoggerByDefault"; + + + + + +/** + * Fonction retournant un objet contenant des clés de lecture (readers) + * qui permettent de parser des réponses XML du service de géocodage direct du Géoportail + * afin de récupérer les résultats retournés. + * @module GeocodeResponseParser + * @alias Gp.Services.Geocode.Formats.GeocodeResponseParser + * @private + */ + +/** + * @classdesc + * + * Classe permettant de parser une réponse GeoJSON + * + * @constructor + * @alias Gp.Formats.GeocodeResponseParser + * + * @private + */ +function GeocodeResponseParser() { + if (!(this instanceof GeocodeResponseParser)) { + throw new TypeError("GeocodeResponseParser constructor cannot be called as a function."); + } +} +GeocodeResponseParser.prototype = { + /** + * @lends module:GeocodeResponseParser + */ + + /* + * Constructeur (alias) + */ + constructor: GeocodeResponseParser, + /** + * Méthode permettant de lancer la lecture d'une réponse GeoJSON, + * + * @param {String} json - réponse au format GeoJSON + * @return {Object} geocodeResponse|exceptionReport : l'objet contenant les informations de la réponse GeoJSON, + * sous la forme d'un objet GeocodeResponse, ou un objet littéral exceptionReport si le service a renvoyé une exception. + */ + parse: function parse(json) { + var geocodeResponse = new _Response_model_GeocodeResponse__WEBPACK_IMPORTED_MODULE_2__["default"](); + var obj = JSON.parse(json); + if (obj.type === "FeatureCollection") { + for (var i = 0; i < obj.features.length; ++i) { + _parseFeature(obj.features[i], geocodeResponse); + } + } else if (obj.type === "Feature") { + _parseFeature(obj, geocodeResponse); + } else if (obj.type === "SERVICE_ERROR") { + return _parseError(obj); + } else { + var mess = _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_0__["default"].getMessage("SERVICE_RESPONSE_ANALYSE", obj.type); + throw new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__["default"]({ + message: mess, + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__["default"].TYPE_UNKERR, + status: 200 + }); + } + return geocodeResponse; + } +}; + +/** + * Méthode permettant de parser un feature + * + * @private + * + * @param {Object} feature + * @param {Object} geocodeResponse + * + * @memberof GeocodeResponseParser + * @return {Object} objet GeocodedLocation + */ +function _parseFeature(feature, geocodeResponse) { + var location = new _Response_model_GeocodedLocation__WEBPACK_IMPORTED_MODULE_3__["default"](); + if (feature.geometry && feature.geometry.type === "Point") { + location.position = { + lon: feature.geometry.coordinates[0], + lat: feature.geometry.coordinates[1] + }; + } + if (feature.properties) { + for (var prop in feature.properties) { + if (prop === "score") { + location.accuracy = feature.properties[prop]; + } else if (prop === "_type") { + if (feature.properties[prop] === "address") { + location.type = "StreetAddress"; + } else if (feature.properties[prop] === "poi") { + location.type = "PositionOfInterest"; + } else if (feature.properties[prop] === "parcel" || feature.properties[prop] === "cadastral") { + location.type = "CadastralParcel"; + } + } else { + location.placeAttributes[prop] = feature.properties[prop]; + } + } + if (feature.properties._type === "address") { + location.matchType = feature.properties.number !== undefined && feature.properties.number !== null ? "street number" : "street"; + } + } + geocodeResponse.locations.push(location); +} + +/** + * Méthode permettant de parser une erreur + * + * @private + * + * @param {Object} error + * + * @memberof GeocodeResponseParser + * @return {Object} + */ +function _parseError(error) { + return { + exceptionReport: error + }; +} +/* harmony default export */ __webpack_exports__["default"] = (GeocodeResponseParser); + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Response object for {@link module:Services~geocode Gp.Services.geocode ()} or {@link module:Services~reverseGeocode Gp.Services.reverseGeocode ()} invocation when successful. Received as the argument of onSuccess callback function. + * + * @property {Array.} locations - locations array. + * + * @namespace + * @alias Gp.Services.GeocodeResponse + */ +function GeocodeResponse() { + if (!(this instanceof GeocodeResponse)) { + throw new TypeError("GeocodeResponse constructor cannot be called as a function."); + } + this.locations = []; +} +GeocodeResponse.prototype = { + constructor: GeocodeResponse +}; +/* harmony default export */ __webpack_exports__["default"] = (GeocodeResponse); + +/***/ }), +/* 47 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Single location object returned by the underlying geocoding web service. + * + * @property {Gp.Point} position - Position of the location given in the requested coordinates system. + * @property {String} type - location type "StreetAddress" (for an address), "PositionOfInterest" (for a place name) or "CadastralParcel" (for cadastral parcel). + * @property {String} matchType - how geocoding is performed : "street number" (exact address), "street enhanced" (street number calculated by interpolation), "street" (only the street), "city" (only the city). + * @property {Float} accuracy - Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match). + * @property {Object} placeAttributes - Associative array matching the following attributes with their values given by the underlying web service : + * + * *Common attributes : * + * + * - **trueGeometry** - the 'real life' geometry if different from 'Point' type. + * + * *if type === "StreetAddress" :* + * + * - **number** - Street number. + * - **postalCode** - PostCode + * - **street** - Street name + * - **city** - City + * - **houseNumberInfos** - additional street number information + * - **inseeCode** - INSEE Code + * + * + * *if type === "PositionOfInterest" :* + * + * - **type** - Place name type + * - **postalCode** - PostCode + * - **toponyme** - Toponyme + * - **extraFields** - additional place name properties + * - **inseeCode** - INSEE Code + * + * + * *si type = "CadastralParcel" :* + * + * - **codeCommuneAbs** - when a parcel comes from a city that was absorbed by another, code of that old city. "000" otherwise. + * - **codeArrondissement** - arrondissement + * - **identifiant** - cadastral parcel code + * - **feuille** - Parcel Sheet (eg. "1"). + * - **numero** - Parcel Number (eg. "0041") + * - **section** - Parcel Section (eg. "0D"). + * - **nomCommune** - Parcel municipality name. + * - **codeCommune** - Parcel municipality. + * - **codeDepartement** - Parcel Department. + * + * @namespace + * @alias Gp.Services.Geocode.GeocodedLocation + */ +function GeocodedLocation() { + if (!(this instanceof GeocodedLocation)) { + throw new TypeError("GeocodedLocation constructor cannot be called as a function."); + } + this.position = null; + this.matchType = null; + this.placeAttributes = {}; + this.type = null; + this.accuracy = null; + + /** + * Nom de la classe : "GeocodedLocation" + * @type {String} + */ + this.CLASSNAME = "GeocodedLocation"; +} +GeocodedLocation.prototype = { + constructor: GeocodedLocation +}; +/* harmony default export */ __webpack_exports__["default"] = (GeocodedLocation); + +/***/ }), +/* 48 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7); +/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24); +/* harmony import */ var _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41); +/* harmony import */ var _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(44); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } + + + + + + + + +/** + * @classdesc + * Appel du service de géocodage inverse du Géoportail : + * envoi de la requête construite selon les paramètres en options, + * éventuellement parsing et analyse de la réponse, + * retour d'une réponse en paramètre de la fonction onSuccess. + * @constructor + * @extends {Gp.Services.CommonService} + * @alias Gp.Services.ReverseGeocode + * + * @param {Object} options - options spécifiques au service (+ les options heritées) + * + * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs. + * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité. + * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité. + * + * @param {Object} [options.filters] - Les propriétés possibles de cet objet. + * @param {String} [options.filters.[proprietes du filtre]] - Critère supplémentaire pour filtrer la recherche sous la forme + * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête. + * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés : + * "postalCode", "inseeCode", "city". + * Il permet également de filtrer les toponymes avec les propriétés : + * "postalCode", "inseeCode", "type". + * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés : + * "codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille". + * + * @param {Object} [options.searchGeometry] - Emprise dans laquelle on souhaite effectuer la recherche. + * Les propriétés possibles de cet objet sont décrites ci-après. + * @param {String} options.searchGeometry.type - Type de géometrie (Point|Circle|Linestring|Polygon) + * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordonnées des points constituant la géométrie. + * @param {Float} options.searchGeometry.radius - Rayon. Paramètre applicable uniquement pour le type 'Circle'. + * + * @param {String} [options.index = "StreetAddress"] - Type de l'objet recherché. + * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress' + * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche + * multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'. + * D'autres types pourront être rajoutés selon l'évolution du service. + * Par défaut, index = 'StreetAddress'. + * + * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir. + * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s. + * + * @param {Boolean} [options.returnTrueGeometry] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés. + * false par défaut. + * + * @example + * var options = { + * apiKey : null, + * serverUrl : 'http://localhost/service/', + * proxyURL : null, + * timeOut : 10000, // ms + * rawResponse : false, // true|false + * scope : null, // this + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * // spécifique au service + * index : 'StreetAddress', + * searchGeometry : { + * type : Circle, + * coordinates : [48, 2], + * radius : 100 + * }, + * position : {lon:2 , lat:48.5}, + * maximumResponses : 25, + * }; + * + */ +function ReverseGeocode(options_) { + if (!(this instanceof ReverseGeocode)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("CLASS_CONSTRUCTOR", "ReverseGeocode")); + } + + /** + * Nom de la classe (heritage) + * FIXME instance ou classe ? + */ + this.CLASSNAME = "ReverseGeocode"; + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("Gp.Services.ReverseGeocode"); + this.logger.trace("[Constructeur ReverseGeocode (options)]"); + var options = this.patchOptionConvertor(options_); + if (!options.serverUrl) { + options.serverUrl = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__["default"].ReverseGeocode.newUrl(); + } + + // appel du constructeur par heritage + _CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].apply(this, [options]); + if (!options.searchGeometry) { + if (!options.position) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "searchGeometry")); + } + } else { + this.options.searchGeometry = options.searchGeometry; + } + + // on definit l'index par defaut + if (!options.index) { + this.options.index = options.index = "StreetAddress"; + } + if (options.filters) { + var filter = Object.keys(options.filters); + for (var i = 0; i < filter.length; i++) { + var key = filter[i]; + // on supprime les filtres vides + if (typeof options.filters[key] === "undefined" || _typeof(options.filters[key]) === "object" && Object.keys(options.filters[key]).length === 0 || typeof options.filters[key] === "string" && options.filters[key].length === 0 || Array.isArray(options.filters[key]) && options.filters[key].length === 0) { + delete this.options.filters[key]; + } + } + } + this.options.position = options.position; + this.options.index = options.index || "StreetAddress"; + this.options.maximumResponses = options.maximumResponses || 20; +} + +/** + * @lends module:ReverseGeocode# + */ +ReverseGeocode.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].prototype, { + // todo + // getter/setter +}); + +/* + * Constructeur (alias) + */ +ReverseGeocode.prototype.constructor = ReverseGeocode; + +/** + * Patch pour la convertion des options vers le nouveau formalisme. + * + * @param {Object} options_ - options du service + * @return {Object} - options + */ +ReverseGeocode.prototype.patchOptionConvertor = function (options_) { + var options = options_; + if (options.filterOptions) { + this.logger.warn("The parameter 'filterOptions' is deprecated"); + if (options.filterOptions.type) { + this.logger.warn("The parameter 'filterOptions.type' is deprecated"); + if (!options.index) { + if (Array.isArray(options.filterOptions.type) && options.filterOptions.type.length > 0) { + options.index = options.filterOptions.type[0]; + } else { + options.index = options.filterOptions.type; + } + } + delete options.filterOptions.type; + } + if (options.filterOptions.bbox) { + this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"); + if (!options.searchGeometry) { + // convertir la geometrie + options.searchGeometry = this.bbox2Json(options.filterOptions.bbox); + } + delete options.filterOptions.bbox; + } + if (options.filterOptions.circle) { + this.logger.warn("The parameter 'filterOptions.circle' is deprecated"); + if (!options.searchGeometry) { + // convertir la geometrie + options.searchGeometry = this.circle2Json(options.filterOptions.circle); + } + delete options.filterOptions.circle; + } + if (options.filterOptions.polygon) { + this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"); + if (!options.searchGeometry) { + // convertir la geometrie + options.searchGeometry = this.polygon2Json(options.filterOptions.polygon); + } + delete options.filterOptions.polygon; + } + if (!options.filters && Object.keys(options.filterOptions).length > 0) { + options.filters = options.filterOptions; + } + delete options.filterOptions; + } + if (options.position) { + if (options.position.x) { + this.logger.warn("The parameter 'position.x' is deprecated"); + if (!options.position.lon) { + options.position.lon = options.position.x; + } + delete options.position.x; + } + if (options.position.y) { + this.logger.warn("The parameter 'position.y' is deprecated"); + if (!options.position.lat) { + options.position.lat = options.position.y; + } + delete options.position.y; + } + } + if (options.srs) { + this.logger.warn("The parameter 'srs' is deprecated"); + delete options.srs; + } + return options; +}; + +/** + * (overwrite) + * Création de la requête + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +ReverseGeocode.prototype.buildRequest = function (error, success) { + var options = { + httpMethod: this.options.httpMethod, + // options specifiques du service + geocodeMethod: "reverse", + searchGeometry: this.options.searchGeometry, + index: this.options.index, + position: this.options.position, + returnTrueGeometry: this.options.returnTrueGeometry, + maxResp: this.options.maximumResponses, + filters: this.options.filters + }; + this.request = _Request_GeocodeRequestFactory__WEBPACK_IMPORTED_MODULE_5__["default"].build(options); + + // on teste si la requete a bien été construite ! + !this.request ? error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_REQUEST_BUILD"))) : success.call(this, this.request); +}; + +/** + * (overwrite) + * Analyse de la reponse + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +ReverseGeocode.prototype.analyzeResponse = function (error, success) { + if (this.response) { + var options = { + response: this.response, + rawResponse: this.options.rawResponse, + onError: error, + onSuccess: success, + scope: this + }; + _Response_GeocodeResponseFactory__WEBPACK_IMPORTED_MODULE_6__["default"].build(options); + } else { + error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + } +}; + +/** + * Patch pour la convertion des options vers le nouveau formalisme. + * + * @param {Array} bbox - bbox + * @return {Object} - geometrie au format json + */ +ReverseGeocode.prototype.bbox2Json = function (bbox) { + return { + type: "Polygon", + coordinates: [[[bbox.left, bbox.top], [bbox.right, bbox.top], [bbox.right, bbox.bottom], [bbox.left, bbox.bottom], [bbox.left, bbox.top]]] + }; +}; + +/** + * Patch pour la convertion des options vers le nouveau formalisme. + * + * @param {Object} circle - circle + * @return {Object} - geometrie au format json + */ +ReverseGeocode.prototype.circle2Json = function (circle) { + return { + type: "Circle", + radius: circle.radius, + coordinates: [circle.x, circle.y] + }; +}; + +/** + * Patch pour la convertion des options vers le nouveau formalisme. + * + * @param {Array} polygon - polygon + * @return {Object} - geometrie au format json + */ +ReverseGeocode.prototype.polygon2Json = function (polygon) { + var jsonGeom = { + type: "Polygon", + coordinates: [[]] + }; + for (var i = 0; i < polygon.length; ++i) { + jsonGeom.coordinates[0].push([polygon[i].x, polygon[i].y]); + } + return jsonGeom; +}; + +/** + * Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées. + */ +ReverseGeocode.geoEPSG = ["EPSG:4326"]; +/* harmony default export */ __webpack_exports__["default"] = (ReverseGeocode); + +/***/ }), +/* 49 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); +/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24); +/* harmony import */ var _Response_AutoCompleteResponseFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(50); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6); +/* harmony import */ var _Utils_Helper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(22); + + + + + + + + +/** + * @classdesc + * Appel du service d'autocomplétion du Géoportail : + * envoi de la requête construite selon les paramètres en options, + * éventuellement parsing et analyse de la réponse, + * retour d'une réponse en paramètre de la fonction onSuccess. + * @constructor + * @extends {Gp.Services.CommonService} + * @alias Gp.Services.AutoComplete + * + * @param {Object} options - options spécifiques au service (+ les options heritées) + * + * @param {String} options.text - La chaîne de caractère à compléter. + * Cette chaîne n'est pas "URL encodée". + * C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête. + * + * @param {Array.} [options.type = ["StreetAddress"]] - Type de l'objet recherché. + * Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'. + * D'autres types pourront être rajoutés selon l'évolution du service. + * Par défaut, type = ['StreetAddress']. + * + * @param {String} [options.territory] - Limitation de la zone de recherche de localisants. + * Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE', + * DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31' + * Pas de valeur par défaut. + * La valeur par défaut est donc celle du service. + * Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié. + * + * @param {Number} [options.maximumResponses = 10] - Nombre de réponses maximal que l'on souhaite recevoir. + * Pas de valeur par défaut. + * La valeur par défaut sera donc celle du service : 10. + * + * @example + * var options = { + * // options communes aux services + * apiKey : null, + * serverUrl : 'http://localhost/service/', + * protocol : 'JSONP', // JSONP|XHR + * proxyURL : null, + * httpMethod : 'GET', // GET|POST + * timeOut : 10000, // ms + * rawResponse : false, // true|false + * scope : null, // this + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * // spécifique au service + * text : "", + * type : "StreetAddress", + * territory : 'METROPOLE', + * maximumResponses : 10 + * }; + */ +function AutoComplete(options_) { + if (!(this instanceof AutoComplete)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__["default"].getMessage("CLASS_CONSTRUCTOR", "AutoComplete")); + } + + /** + * Nom de la classe (heritage) + * FIXME instance ou classe ? + */ + this.CLASSNAME = "AutoComplete"; + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_3__["default"].getLogger("Gp.Services.AutoComplete"); + this.logger.trace("[Constructeur AutoComplete (options)]"); + var options = this.patchOptionConvertor(options_); + if (!options.serverUrl) { + options.serverUrl = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_1__["default"].AutoComplete.newUrl(); + } + + // appel du constructeur par heritage + _CommonService__WEBPACK_IMPORTED_MODULE_0__["default"].apply(this, arguments); + if (!options.text) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__["default"].getMessage("PARAM_MISSING", "text")); + } + + // ajout des options spécifiques au service + this.options.text = options.text; + + // on definit des parametres par defaut + if (!options.type) { + options.type = ["StreetAddress,PositionOfInterest"]; + } + this.options.type = options.type; + this.options.territory = options.terr || ""; + this.options.maximumResponses = options.maximumResponses || 10; + + // INFO + // le service ne repond pas en mode POST (405 Method Not Allowed) + if (this.options.protocol === "XHR" && this.options.httpMethod === "POST") { + this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"); + this.options.httpMethod = "GET"; // on surcharge ! + } + + // attributs d'instances + + /** + * Format forcé de la réponse du service : "json" + * sauf si l'on souhaite une reponse brute (options.rawResponse) + */ + this.options.outputFormat = this.options.rawResponse ? "" : "json"; +} + +/** + * @lends module:AutoComplete# + */ + +AutoComplete.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_0__["default"].prototype, { + // todo + // getter/setter +}); + +/* + * Constructeur (alias) + */ +AutoComplete.prototype.constructor = AutoComplete; + +/** + * Patch pour la convertion des options vers le nouveau formalisme. + * + * @param {Object} options_ - options du service + * @return {Object} - options + */ +AutoComplete.prototype.patchOptionConvertor = function (options_) { + var options = options_; + if (options.filterOptions) { + this.logger.warn("The parameter 'filterOptions' is deprecated"); + if (options.filterOptions.type) { + this.logger.warn("The parameter 'filterOptions.type' is deprecated"); + if (!options.type) { + options.type = options.filterOptions.type; + } + } + if (options.filterOptions.territory) { + this.logger.warn("The parameter 'filterOptions.territory' is deprecated"); + if (!options.terr) { + options.terr = options.filterOptions.territory; + } + } + delete options.filterOptions; + } + return options; +}; + +/** + * (overwrite) + * Création de la requête + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +AutoComplete.prototype.buildRequest = function (error, success) { + // ex. + // http://wxs.ign.fr/CLEF/ols/apis/completion? + // text=Brie-Comt& + // type=StreetAddress,PositionOfInterest& + // territory=METROPOLE& + // maximumResponses=10 + + // traitement des param KPV sous forme de tableau + var territory = ""; + if (this.options.territory) { + territory = this.options.territory; + } + var type = ""; + if (this.options.type) { + type = this.options.type.join(","); + } + + // normalisation de la requete avec param KPV + this.request = _Utils_Helper__WEBPACK_IMPORTED_MODULE_5__["default"].normalyzeParameters({ + text: encodeURIComponent(this.options.text), + type: type, + terr: territory, + maximumResponses: this.options.maximumResponses + }); + !this.request ? error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_6__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__["default"].getMessage("SERVICE_REQUEST_BUILD"))) : success.call(this, this.request); +}; + +/** + * (overwrite) + * Analyse de la reponse + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback de succès de l'analyse de la réponse + */ +AutoComplete.prototype.analyzeResponse = function (error, success) { + if (this.response) { + var options = { + response: this.response, + rawResponse: this.options.rawResponse, + onSuccess: success, + onError: error, + scope: this + }; + _Response_AutoCompleteResponseFactory__WEBPACK_IMPORTED_MODULE_2__["default"].build(options); + } else { + error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_6__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_4__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (AutoComplete); + +/***/ }), +/* 50 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(51); +/* harmony import */ var _model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(52); +/** + * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON + * (Factory) + * + * @module AutoCompleteResponseFactory + * @private + * @alias Gp.Services.AutoComplete.Response.AutoCompleteResponseFactory + */ + + + + + +var AutoCompleteResponseFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant Alti + * + * @example + * var options = { + * response : + * outputFormat : + * rawResponse : + * scope : + * onSuccess : + * onError : + * }; + * + */ + build: function build(options) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("AutoCompleteResponseFactory"); + logger.trace(["AutoCompleteResponseFactory::build()"]); + var data = null; + if (options.response) { + if (options.rawResponse) { + logger.trace("analyze response : raw"); + data = options.response; + } else { + var JSONResponse = null; + if (typeof options.response === "string") { + JSONResponse = JSON.parse(options.response); + } else { + JSONResponse = options.response; + } + + // analyse de la réponse + if (JSONResponse) { + // le service renvoie t il une erreur ? + if (JSONResponse.error) { + // ex. ? + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", JSONResponse.error.description), + status: JSONResponse.error.code, + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR + })); + return; + } + + // création de l'objet réponse + data = new _model_AutoCompleteResponse__WEBPACK_IMPORTED_MODULE_3__["default"](); + + // boucle sur les résultats de l'autocomplétion + if (JSONResponse.results && Array.isArray(JSONResponse.results)) { + var suggestedLocation = null; + for (var i = 0; i < JSONResponse.results.length; i++) { + var result = JSONResponse.results[i]; + suggestedLocation = new _model_SuggestedLocation__WEBPACK_IMPORTED_MODULE_4__["default"](); + if (result) { + if (result.country === "StreetAddress") { + suggestedLocation.street = result.street; + suggestedLocation.type = "StreetAddress"; + } else if (result.country === "PositionOfInterest") { + suggestedLocation.poi = result.street; + suggestedLocation.type = "PositionOfInterest"; + suggestedLocation.poiType = result.poiType; + } + if (suggestedLocation.position) { + suggestedLocation.position.x = result.x; + suggestedLocation.position.y = result.y; + } + suggestedLocation.kind = result.kind; + suggestedLocation.commune = result.city; + suggestedLocation.fullText = result.fulltext; + suggestedLocation.postalCode = result.zipcode; + suggestedLocation.classification = result.classification; + } + // Ajout du résultat au tableau reverseGeocodedLocations de geocodedLocation + data.suggestedLocations.push(suggestedLocation); + } + } else { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_FORMAT_3"))); + return; + } + if (!data.suggestedLocations.length) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_FORMAT_3"))); + return; + } + } + if (!data) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_ANALYSE_2"), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_UNKERR, + status: -1 + })); + return; + } + + // Si la réponse contenait une exception renvoyée par le service + if (data.exceptionReport) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", data.exceptionReport), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR, + status: 200 + })); + return; + } + } + } else { + // si la réponse (xmlString) est vide, on appelle le callback d'erreur + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + return; + } + + // si tout s'est bien passé, on appelle le callback de succès + options.onSuccess.call(options.scope, data); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (AutoCompleteResponseFactory); + +/***/ }), +/* 51 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Response object for {@link module:Services~autoComplete Gp.Services.autoComplete ()} invocation when successful. Received as the argument of onSuccess callback function. + * + * @property {Array.} suggestedLocations - SuggestedLocations array. + * + * @namespace + * @alias Gp.Services.AutoCompleteResponse + */ +function AutoCompleteResponse() { + if (!(this instanceof AutoCompleteResponse)) { + throw new TypeError("AutoCompleteResponse constructor cannot be called as a function."); + } + this.suggestedLocations = []; +} +AutoCompleteResponse.prototype = { + constructor: AutoCompleteResponse +}; +/* harmony default export */ __webpack_exports__["default"] = (AutoCompleteResponse); + +/***/ }), +/* 52 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Single SuggestedLocation Object returned by underlying web service. + * Each suggested location represents a street address ("StreetAddress") or a place name ("PositionOfInterest"). + * + * @property {String} type - Suggested location type : "StreetAddress" ou "PositionOfInterest" + * @property {Gp.Point} position - Position of the suggested location given in requested coordinates system. + * @property {String} commune - Suggested municipality + * @property {String} fullText - Full text representation of the suggested location. + * @property {String} postalCode - Suggested location postcode + * @property {Integer} classification - Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important). + * @property {String} street - Street name of the suggested location ("StreetAddress" only). + * @property {String} kind - Nature of the suggested location : "prefecture", "monument", "commune", ... for instance ("PositionOfInterest" only). + * + * @namespace + * @alias Gp.Services.AutoComplete.SuggestedLocation + */ +function SuggestedLocation() { + if (!(this instanceof SuggestedLocation)) { + throw new TypeError("SuggestedLocation constructor cannot be called as a function."); + } + + /* REPONSE : + { + "status" : "OK", + "results" : [ + { + "country":"PositionOfInterest", + "x":-1.559185, + "y":47.952603, + "city":"Brie", + "zipcode":"35150", + "street":"corbe", + "kind":"Lieu-dit habité", + "fulltext":"corbe, 35150 Brie", + "classification":6 + }, + { + "country":"StreetAddress", + "x":1.538295, + "y":43.19646, + "city":"Brie", + "zipcode":"09700", + "street":"courreste", + "kind":"", + "fulltext":"courreste, 09700 Brie", + "classification":7 + } + ] + } + */ + + /* REPONSE EN ERREUR + { + status : "ERROR", + results : [ ] + } + */ + + /** + * Suggested location type : "StreetAddress" ou "PositionOfInterest" + * @type {String} + */ + this.type = null; + + /** + * Position of the suggested location given in requested coordinates system. + * @type {Gp.Point} + */ + this.position = { + x: null, + y: null + }; + + /** + * Suggested municipality + * @type {String} + */ + this.commune = null; + + /** + * Full text representation of the suggested location. + * @type {String} + */ + this.fullText = null; + + /** + * Suggested location postcode + * @type {Number} + */ + this.postalCode = null; + + /** + * Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important). + * @type {Integer} + */ + this.classification = null; + + /** + * Street name of the suggested location ("StreetAddress" only). + * @type {String} + */ + this.street = null; + + /** + * Place name of the suggested location ("PositionOfInterest" only). + * @type {String} + */ + this.poi = null; + + /** + * Nature of the suggested location : "prefecture", "monument", "commune", ... for instance ("PositionOfInterest" only). + * @type {String} + */ + this.kind = null; +} +SuggestedLocation.prototype = { + constructor: SuggestedLocation +}; +/* harmony default export */ __webpack_exports__["default"] = (SuggestedLocation); + +/***/ }), +/* 53 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7); +/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24); +/* harmony import */ var _Request_RouteRequestFactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(54); +/* harmony import */ var _Response_RouteResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(57); + + + + + + + + +/** + * @classdesc + * Appel du service d'itinéraire du Géoportail : + * envoi de la requête construite selon les paramètres en options, + * éventuellement parsing et analyse de la réponse, + * retour d'une réponse en paramètre de la fonction onSuccess. + * + * @alias Gp.Services.Route + * @constructor + * @extends {Gp.Services.CommonService} + * @param {Object} options - options spécifiques au service (+ les options heritées) + * + * @param {String} options.resource - La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité. + * + * @param {String} options.outputFormat - Le format de la réponse du service itineraire : 'json' uniquement et par défaut. + * + * @param {String} [options.routePreference = "fastest"] - Mode de calcul à utiliser : + * - le plus rapide « fastest » + * - le plus court « shortest » + * Par défaut : « fastest ». + * + * @param {Object} options.startPoint - Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326) + * @param {Float} options.startPoint.x - Abcisse du point de départ du calcul d'itinéraire. + * @param {Float} options.startPoint.y - Ordonnée du point de départ du calcul d'itinéraire. + * + * @param {Object} options.endPoint - Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326) + * @param {Float} options.endPoint.x - Abcisse du point d'arrivée du calcul d'itinéraire. + * @param {Float} options.endPoint.y - Ordonnée du point d'arrivée du calcul d'itinéraire. + * + * @param {Object[]} [options.viaPoints] - Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau. + * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float} + * + * @param {String} [options.graph = "voiture"] - Type de graphe utilisé : "Voiture" ou "Pieton". + * Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non. + * Par défaut, c'est la valeur "Voiture" qui sera utilisée. + * + * @param {String[]} [options.exclusions] - DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre "avoidFeature" d'OpenLS) + * On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte + * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »). + * Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints + * + * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities. + * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement "banned". + * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement "wayType". + * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement "=". + * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement "autoroute". + * + * @param {Boolean} [options.geometryInInstructions = false] - Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions. + * (correspond au paramètre "provideGeometry" d'OpenLS) Par défaut : false. + * + * @param {Boolean} [options.provideBbox = true] - Indique si les instructions doivent être localisées par une bbox dans la réponse. + * Par défaut : true. + * + * @param {String} [options.distanceUnit = "m"] - Indique si la distance doit être exprimée en km ou m dans la réponse. + * Par défaut : m. + * @param {String} [options.timeUnit = "second"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard. + * Les valeurs possibles sont "standard", "second", "minute" ou "hour". + * Par défaut : "standard". + * + * @param {String} [options.srs] - Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés. + * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'. + * + * @param {String[]} [options.waysAttributes] - Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities. + * + * @example + * var options = { + * // options communes aux services + * apiKey : null, + * serverUrl : 'http://localhost/service/', + * protocol : 'XHR', + * proxyURL : null, + * httpMethod : 'GET', // GET|POST + * timeOut : 10000, // ms + * rawResponse : false, // true|false + * scope : null, // this + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * // spécifique au service + * resource : 'bdtopo' + * outputFormat : 'json', + * startPoint : { + * x : 42.1121, + * y : 1.5557 + * }, + * endPoint : { + * x : 42.1121, + * y : 1.5557 + * }, + * provideBbox : true, + * exclusions : ["Bridge", "Tunnel", "Toll"], + * distanceUnit : "km", + * graph : "Voiture", + * geometryInInstructions : true, + * routePreference : "fastest" + * }; + * + */ +function Route(options) { + if (!(this instanceof Route)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("CLASS_CONSTRUCTOR", "Route")); + } + + /** + * Nom de la classe (heritage) + */ + this.CLASSNAME = "Route"; + + // appel du constructeur par heritage + _CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].apply(this, arguments); + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("Gp.Services.Route"); + this.logger.trace("[Constructeur Route (options)]"); + if (!options.startPoint) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "startPoint")); + } + + // on lance une exception afin d'eviter au service de le faire... + if (options.startPoint.x === null) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "startPoint.x")); + } + if (options.startPoint.y === null) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "startPoint.y")); + } + if (!options.endPoint) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "endPoint")); + } + + // on lance une exception afin d'eviter au service de le faire... + if (options.endPoint.x === null) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "endPoint.x")); + } + if (options.endPoint.y === null) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "endPoint.y")); + } + + // options par defaut + + // on passe l'option outputFormat en minuscules afin d'éviter des exceptions. + if (options.outputFormat && options.outputFormat !== "json") { + this.logger.warn("options.outputFormat could only be json"); + } + this.options.outputFormat = "json"; + this.options.resource = options.resource || "bdtopo-osrm"; + this.options.startPoint = options.startPoint; + this.options.endPoint = options.endPoint; + this.options.viaPoints = options.viaPoints || []; + this.options.routePreference = options.routePreference || "fastest"; + /** Gestion des anciennes valeurs de graph */ + if (options.graph) { + if (options.graph === "Voiture") { + this.options.graph = "car"; + } + if (options.graph === "Pieton") { + this.options.graph = "pedestrian"; + } + } else { + this.options.graph = "car"; + } + this.options.constraints = []; + if (options.constraints) { + if (Array.isArray(options.constraints)) { + for (var k = 0; k < options.constraints.length; k++) { + this.options.constraints.push(options.constraints[k]); + } + } else { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_TYPE", "constraints")); + } + } + + /** Gestion de l'ancien paramètre exclusion */ + var constraintTunnel = {}; + var constraintPont = {}; + var constraintAutoroute = {}; + if (options.exclusions) { + if (options.exclusions.length !== 0) { + this.logger.warn("options.exclusions is DEPRECATED !!"); + for (var c = 0; c < options.exclusions.length; c++) { + if (typeof options.exclusions[c] === "string") { + options.exclusions[c] = options.exclusions[c].toLowerCase(); + } else { + // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions + continue; + } + if (options.exclusions[c] === "toll") { + constraintAutoroute.constraintType = "banned"; + constraintAutoroute.key = "wayType"; + constraintAutoroute.operator = "="; + constraintAutoroute.value = "autoroute"; + this.options.constraints.push(constraintAutoroute); + } + if (options.exclusions[c] === "tunnel") { + constraintTunnel.constraintType = "banned"; + constraintTunnel.key = "wayType"; + constraintTunnel.operator = "="; + constraintTunnel.value = "tunnel"; + this.options.constraints.push(constraintTunnel); + } + if (options.exclusions[c] === "bridge") { + constraintPont.constraintType = "banned"; + constraintPont.key = "wayType"; + constraintPont.operator = "="; + constraintPont.value = "pont"; + this.options.constraints.push(constraintPont); + } + } + } + } + this.options.geometryInInstructions = options.geometryInInstructions || false; + this.options.provideBbox = options.provideBbox || true; + this.options.distanceUnit = options.distanceUnit || "m"; + this.options.timeUnit = options.timeUnit || "second"; + this.options.expectedStartTime = null; // FIXME not yet implemented ! + this.options.srs = options.srs || "EPSG:4326"; + this.options.waysAttributes = options.waysAttributes || []; + + // gestion de l'url du service par defaut + // si l'url n'est pas renseignée, il faut utiliser les urls par defaut + if (!this.options.serverUrl) { + var UrlByDefault = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__["default"].Route.newUrl(); + if (!UrlByDefault) { + throw new Error("Url by default not found !"); + } + this.options.serverUrl = UrlByDefault; + this.logger.trace("Serveur URL par defaut : " + this.options.serverUrl); + } +} + +/** + * @lends module:Route# + */ +Route.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].prototype, { + // todo + // getter/setter +}); + +/* + * Constructeur (alias) + */ +Route.prototype.constructor = Route; + +/** + * (overwrite) + * Création de la requête + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +Route.prototype.buildRequest = function (error, success) { + var options = { + // spécifique au service + resource: this.options.resource, + startPoint: this.options.startPoint, + endPoint: this.options.endPoint, + viaPoints: this.options.viaPoints, + provideBbox: this.options.provideBbox, + constraints: this.options.constraints, + distanceUnit: this.options.distanceUnit, + timeUnit: this.options.timeUnit, + graph: this.options.graph, + geometryInInstructions: this.options.geometryInInstructions, + routePreference: this.options.routePreference, + srs: this.options.srs, + waysAttributes: this.options.waysAttributes + }; + this.request = _Request_RouteRequestFactory__WEBPACK_IMPORTED_MODULE_5__["default"].build(options); + + // on teste si la requete a bien été construite ! + if (!this.request) { + error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_REQUEST_BUILD"))); + } else { + success.call(this, this.request); + } +}; + +/** + * (overwrite) + * Analyse de la reponse + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +Route.prototype.analyzeResponse = function (error, success) { + // INFO + // Factory pour masquer la complexité du retour du service + + if (this.response) { + var options = { + distanceUnit: this.options.distanceUnit, + timeUnit: this.options.timeUnit, + response: this.response, + outputFormat: this.options.outputFormat, + // utile pour parser la string en mode XHR : JSON ou XML ! + rawResponse: this.options.rawResponse, + onError: error, + onSuccess: success, + scope: this, + geometryInInstructions: this.options.geometryInInstructions + }; + _Response_RouteResponseFactory__WEBPACK_IMPORTED_MODULE_6__["default"].build(options); + } else { + error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (Route); + +/***/ }), +/* 54 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22); +/* harmony import */ var _RouteRequestREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55); + + + + +/** + * Creation d'une requête REST en mode POST ou GET + * (Factory) + * + * @module RouteRequestFactory + * @alias Gp.Services.Route.Request.RouteRequestFactory + * @private + */ +var RouteRequestFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant Route + * + * @example + * // utilisation avec les callback + * var options = { + * (...) + * onSuccess : function (response) {}, + * onError : function (error) {}, + * // spécifique au service + * startPoint : { + * x : 42.1121, + * y : 1.5557 + * }, + * endPoint : { + * x : 42.1121, + * y : 1.5557 + * }, + * provideBbox : false, + * exclusions : ["bridge", "tunnel", "toll"], + * distanceUnit : "km", + * graph : "Voiture", + * geometryInInstructions : false, + * routePreference : "fastest" + * }; + * RouteRequestFactory.build(options); + * + * // utilisation sans callback + * var options = {...}; + * try { + * var result = RouteRequestFactory.build(options); + * if (! result) { throw new Error("..."):} + * } catch (e) { + * // todo + * } + * @returns {String} request + */ + build: function build(options) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("RouteRequestFactory"); + logger.trace(["RouteRequestFactory::build()"]); + var request = null; + var settings = options || {}; + + // gestion des callback + var bOnError = !!(options.onError !== null && typeof options.onError === "function"); + var message = null; + + // FIXME les exceptions ne sont pas 'catchées' sur le constructeur ! + var myReq = new _RouteRequestREST__WEBPACK_IMPORTED_MODULE_2__["default"](settings); + if (!myReq.processRequestString()) { + message = "Error process request (rest) !"; + if (bOnError) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_1__["default"](message)); + return; + } + throw new Error(message); + } + request = myReq.requestString; + return request; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (RouteRequestFactory); + +/***/ }), +/* 55 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _model_RouteParamREST__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56); + + + + +/** + * @classdesc + * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire + * (uniquement en GET) + * + * @constructor + * @alias Gp.Services.Route.Request.RouteRequestREST + * @param {Object} options - options definies dans le composant Route + * + * @example + * var options = { + * (...) + * }; + * + * @private + */ +function RouteRequestREST(options) { + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("RouteRequestREST"); + this.logger.trace("[Constructeur RouteRequestREST ()]"); + if (!(this instanceof RouteRequestREST)) { + throw new TypeError("RouteRequestREST constructor cannot be called as a function."); + } + + // existance des options + if (!options) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_EMPTY", "options")); + } + + /** liste des options */ + this.settings = options; +} +RouteRequestREST.prototype = { + /** + * @lends module:RouteRequestREST# + */ + + /** + * request + * @type {String} + */ + requestString: null, + /** + * Constructeur (alias) + */ + constructor: RouteRequestREST, + /** + * Construction de la requête. + * + * @example + * // GET out : origin=2.416907353809513,48.8465772142297&destination=2.4248037771493673,48.84591353161838 + * // POST out : Not yet supported method POST ! + * @returns {String} request + */ + processRequestString: function processRequestString() { + // INFO + // construction simple sans template..., + // mais en attendant que les services soient fixés, on taggue ce composant en mode PROTOTYPE ! + this.logger.warn(" PROTOTYPE !"); + + // Mapping des options avec le service de l'API REST + var oParams = new _model_RouteParamREST__WEBPACK_IMPORTED_MODULE_2__["default"](this.settings); + var params = oParams.getParams(); + var request = ""; + for (var i = 0; i < params.length; i++) { + var o = params[i]; + if (request) { + request += "&"; + } + request += o.k + "=" + o.v; + } + + // Exemple : + // http://wxs.ign.fr/KEY/itineraire/rest/route.json? + // origin=& + // destination=& + // waypoints=& + // method=DISTANCE& + // graph=Pieton& + // graphName=Pieton& + // exclusions=& + // tolerance=10& + // srs= + + this.logger.trace(request); + this.requestString = request; + return this.requestString; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (RouteRequestREST); + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); + + +/** + * @classdesc + * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST). + * Permet le mapping avec les options du service. + * @constructor + * @alias Gp.Services.Route.Request.RouteParamREST + * @param {Object} options - options + * + * @private + */ +function RouteParamREST(options) { + if (!(this instanceof RouteParamREST)) { + throw new TypeError("RouteParamREST constructor cannot be called as a function."); + } + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger(); + this.logger.trace("[Constructeur RouteParamREST ()]"); + /** + * Options en paramêtres du constructeur. + */ + this.options = options || {}; + + // mapping des options avec l'API REST + + /** Ressource utilisée */ + this.resource = this.options.resource; + + /** Coordonnées du point de départ. */ + this.start = this.options.startPoint.x + "," + this.options.startPoint.y; + + /** Coordonnées du point d’arrivée. */ + this.end = this.options.endPoint.x + "," + this.options.endPoint.y; + + /** Coordonnées des étapes point de départ. */ + this.intermediates = this.options.viaPoints; + + /** Nom du profile à utiliser */ + this.profile = this.options.graph; + + /** projection (code EPSG comme epsg:4326 ou wgs84) */ + this.crs = this.options.srs; + + /** Liste des contraintes */ + this.constraints = this.options.constraints; + + /** Nom de l'optimisation à utiliser */ + this.optimization = this.options.routePreference; + + /** Format de sortie (résumé de l’itinéraire) */ + this.getSteps = this.options.geometryInInstructions ? "true" : "false"; + + /** Unité des distances */ + this.distanceUnit = this.options.distanceUnit; + + /** Unité des durées */ + this.timeUnit = this.options.timeUnit; + + /** Attributs des voies */ + this.waysAttributes = this.options.waysAttributes; +} + +/** + * CLASSNAME + */ +RouteParamREST.CLASSNAME = "RouteParamREST"; +RouteParamREST.prototype = { + /** + * @lends module:RouteParamREST# + */ + + /** + * Constructeur (alias) + */ + constructor: RouteParamREST, + /** + * Retourne une liste de points + * @returns {String} une liste de points (sep '|') + */ + getIntermediates: function getIntermediates() { + var array = []; + if (this.intermediates.length !== 0) { + for (var i = 0; i < this.intermediates.length; i++) { + var obj = this.intermediates[i]; + array.push(obj.x + "," + obj.y); + } + } + return array.join("|"); + }, + /** + * Retourne une liste d'attributs + * @returns {String} une liste d'attributs (sep '|') + */ + getWaysAttributes: function getWaysAttributes() { + return this.waysAttributes.join("|"); + }, + /** + * Retourne un profile + * @returns {String} profile + */ + getProfile: function getProfile() { + return this.profile; + }, + /** + * Retourne un distanceUnit + * @returns {String} distanceUnit + */ + getDistanceUnit: function getDistanceUnit() { + if (this.distanceUnit === "m") { + return "meter"; + } + if (this.distanceUnit === "km") { + return "kilometer"; + } + return ""; + }, + /** + * Retourne une optimisation + * @returns {String} optimization + */ + getOptimization: function getOptimization() { + if (this.optimization) { + return this.optimization; + } else { + return ""; + } + }, + /** + * Retourne la liste des constraints + * @returns {String} une liste des constraints (sep '|') + */ + getConstraints: function getConstraints() { + var constraintArray = []; + if (this.constraints.length !== 0) { + for (var k = 0; k < this.constraints.length; k++) { + constraintArray.push(JSON.stringify(this.constraints[k])); + } + } + return constraintArray.join("|"); + } +}; + +/** + * Tableau de clefs/valeurs pour param. + * + * @returns {Array} liste de paramêtres + */ +RouteParamREST.prototype.getParams = function () { + var map = []; + map.push({ + k: "resource", + v: this.resource + }); + map.push({ + k: "start", + v: this.start + }); + map.push({ + k: "end", + v: this.end + }); + map.push({ + k: "geometryFormat", + v: "geojson" + }); + if (this.optimization) { + map.push({ + k: "optimization", + v: this.getOptimization() + }); + } + if (this.intermediates) { + map.push({ + k: "intermediates", + v: this.getIntermediates() + }); + } + if (this.profile) { + map.push({ + k: "profile", + v: this.getProfile() + }); + } + if (this.constraints) { + map.push({ + k: "constraints", + v: this.getConstraints() + }); + } + if (this.crs) { + map.push({ + k: "crs", + v: this.crs + }); + } + if (this.distanceUnit) { + map.push({ + k: "distanceUnit", + v: this.getDistanceUnit() + }); + } + if (this.timeUnit) { + map.push({ + k: "timeUnit", + v: this.timeUnit + }); + } + if (this.waysAttributes) { + map.push({ + k: "waysAttributes", + v: this.getWaysAttributes() + }); + } + return map; +}; +/* harmony default export */ __webpack_exports__["default"] = (RouteParamREST); + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _model_RouteResponse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58); +/* harmony import */ var _model_RouteInstruction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(59); + + + + + + +/** + * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON + * (Factory) + * + * @module RouteResponseFactory + * @alias Gp.Services.Route.Response.RouteResponseFactory + * @private + */ +var RouteResponseFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant Route + * + * @example + * var options = { + * response : + * outputFormat : + * rawResponse : + * scope : + * onSuccess : + * onError : + * }; + * + */ + build: function build(options) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("RouteResponseFactory"); + logger.trace("RouteResponseFactory::build()"); + var data = null; + if (options.response) { + if (options.rawResponse) { + logger.trace("analyze response : raw"); + data = options.response; + } else { + logger.trace("analyze response : json"); + var JSONResponse; + if (typeof options.response === "string") { + JSONResponse = JSON.parse(options.response); + } else { + JSONResponse = options.response; + } + + // construction de l'objet réponse JSON + if (JSONResponse) { + // le service renvoie t il une erreur ? + if (JSONResponse.message) { + // ex. {"message":"message not null", "status":"ERROR"} + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", JSONResponse.message))); + return; + } + var legs = []; + var legSteps = []; + var steps = []; + data = new _model_RouteResponse__WEBPACK_IMPORTED_MODULE_3__["default"](); + if (data.hasOwnProperty("totalTime")) { + data.totalTime = parseFloat(JSONResponse.duration); + } + if (data.hasOwnProperty("totalDistance")) { + data.totalDistance = parseFloat(JSONResponse.distance); + } + if (data.hasOwnProperty("bbox")) { + data.bbox.left = parseFloat(JSONResponse.bbox[0]); + data.bbox.bottom = parseFloat(JSONResponse.bbox[1]); + data.bbox.right = parseFloat(JSONResponse.bbox[2]); + data.bbox.top = parseFloat(JSONResponse.bbox[3]); + } + if (data.hasOwnProperty("routeGeometry") && !options.geometryInInstructions) { + data.routeGeometry = JSONResponse.geometry; + } + if (data.hasOwnProperty("routeInstructions") && options.geometryInInstructions) { + var legList = JSONResponse.portions; + var i; + if (Array.isArray(legList) && legList.length) { + for (i = 0; i < legList.length; i++) { + legs.push(legList[i]); + } + } + if (legs.length) { + for (i = 0; i < legs.length; i++) { + legSteps.push(legs[i].steps); + } + } + if (legSteps.length) { + for (i = 0; i < legSteps.length; i++) { + steps = steps.concat(legSteps[i]); + } + } + steps.forEach(function (step) { + data.routeInstructions.push(new _model_RouteInstruction__WEBPACK_IMPORTED_MODULE_4__["default"]()); + data.routeInstructions[data.routeInstructions.length - 1].duration = step.duration; + data.routeInstructions[data.routeInstructions.length - 1].distance = step.distance; + data.routeInstructions[data.routeInstructions.length - 1].code = ""; + data.routeInstructions[data.routeInstructions.length - 1].instruction = ""; + data.routeInstructions[data.routeInstructions.length - 1].geometry = step.geometry; + + // on ne souhaite pas de ce type de valeur... + if (step.name === "Valeur non renseignée") { + step.name = ""; + } + switch (step.instruction.type) { + case "turn": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Tourner"; + break; + case "new name": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Continuer tout droit"; + break; + case "depart": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Départ"; + break; + case "arrive": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Arrivée"; + break; + case "merge": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Rejoindre"; + break; + case "ramp": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Prendre la bretelle"; + break; + case "on ramp": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Prendre la bretelle"; + break; + case "off ramp": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Prendre la sortie"; + break; + case "fork": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Sur la bifurcation, prendre"; + break; + case "end of road": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "À la fin de la route, prendre"; + break; + case "use lane": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Utiliser la file"; + break; + case "continue": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Continuer"; + break; + case "roundabout": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Au rond-point"; + break; + case "rotary": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Au rond-point"; + break; + case "roundabout turn": + data.routeInstructions[data.routeInstructions.length - 1].instruction += "Au rond point, tourner"; + break; + case "notification": + data.routeInstructions[data.routeInstructions.length - 1].instruction += ""; + break; + default: + data.routeInstructions[data.routeInstructions.length - 1].instruction += "?" + step.instruction.type + "?"; + break; + } + if (step.instruction.modifier) { + switch (step.instruction.modifier) { + case "uturn": + data.routeInstructions[data.routeInstructions.length - 1].instruction = "Faire demi-tour"; + break; + case "sharp right": + data.routeInstructions[data.routeInstructions.length - 1].instruction += " complètement à droite"; + break; + case "right": + data.routeInstructions[data.routeInstructions.length - 1].instruction += " à droite"; + break; + case "slight right": + data.routeInstructions[data.routeInstructions.length - 1].instruction += " légèrement à droite"; + break; + case "straight": + data.routeInstructions[data.routeInstructions.length - 1].instruction = "Continuer tout droit"; + break; + case "slight left": + data.routeInstructions[data.routeInstructions.length - 1].instruction += " lègèrement à gauche"; + break; + case "left": + data.routeInstructions[data.routeInstructions.length - 1].instruction += " à gauche"; + break; + case "sharp left": + data.routeInstructions[data.routeInstructions.length - 1].instruction += " complètement à gauche"; + break; + default: + data.routeInstructions[data.routeInstructions.length - 1].instruction += " ?" + step.instruction.modifier + "?"; + break; + } + } + if (step.instruction.exit) { + data.routeInstructions[data.routeInstructions.length - 1].instruction += "".concat(step.instruction.exit, "e sortie"); + } + if (step.attributes.name) { + if (step.attributes.name.nom_1_droite || step.attributes.name.toponyme) { + data.routeInstructions[data.routeInstructions.length - 1].instruction += " sur"; + } + if (step.attributes.name.nom_1_droite) { + data.routeInstructions[data.routeInstructions.length - 1].instruction += " ".concat(step.attributes.name.nom_1_droite); + } + if (step.attributes.name.toponyme) { + data.routeInstructions[data.routeInstructions.length - 1].instruction += " ".concat(step.attributes.name.toponyme); + } + } + }); + } + } + if (!data) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_ANALYSE", "json"))); + return; + } + + // Si la réponse contenait une exception renvoyée par le service + if (data.exceptionReport) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION_2"))); + return; + } + } + } else { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + return; + } + options.onSuccess.call(options.scope, data); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (RouteResponseFactory); + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Response object for {@link module:Services~route Gp.Services.route ()} invocation when successful. Received as the argument of onSuccess callback function. + * + * @property {Gp.BBox} bbox - Bounding Box of the route. Given when provideBBox parameter is used in function call. + * @property {Object} routeGeometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the route. + * @property {Array.} routeInstructions - Instructions of the route. + * @property {String} totalDistance - Length of the route. If distanceUnit parameter was set to "km" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by " Km" (e.g. : "19.6 Km"). If distanceUnit parameter was set to "m", totalDistance is a string containing the total distance expressed in meters (e.g. : "19599.14"). + * @property {Float} totalTime - Route duration in seconds. + * + * @namespace + * @alias Gp.Services.RouteResponse + */ +function RouteResponse() { + if (!(this instanceof RouteResponse)) { + throw new TypeError("RouteResponse constructor cannot be called as a function."); + } + this.totalTime = null; + this.totalDistance = null; + this.bbox = { + left: null, + right: null, + top: null, + bottom: null + }; + this.routeGeometry = null; // FIXME can be null if option 'geometryInInstructions' is true ! + + this.routeInstructions = []; +} +RouteResponse.prototype = { + constructor: RouteResponse +}; +/* harmony default export */ __webpack_exports__["default"] = (RouteResponse); + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Single Route Instruction object. + * + * @property {String} code - Instruction code : + * + * - "F" : Straight forward + * - "B" : U-turn + * - "L" : turn left + * - "R" : turn right + * - "BL" : turn left strongly + * - "BR" : turn right strongly + * - "FL" : turn lightly to the left + * - "FR" : turn lightly to the right + * - "round_about_entry" : round about entry + * - "round_about_exit" : round about exit + * + * @property {String} instruction - Instruction text : translated code + street name + * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the street. + * @property {Float} distance - Length of the instruction. Expressed in km or m, depending on distanceUnit parameter. + * @property {Float} duration - Instruction duration in seconds. + * + * @namespace + * @alias Gp.Services.Route.RouteInstruction + */ +function RouteInstruction() { + if (!(this instanceof RouteInstruction)) { + throw new TypeError("RouteInstruction constructor cannot be called as a function."); + } + this.duration = null; + this.distance = null; + this.code = null; + this.instruction = null; + this.geometry = null; // FIXME can be null if option 'geometryInInstructions' is false ! +} +RouteInstruction.prototype = { + constructor: RouteInstruction +}; +/* harmony default export */ __webpack_exports__["default"] = (RouteInstruction); + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _CommonService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7); +/* harmony import */ var _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24); +/* harmony import */ var _Request_ProcessIsoCurveRequest__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(61); +/* harmony import */ var _Response_ProcessIsoCurveResponseFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(63); + + + + + + + + +/** + * @classdesc + * Appel du service d'isochrone/distance du Géoportail : + * envoi de la requête construite selon les paramètres en options, + * éventuellement parsing et analyse de la réponse, + * retour d'une réponse en paramètre de la fonction onSuccess. + * @constructor + * @extends {Gp.Services.CommonService} + * @alias Gp.Services.ProcessIsoCurve + * @param {Object} options - options spécifiques au service (+ les options heritées) + * + * @param {String} options.resource - La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr. + * + * @param {String} options.outputFormat - Le format de la réponse du service iso : 'json' uniquement et par défaut. + * + * @param {Object} options.position - Point de départ du calcul. + * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) + * @param {Float} options.position.x - Abcisse du point de départ du calcul d'isochrone/distance. + * @param {Float} options.position.y - Ordonnée du point de départ du calcul d'isochrone/distance. + * + * @param {String} options.srs - Projection. + * Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et + * dans lequel la géométrie de la courbe résultante sera exprimée. + * Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ». + * + * @param {String} [options.graph = "voiture"] - Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »). + * La valeur par défaut est : «voiture» + * + * @param {Array.} [options.exclusions] - DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints. + * Critères d'exclusions à appliquer pour le calcul. + * On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte + * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »). + * + * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities. + * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement "banned". + * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement "wayType". + * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement "=". + * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement "autoroute". + * + * @param {String} [options.method = "time"] - Méthode utilisée pour le calcul de la courbe iso. + * Les valeurs possible sont "time" pour un calcul d'isochrone, "distance" pour un calcul d'isodistance. + * Pas de valeur spécifié équivaut à un calcul d'isochrone. + * + * @param {String} [options.distanceUnit = "m"] - Indique si la distance doit être exprimée en km ou m dans la réponse ("m" or "km"). + * + * @param {String} [options.timeUnit = "second"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse ("standard", "second", "minute", "hour"). Il peut-être formatté hh:mm::ss avec la valeur standard. + * + * @param {Float} options.time - Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ». + * Ce paramètre doit être renseigné si l'option "méthod" a la valeur "time". + * Si l'option method n'est pas renseignée, ce paramètre doit être renseigné. + * + * @param {Float} options.distance - Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ». + * Ce paramètre doit être renseigné si l'option "méthod" a la valeur "DISTANCE". + * Si l'option "method" n'est pas renseignée, ce paramètre sera ignoré. + * + * @param {Boolean} [options.reverse = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier. + * Par défaut, la valeur « false » est appliquée. + * + * @param {Boolean} [options.smoothing = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier. + * Par défaut, la valeur « false » est appliquée. + * + * @param {Boolean} [options.holes = false] - Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »). + * Par défaut, la valeur « false » est appliquée. + * + * @example + * var options = { + * // options communes aux services + * apiKey : null, + * serverUrl : 'http://localhost/service/', + * protocol : 'JSONP', // JSONP|XHR + * proxyURL : null, + * httpMethod : 'GET', // GET|POST + * timeOut : 10000, // ms + * rawResponse : false, // true|false + * scope : null, // this + * onSuccess : function (response) {}, + * onFailure : function (error) {}, + * // spécifique au service + * position : { + * x : 2.3242664298058053, + * y : 48.86118017324745 + * }, + * resource : bdtopo-valhalla, + * distance : 200, + * [time : ] + * method : "distance", + * graph : "voiture", + * reverse : false + * }; + */ + +function ProcessIsoCurve(options) { + if (!(this instanceof ProcessIsoCurve)) { + throw new TypeError(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("CLASS_CONSTRUCTOR", "ProcessIsoCurve")); + } + + /** + * Nom de la classe (heritage) + * FIXME instance ou classe ? + */ + this.CLASSNAME = "ProcessIsoCurve"; + + // appel du constructeur par heritage + _CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].apply(this, arguments); + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("Gp.Services.ProcessIsoCurve"); + this.logger.trace("[Constructeur ProcessIsoCurve (options)]"); + if (!options.position) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "position")); + } + + // on lance une exception afin d'eviter au service de le faire... + if (options.position.x === null) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "position.x")); + } + if (options.position.y === null) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_MISSING", "position.y")); + } + if (!options.time && !options.distance) { + throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance"); + } + + // si on a que le paramètre "distance" en entrée, on calcule une isodistance. + // Le paramètre "méthode" doit pour avoir une réponse du service, être passé à "distance" + if (!options.time && options.distance) { + this.options.method = "distance"; + // on supprime l'éventuel attribut time, résidu d'un appel antérieur + if (this.options.time) { + delete this.options.time; + } + } + + // si on a que le paramètre "time" en entrée, on calcule une isochrone. + // Le paramètre "méthode" doit pour avoir une réponse du service, être passé à "time" + if (options.time && !options.distance) { + this.options.method = "time"; + // on supprime l'éventuel attribut time, résidu d'un appel antérieur + if (this.options.distance) { + delete this.options.distance; + } + } + + // au cas où on a ni l'un, ni l'autre... + this.options.method = this.options.method || "time"; + + // options par defaut du service + // TODO: modifier la ressource lors de la mise en production du service + this.options.resource = options.resource || "bdtopo-valhalla"; + this.options.exclusions = options.exclusions || []; + this.options.reverse = options.reverse || false; + this.options.srs = options.srs || "EPSG:4326"; + this.options.distanceUnit = options.distanceUnit || "m"; + this.options.timeUnit = options.timeUnit || "second"; + + // options depreciees + if (options.smoothing) { + this.logger.warn("options.smoothing is DEPRECATED"); + } + this.options.smoothing = false; + if (options.holes) { + this.logger.warn("options.holes is DEPRECATED"); + } + this.options.holes = false; + + // Gestion du graphe + if (options.graph) { + if (options.graph === "Voiture") { + this.options.graph = "car"; + } + if (options.graph === "Pieton") { + this.options.graph = "pedestrian"; + } + } else { + this.options.graph = "car"; + } + + // Gestions des contraintes + this.options.constraints = []; + if (options.constraints) { + if (Array.isArray(options.constraints)) { + for (var k = 0; k < options.constraints.length; k++) { + this.options.constraints.push(options.constraints[k]); + } + } else { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_TYPE", "constraints")); + } + } + + // Gestion de l'ancien paramètre exclusions + var constraintTunnel = {}; + var constraintPont = {}; + var constraintAutoroute = {}; + if (options.exclusions) { + if (options.exclusions.length !== 0) { + this.logger.warn("options.exclusions is DEPRECATED !!"); + for (var c = 0; c < options.exclusions.length; c++) { + if (typeof options.exclusions[c] === "string") { + options.exclusions[c] = options.exclusions[c].toLowerCase(); + } else { + // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions + continue; + } + if (options.exclusions[c] === "toll") { + constraintAutoroute.constraintType = "banned"; + constraintAutoroute.key = "wayType"; + constraintAutoroute.operator = "="; + constraintAutoroute.value = "autoroute"; + this.options.constraints.push(constraintAutoroute); + } + if (options.exclusions[c] === "tunnel") { + constraintTunnel.constraintType = "banned"; + constraintTunnel.key = "wayType"; + constraintTunnel.operator = "="; + constraintTunnel.value = "tunnel"; + this.options.constraints.push(constraintTunnel); + } + if (options.exclusions[c] === "bridge") { + constraintPont.constraintType = "banned"; + constraintPont.key = "wayType"; + constraintPont.operator = "="; + constraintPont.value = "pont"; + this.options.constraints.push(constraintPont); + } + } + } + } + + // on passe l'option outputFormat en minuscules afin d'éviter des exceptions. + this.options.outputFormat = typeof options.outputFormat === "string" ? options.outputFormat.toLowerCase() : "json"; + if (options.outputFormat && options.outputFormat !== "json") { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_NOT_SUPPORT", "outputFormat")); + } + this.options.outputFormat = "json"; + + // gestion de l'url du service par defaut + // si l'url n'est pas renseignée, il faut utiliser les urls par defaut + if (!this.options.serverUrl) { + var urlFound = _DefaultUrlService__WEBPACK_IMPORTED_MODULE_4__["default"].ProcessIsoCurve.newUrl(); + if (!urlFound) { + throw new Error("Url by default not found !"); + } + this.options.serverUrl = urlFound; + this.logger.trace("Serveur URL par defaut : " + this.options.serverUrl); + } +} + +/** + * @lends module:ProcessIsoCurve# + */ +ProcessIsoCurve.prototype = Object.create(_CommonService__WEBPACK_IMPORTED_MODULE_3__["default"].prototype, { + // todo + // getter/setter +}); + +/* + * Constructeur (alias) + */ +ProcessIsoCurve.prototype.constructor = ProcessIsoCurve; + +/** + * Création de la requête (overwrite) + * + * @param {Function} error - callback des erreurs + * @param {Function} success - callback + */ +ProcessIsoCurve.prototype.buildRequest = function (error, success) { + try { + var oIsoCurve = new _Request_ProcessIsoCurveRequest__WEBPACK_IMPORTED_MODULE_5__["default"](this.options); + if (!oIsoCurve.processRequestString()) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_REQUEST_BUILD")); + } + this.request = oIsoCurve.requestString; + } catch (e) { + error.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](e.message)); + return; + } + success.call(this, this.request); +}; + +/** + * (overwrite) + * Analyse de la reponse + * + * @param {Function} onError - callback des erreurs + * @param {Function} onSuccess - callback de succès de l'analyse de la réponse + */ +ProcessIsoCurve.prototype.analyzeResponse = function (onError, onSuccess) { + if (this.response) { + var options = { + response: this.response, + outputFormat: this.options.outputFormat, + rawResponse: this.options.rawResponse, + onSuccess: onSuccess, + onError: onError, + scope: this + }; + _Response_ProcessIsoCurveResponseFactory__WEBPACK_IMPORTED_MODULE_6__["default"].build(options); + } else { + onError.call(this, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (ProcessIsoCurve); + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _model_ProcessIsoCurveParam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(62); + + + + +/** + * @classdesc + * Classe de gestion des requêtes sur le service de calcul d'isoschrone/isodistance. + * Les requêtes peuvent être en mode GET ou POST, + * et le format de sorti est en JSON. + * + * @constructor + * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveRequest + * @param {Object} options - options + * + * @example + * var options = { + * httpMethod : 'GET', // GET|POST + * // spécifique au service + * position : { + * x : 2.3242664298058053, + * y : 48.86118017324745 + * }, + * graph : "car", + * method : 'time', + * time : 1000, //distance : 200 + * reverse : false, + * srs : 'EPSG:4326' + * }; + * + * try { + * + * var oIsoCurve = new ProcessIsoCurveRequest (options); + * if (!oIsoCurve.processRequestString ()) { + * // error + * } + * + * var request = oIsoCurve.requestString; + * + * } catch (e) { + * // error + * } + * @private + */ +function ProcessIsoCurveRequest(options) { + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("ProcessIsoCurveRequest"); + this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"); + if (!(this instanceof ProcessIsoCurveRequest)) { + throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function."); + } + + // existance des options + if (!options) { + throw new Error(_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("PARAM_EMPTY", "options")); + } + + /** + * Liste des options + */ + this.settings = options; + + /** + * Mode HTPP. + * Par defaut, "GET". + * @type {String} + */ + this.mode = this.settings.httpMethod || "GET"; +} +ProcessIsoCurveRequest.prototype = { + /** + * @lends module:ProcessIsoCurveRequest# + */ + + /** + * Requête + * @type {String} + */ + requestString: null, + /** + * Constructeur (alias) + */ + constructor: ProcessIsoCurveRequest, + /** + * Construction de la requête. + * + * @example + * // GET out : + * // (http://wxs.ign.fr/KEY/isochrone?) + * // resource=& + * // point=& + * // costValue=& + * // costType=& + * // profile=& + * // constraints=& + * // direction=& + * // crs= + * + * // POST out : + * { + * resource: "bduni-idf-pgr", + * point: "2.337306,48.849319", + * costValue: 100, + * costType: "time", + * profile: "car", + * constraints: [{ + * constraintType: "banned", + * key: "ways_type", + * operator: "=", + * value: "autoroute" + * }] + * } + * + * @returns {String} request + */ + processRequestString: function processRequestString() { + var request = ""; + var i = 0; + switch (this.mode) { + case "GET": + this.logger.trace("Process GET Request"); + + // Mapping des options avec le service de l'API REST + var oParams = new _model_ProcessIsoCurveParam__WEBPACK_IMPORTED_MODULE_2__["default"](this.settings); + var params = oParams.getParams(); + for (i = 0; i < params.length; i++) { + var o = params[i]; + if (request) { + request += "&"; + } + request += o.k + "=" + o.v; + } + break; + case "POST": + this.logger.trace("Process POST Request"); + // creation du JSON + var postRequest = {}; + postRequest.resource = this.settings.resource; + postRequest.point = this.settings.position.x + "," + this.settings.position.y; + if (this.settings.method === "distance") { + postRequest.costType = "distance"; + postRequest.costValue = this.settings.distance; + } else { + postRequest.costType = "time"; + postRequest.costValue = this.settings.time; + } + postRequest.profile = this.settings.graph; + if (this.settings.reverse) { + postRequest.direction = "arrival"; + } else { + postRequest.direction = "departure"; + } + postRequest.constraints = this.settings.constraints; + postRequest.distanceUnit = this.settings.distanceUnit; + postRequest.timeUnit = this.settings.timeUnit; + postRequest.crs = this.settings.srs; + + // conversion en chaîne de caractères + request = JSON.stringify(postRequest); + break; + default: + this.logger.error("No other HTTP method supported by the service !"); + } + this.logger.trace(request); + this.requestString = request; + return this.requestString; + } +}; +/* harmony default export */ __webpack_exports__["default"] = (ProcessIsoCurveRequest); + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); + + +/** + * @classdesc + * + * Classe de gestion des param. des requêtes du service de calcul des iso. + * Permet le mapping avec les options du service. + * + * @constructor + * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveParam + * @param {Object} options - options + * @private + * + */ +function ProcessIsoCurveParam(options) { + if (!(this instanceof ProcessIsoCurveParam)) { + throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function."); + } + this.logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger(); + this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"); + + /** + * Options en paramêtres du constructeur. + */ + this.options = options || {}; + + // mapping des options avec l'API REST + + /** Identifiant de l’isochrone */ + this.id = this.options.id; + + /** Resource */ + this.resource = this.options.resource; + + /** Coordonnées de départ (ou arrivée si le reverse est à true). */ + this.point = this.options.position; + + /** projection (code EPSG comme epsg:4326 ou wgs84) */ + this.crs = this.options.srs; + + /** + * Profil de véhicule à utiliser pour le calcul. + * Voiture ou Pieton + */ + this.profile = this.options.graph; + + /** Liste des règles de restrictions à utiliser */ + this.constraints = this.options.constraints; + this.reverse = this.options.reverse; + this.timeUnit = this.options.timeUnit; + this.distanceUnit = this.options.distanceUnit; + + /** + * "time" pour isochrone ou "distance" for isodistance. + * Par defaut, time... + */ + if (this.options.method === "distance") { + this.costType = "distance"; + this.costValue = this.options.distance; + if (this.distanceUnit === "m" && this.costValue >= 50000) { + this.distanceUnit = "km"; + this.costValue /= 1000; + } + } else { + this.costType = "time"; + this.costValue = this.options.time; + } +} + +/** + * CLASSNAME + */ +ProcessIsoCurveParam.CLASSNAME = "ProcessIsoCurveParam"; +ProcessIsoCurveParam.prototype = { + /** + * @lends module:ProcessIsoCurveParam# + */ + + /** + * Constructeur (alias) + */ + constructor: ProcessIsoCurveParam, + /** + * Retourne le point + * @returns {String} x,y + */ + getLocation: function getLocation() { + return this.point.x + "," + this.point.y; + }, + /** + * Retourne l'unité de la distance + * @returns {String} + */ + getDistanceUnit: function getDistanceUnit() { + if (this.distanceUnit === "m") { + return "meter"; + } + if (this.distanceUnit === "km") { + return "kilometer"; + } + return ""; + }, + /** + * Retourne la liste des contraintes + * @returns {String} + */ + getConstraints: function getConstraints() { + var constraintArray = []; + if (this.constraints.length !== 0) { + for (var k = 0; k < this.constraints.length; k++) { + constraintArray.push(JSON.stringify(this.constraints[k])); + } + } + return constraintArray.join("|"); + }, + /** + * Retourne la direction + * @returns {String} + */ + getDirection: function getDirection() { + if (this.reverse) { + return "arrival"; + } else { + return "departure"; + } + } +}; + +/** + * Tableau de clefs/valeurs pour param. + * + * @returns {Object[]} KVP + */ +ProcessIsoCurveParam.prototype.getParams = function () { + var map = []; + map.push({ + k: "resource", + v: this.resource + }); + map.push({ + k: "point", + v: this.getLocation() + }); + map.push({ + k: "direction", + v: this.getDirection() + }); + map.push({ + k: "costType", + v: this.costType + }); + map.push({ + k: "costValue", + v: this.costValue + }); + map.push({ + k: "profile", + v: this.profile + }); + map.push({ + k: "timeUnit", + v: this.timeUnit + }); + map.push({ + k: "distanceUnit", + v: this.getDistanceUnit() + }); + if (this.crs) { + map.push({ + k: "crs", + v: this.crs + }); + } + if (this.constraints) { + map.push({ + k: "constraints", + v: this.getConstraints() + }); + } + return map; +}; +/* harmony default export */ __webpack_exports__["default"] = (ProcessIsoCurveParam); + +/***/ }), +/* 63 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(22); +/* harmony import */ var _model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64); + + + + + +/** + * Factory pour générer une reponse JSON à partir d'un JSON + * (Factory) + * + * @module ProcessIsoCurveResponseFactory + * @alias Gp.Services.ProcessIsoCurve.Response.ProcessIsoCurveResponseFactory + * @private + */ +var ProcessIsoCurveResponseFactory = { + /** + * interface unique + * + * @method build + * @static + * @param {Object} options - options definies dans le composant ProcessIsoCurve + * + * @example + * var options = { + * response : + * outputFormat : + * rawResponse : + * scope : + * onSuccess : + * onError : + * }; + * + */ + build: function build(options) { + // logger + var logger = _Utils_LoggerByDefault__WEBPACK_IMPORTED_MODULE_0__["default"].getLogger("ProcessIsoCurveResponseFactory"); + logger.trace(["ProcessIsoCurveResponseFactory::build()"]); + var data = null; + if (options.response) { + if (options.rawResponse) { + logger.trace("analyze response : raw"); + data = options.response; + } else { + logger.trace("analyze response : json"); + var JSONResponse; + if (typeof options.response === "string") { + JSONResponse = JSON.parse(options.response); + } else { + JSONResponse = options.response; + } + + // analyse de la reponse + // création de l'objet de réponse + data = new _model_ProcessIsoCurveResponse__WEBPACK_IMPORTED_MODULE_3__["default"](); + + // remplissage de l'objet créé avec les attribtuts de la réponse du service + if (JSONResponse) { + if (JSONResponse.costType === "distance") { + data.time = ""; + data.distance = JSONResponse.costValue; + } else { + data.time = JSONResponse.costValue; + data.distance = ""; + } + data.message = ""; + data.id = ""; + data.srs = JSONResponse.crs; + data.geometry = JSONResponse.geometry; + var coords = JSONResponse.point.split(","); + if (data.location) { + data.location.x = coords[0]; + data.location.y = coords[1]; + } + } else { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_ANALYSE", options.response))); + return; + } + + // info : en cas de problèmes de droits (clé invalide ou autre), la réponse est au format XML !! + // ex. Key does not exist or has expired + // mais le statut est 403, l'erreur est donc remontée plus tôt. + if (data.exceptionReport) { + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"]({ + message: _Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EXCEPTION", data.exceptionReport), + type: _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"].TYPE_SRVERR, + status: 200 + })); + return; + } + } + } else { + // si la réponse est vide, on appelle le callback d'erreur + options.onError.call(options.scope, new _Exceptions_ErrorService__WEBPACK_IMPORTED_MODULE_2__["default"](_Utils_MessagesResources__WEBPACK_IMPORTED_MODULE_1__["default"].getMessage("SERVICE_RESPONSE_EMPTY"))); + return; + } + + // si tout s'est bien passé, on appelle le callback de succès + options.onSuccess.call(options.scope, data); + } +}; +/* harmony default export */ __webpack_exports__["default"] = (ProcessIsoCurveResponseFactory); + +/***/ }), +/* 64 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Response object for {@link module:Services~isoCurve Gp.Services.isoCurve ()} invocation when successful. Received as the argument of onSuccess callback function. + * + * @property {Float} distance - distance (expressed in meters) used for the request. + * @property {Float} time - time (expressed in seconds) used for the request. + * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the isocurve. + * @property {String} id - request id (used by underlying webservice). + * @property {Gp.Point} location - Position of the start or end point used for the request (expressed in "srs" coordinates system). + * @property {String} message - message + * @property {String} srs - Identifier of the coordinates system used for the isocurve. + * + * @namespace + * @alias Gp.Services.IsoCurveResponse + * + */ +function ProcessIsoCurveResponse() { + if (!(this instanceof ProcessIsoCurveResponse)) { + throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function."); + } + this.message = null; + this.id = null; + this.location = {}; + this.location.x = null; + this.location.y = null; + this.srs = null; + this.geometry = null; + this.time = null; + this.distance = null; +} +ProcessIsoCurveResponse.prototype = { + constructor: ProcessIsoCurveResponse +}; +/* harmony default export */ __webpack_exports__["default"] = (ProcessIsoCurveResponse); + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/v3.4.3/dist/GpServices.js b/v3.4.3/dist/GpServices.js new file mode 100644 index 00000000..d2d98ba3 --- /dev/null +++ b/v3.4.3/dist/GpServices.js @@ -0,0 +1,30 @@ +/*! + * @brief Geoportal resources access library + * + * This software is released under the licence CeCILL-B (Free BSD compatible) + * @see http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt + * @see http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt + * @see http://www.cecill.info/ + * + * copyright CeCILL-B + * copyright IGN + * @author IGN + * @version 3.4.3 + * @date 21/08/2024 + * + */ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version v4.2.4 + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("node-fetch")):"function"==typeof define&&define.amd?define("Gp",["require"],t):"object"==typeof exports?exports.Gp=t(require("node-fetch")):e.Gp=t(e[void 0])}(this,(function(e){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=7)}([function(e){e.exports=JSON.parse('{"name":"geoportal-access-lib","version":"3.4.3","date":"21/08/2024","description":"French Geoportal resources access library","module":"src/Gp.js","main":"dist/GpServices-src.js","homepage":"https://github.com/IGNF/geoportal-access-lib#readme","scripts":{"clean":"echo \\"Warning: no yet implemented!\\" && exit 0","setup":"npm install","cover":"nyc --reporter=lcov --reporter=text npm run test","eslint":"eslint src/","build":"webpack --mode=none","build:prod":"webpack --mode=production","build:dev":"webpack --mode=development","test":"mocha-webpack --reporter mochawesome --reporter-options reportDir=test-report,reportFilename=index --webpack-config ./test/webpack/webpack.test.js --glob \\"test_*.js\\" test/spec/","test:serve":"webpack-dev-server --hot --config ./test/webpack/webpack.test.serve.js","test:serve:docker":"webpack-dev-server --hot --config ./test/webpack/webpack.test.serve.docker.js","test:end-to-end:serve":"webpack-dev-server --hot --config ./test/webpack/webpack.end-to-end.serve.js","test:end-to-end:serve:docker":"webpack-dev-server --hot --config ./test/webpack/webpack.end-to-end.serve.docker.js","sample":"npm run sample:serve","sample:serve":"webpack-dev-server --mode=none --open-page samples/index-src.html --https --content-base . --output-public-path \'/dist/\' --port 9001 --open","sample:serve:prod":"webpack-dev-server --mode=production --open-page samples/index-prod.html --content-base . --output-public-path \'/dist/\' --port 9001 --open","sample:serve:dev":"webpack-dev-server --mode=development --open-page samples/index-map.html --content-base . --output-public-path \'/dist/\' --port 9001 --open","doc":"npm run doc:serve","doc:serve":"webpack-dev-server --content-base jsdoc --port 9001 --open"},"engines":{"node":"<=16"},"nyc":{"include":["src/**/*.js"],"instrument":false,"sourceMap":false},"repository":{"type":"git","url":"https://github.com/IGNF/geoportal-access-lib.git"},"keywords":["geoplateforme","geoportail","webservice","javascript","es6"],"author":"IGNF","license":"CECILL-B","dependencies":{"es6-promise":"^4.2.4","node-fetch":"^2.6.1","@xmldom/xmldom":"^0.8.10"},"devDependencies":{"@babel/core":"^7.12.10","@babel/plugin-transform-template-literals":"^7.12.1","@babel/preset-env":"^7.12.11","babel-loader":"^8.2.2","chai":"^4.1.2","clean-webpack-plugin":"^3.0.0","copy-webpack-plugin":"^5.1.2","eslint":"^7.18.0","eslint-config-standard":"^16.0.2","eslint-loader":"^4.0.2","eslint-plugin-import":"^2.22.1","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^5.0.0","glob":"^7.1.2","handlebars-layouts":"^3.1.4","handlebars-webpack-plugin":"^1.4.1","html-webpack-plugin":"^4.5.1","istanbul-instrumenter-loader":"^3.0.1","jsdoc-webpack-plugin":"^0.3.0","loglevel":"^1.6.1","mocha":"^7.2.0","mocha-loader":"^5.1.5","mocha-webpack":"^2.0.0-beta.0","mochawesome":"^6.2.1","nyc":"^15.1.0","path":"^0.12.7","replace-bundle-webpack-plugin":"^1.0.0","sinon":"^9.2.4","sinon-es6":"0.0.3","speed-measure-webpack-plugin":"^1.4.2","string-template":"^1.0.0","terser-webpack-plugin":"^2.3.8","webpack":"^4.46.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-node-externals":"^2.5.2","webpack-shell-plugin":"^0.5.0"},"bundledDependencies":[],"peerDependencies":{},"optionalDependencies":{}}')},function(e,t,r){"use strict";function o(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.freeze?t.freeze(e):e}var n=o({HTML:"text/html",isHTML:function(e){return e===n.HTML},XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),s=o({HTML:"http://www.w3.org/1999/xhtml",isHTML:function(e){return e===s.HTML},SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o=0&&t<=l.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?p+=":"+e:"symbol"==typeof e&&(p=void 0),l.name=e,l.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},l.methodFactory=t||u,l.getLevel=function(){return null!=a?a:null!=i?i:s},l.setLevel=function(e,t){return a=f(e),!1!==t&&function(e){var t=(r[e]||"silent").toUpperCase();if("undefined"!=typeof window&&p){try{return void(window.localStorage[p]=t)}catch(e){}try{window.document.cookie=encodeURIComponent(p)+"="+t+";"}catch(e){}}}(a),c.call(l)},l.setDefaultLevel=function(e){i=f(e),h()||l.setLevel(e,!1)},l.resetLevel=function(){a=null,function(){if("undefined"!=typeof window&&p){try{window.localStorage.removeItem(p)}catch(e){}try{window.document.cookie=encodeURIComponent(p)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}(),c.call(l)},l.enableAll=function(e){l.setLevel(l.levels.TRACE,e)},l.disableAll=function(e){l.setLevel(l.levels.SILENT,e)},l.rebuild=function(){if(n!==l&&(s=f(n.getLevel())),c.call(l),n===l)for(var e in o)o[e].rebuild()},s=f(n?n.getLevel():"WARN");var d=h();null!=d&&(a=f(d)),c.call(l)}(n=new p).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new p(e,n.methodFactory)),t};var h="undefined"!=typeof window?window.log:void 0;return n.noConflict=function(){return"undefined"!=typeof window&&window.log===n&&(window.log=h),n},n.getLoggers=function(){return o},n.default=n,n})?o.call(t,r,t,e):o)||(e.exports=n)}()},function(t,r){t.exports=e},function(e,t,r){var o=r(5);t.DOMImplementation=o.DOMImplementation,t.XMLSerializer=o.XMLSerializer,t.DOMParser=r(10).DOMParser},function(e,t,r){var o=r(1),n=o.find,s=o.NAMESPACE;function i(e){return""!==e}function a(e,t){return e.hasOwnProperty(t)||(e[t]=!0),e}function c(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(i):[]}(e);return Object.keys(t.reduce(a,{}))}function l(e,t){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}function u(e,t){var r=e.prototype;if(!(r instanceof t)){function o(){}o.prototype=t.prototype,l(r,o=new o),e.prototype=r=o}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var p={},h=p.ELEMENT_NODE=1,f=p.ATTRIBUTE_NODE=2,d=p.TEXT_NODE=3,g=p.CDATA_SECTION_NODE=4,m=p.ENTITY_REFERENCE_NODE=5,v=p.ENTITY_NODE=6,y=p.PROCESSING_INSTRUCTION_NODE=7,w=p.COMMENT_NODE=8,E=p.DOCUMENT_NODE=9,b=p.DOCUMENT_TYPE_NODE=10,S=p.DOCUMENT_FRAGMENT_NODE=11,R=p.NOTATION_NODE=12,T={},_={},N=(T.INDEX_SIZE_ERR=(_[1]="Index size error",1),T.DOMSTRING_SIZE_ERR=(_[2]="DOMString size error",2),T.HIERARCHY_REQUEST_ERR=(_[3]="Hierarchy request error",3)),A=(T.WRONG_DOCUMENT_ERR=(_[4]="Wrong document",4),T.INVALID_CHARACTER_ERR=(_[5]="Invalid character",5),T.NO_DATA_ALLOWED_ERR=(_[6]="No data allowed",6),T.NO_MODIFICATION_ALLOWED_ERR=(_[7]="No modification allowed",7),T.NOT_FOUND_ERR=(_[8]="Not found",8)),x=(T.NOT_SUPPORTED_ERR=(_[9]="Not supported",9),T.INUSE_ATTRIBUTE_ERR=(_[10]="Attribute in use",10));T.INVALID_STATE_ERR=(_[11]="Invalid state",11),T.SYNTAX_ERR=(_[12]="Syntax error",12),T.INVALID_MODIFICATION_ERR=(_[13]="Invalid modification",13),T.NAMESPACE_ERR=(_[14]="Invalid namespace",14),T.INVALID_ACCESS_ERR=(_[15]="Invalid access",15);function O(e,t){if(t instanceof Error)var r=t;else r=this,Error.call(this,_[e]),this.message=_[e],Error.captureStackTrace&&Error.captureStackTrace(this,O);return r.code=e,t&&(this.message=this.message+": "+t),r}function C(){}function P(e,t){this._node=e,this._refresh=t,I(this)}function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!==t){var r=e._refresh(e._node);if(ve(e,"length",r.length),!e.$$length||r.length=0))throw new O(A,new Error(e.tagName+"@"+r));for(var n=t.length-1;o"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function j(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(j(e,t))return!0}while(e=e.nextSibling)}function V(){this.ownerDocument=this}function F(e,t,r,o){e&&e._inc++,r.namespaceURI===s.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function H(e,t,r){if(e&&e._inc){e._inc++;var o=t.childNodes;if(r)o[o.length++]=r;else{for(var n=t.firstChild,s=0;n;)o[s++]=n,n=n.nextSibling;o.length=s,delete o[o.length]}}}function z(e,t){var r=t.previousSibling,o=t.nextSibling;return r?r.nextSibling=o:e.firstChild=o,o?o.previousSibling=r:e.lastChild=r,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,H(e.ownerDocument,e),t}function B(e){return e&&e.nodeType===U.DOCUMENT_TYPE_NODE}function X(e){return e&&e.nodeType===U.ELEMENT_NODE}function Y(e){return e&&e.nodeType===U.TEXT_NODE}function J(e,t){var r=e.childNodes||[];if(n(r,X)||B(t))return!1;var o=n(r,B);return!(t&&o&&r.indexOf(o)>r.indexOf(t))}function K(e,t){var r=e.childNodes||[];if(n(r,(function(e){return X(e)&&e!==t})))return!1;var o=n(r,B);return!(t&&o&&r.indexOf(o)>r.indexOf(t))}function W(e,t,r){if(!function(e){return e&&(e.nodeType===U.DOCUMENT_NODE||e.nodeType===U.DOCUMENT_FRAGMENT_NODE||e.nodeType===U.ELEMENT_NODE)}(e))throw new O(N,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new O(A,"child not in parent");if(!function(e){return e&&(X(e)||Y(e)||B(e)||e.nodeType===U.DOCUMENT_FRAGMENT_NODE||e.nodeType===U.COMMENT_NODE||e.nodeType===U.PROCESSING_INSTRUCTION_NODE)}(t)||B(t)&&e.nodeType!==U.DOCUMENT_NODE)throw new O(N,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function $(e,t,r){var o=e.childNodes||[],s=t.childNodes||[];if(t.nodeType===U.DOCUMENT_FRAGMENT_NODE){var i=s.filter(X);if(i.length>1||n(s,Y))throw new O(N,"More than one element or text in fragment");if(1===i.length&&!J(e,r))throw new O(N,"Element in fragment can not be inserted before doctype")}if(X(t)&&!J(e,r))throw new O(N,"Only one element can be added and only after doctype");if(B(t)){if(n(o,B))throw new O(N,"Only one doctype is allowed");var a=n(o,X);if(r&&o.indexOf(a)1||n(s,Y))throw new O(N,"More than one element or text in fragment");if(1===i.length&&!K(e,r))throw new O(N,"Element in fragment can not be inserted before doctype")}if(X(t)&&!K(e,r))throw new O(N,"Only one element can be added and only after doctype");if(B(t)){if(n(o,(function(e){return B(e)&&e!==r})))throw new O(N,"Only one doctype is allowed");var a=n(o,X);if(r&&o.indexOf(a)=0;R--){if(""===(T=n[R]).prefix&&T.namespace===e.namespaceURI){p=T.namespace;break}}if(p!==e.namespaceURI)for(R=n.length-1;R>=0;R--){var T;if((T=n[R]).namespace===e.namespaceURI){T.prefix&&(u=T.prefix+":"+l);break}}}t.push("<",u);for(var _=0;_"),r&&/^script$/i.test(l))for(;c;)c.data?t.push(c.data):me(c,t,r,o,n.slice()),c=c.nextSibling;else for(;c;)me(c,t,r,o,n.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case E:case S:for(c=e.firstChild;c;)me(c,t,r,o,n.slice()),c=c.nextSibling;return;case f:return ge(t,e.name,e.value);case d:return t.push(e.data.replace(/[<&>]/g,G));case g:return t.push("");case w:return t.push("\x3c!--",e.data,"--\x3e");case b:var O=e.publicId,C=e.systemId;if(t.push("");else if(C&&"."!=C)t.push(" SYSTEM ",C,">");else{var P=e.internalSubset;P&&t.push(" [",P,"]"),t.push(">")}return;case y:return t.push("");case m:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ve(e,t,r){e[t]=r}O.prototype=Error.prototype,l(T,O),C.prototype={length:0,item:function(e){return e>=0&&e0},lookupPrefix:function(e){for(var t=this;t;){var r=t._nsMap;if(r)for(var o in r)if(Object.prototype.hasOwnProperty.call(r,o)&&r[o]===e)return o;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var r=t._nsMap;if(r&&Object.prototype.hasOwnProperty.call(r,e))return r[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},l(p,U),l(p,U.prototype),V.prototype={nodeName:"#document",nodeType:E,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==S){for(var r=e.firstChild;r;){var o=r.nextSibling;this.insertBefore(r,t),r=o}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===h&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Q),e.ownerDocument=this,t&&this.removeChild(t),X(e)&&(this.documentElement=e)},importNode:function(e,t){return function e(t,r,o){var n;switch(r.nodeType){case h:(n=r.cloneNode(!1)).ownerDocument=t;case S:break;case f:o=!0}n||(n=r.cloneNode(!1));if(n.ownerDocument=t,n.parentNode=null,o)for(var s=r.firstChild;s;)n.appendChild(e(t,s,o)),s=s.nextSibling;return n}(this,e,t)},getElementById:function(e){var t=null;return j(this.documentElement,(function(r){if(r.nodeType==h&&r.getAttribute("id")==e)return t=r,!0})),t},getElementsByClassName:function(e){var t=c(e);return new P(this,(function(r){var o=[];return t.length>0&&j(r.documentElement,(function(n){if(n!==r&&n.nodeType===h){var s=n.getAttribute("class");if(s){var i=e===s;if(!i){var a=c(s);i=t.every((l=a,function(e){return l&&-1!==l.indexOf(e)}))}i&&o.push(n)}}var l})),o}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new C,(t.attributes=new M)._ownerElement=t,t},createDocumentFragment:function(){var e=new ue;return e.ownerDocument=this,e.childNodes=new C,e},createTextNode:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new ne;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new se;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new pe;return r.ownerDocument=this,r.tagName=r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new le;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var r=new ee,o=t.split(":"),n=r.attributes=new M;return r.childNodes=new C,r.ownerDocument=this,r.nodeName=t,r.tagName=t,r.namespaceURI=e,2==o.length?(r.prefix=o[0],r.localName=o[1]):r.localName=t,n._ownerElement=r,r},createAttributeNS:function(e,t){var r=new te,o=t.split(":");return r.ownerDocument=this,r.nodeName=t,r.name=t,r.namespaceURI=e,r.specified=!0,2==o.length?(r.prefix=o[0],r.localName=o[1]):r.localName=t,r}},u(V,U),ee.prototype={nodeType:h,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var r=this.ownerDocument.createAttribute(e);r.value=r.nodeValue=""+t,this.setAttributeNode(r)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===S?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,H(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r&&r.value||""},setAttributeNS:function(e,t,r){var o=this.ownerDocument.createAttributeNS(e,t);o.value=o.nodeValue=""+r,this.setAttributeNode(o)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new P(this,(function(t){var r=[];return j(t,(function(o){o===t||o.nodeType!=h||"*"!==e&&o.tagName!=e||r.push(o)})),r}))},getElementsByTagNameNS:function(e,t){return new P(this,(function(r){var o=[];return j(r,(function(n){n===r||n.nodeType!==h||"*"!==e&&n.namespaceURI!==e||"*"!==t&&n.localName!=t||o.push(n)})),o}))}},V.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,V.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,u(ee,U),te.prototype.nodeType=f,u(te,U),re.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(_[N])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},u(re,U),oe.prototype={nodeName:"#text",nodeType:d,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var o=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(o,this.nextSibling),o}},u(oe,re),ne.prototype={nodeName:"#comment",nodeType:w},u(ne,re),se.prototype={nodeName:"#cdata-section",nodeType:g},u(se,re),ie.prototype.nodeType=b,u(ie,U),ae.prototype.nodeType=R,u(ae,U),ce.prototype.nodeType=v,u(ce,U),le.prototype.nodeType=m,u(le,U),ue.prototype.nodeName="#document-fragment",ue.prototype.nodeType=S,u(ue,U),pe.prototype.nodeType=y,u(pe,U),he.prototype.serializeToString=function(e,t,r){return fe.call(e,t,r)},U.prototype.toString=fe;try{if(Object.defineProperty){Object.defineProperty(P.prototype,"length",{get:function(){return I(this),this.$$length}}),Object.defineProperty(U.prototype,"textContent",{get:function(){return function e(t){switch(t.nodeType){case h:case S:var r=[];for(t=t.firstChild;t;)7!==t.nodeType&&8!==t.nodeType&&r.push(e(t)),t=t.nextSibling;return r.join("");default:return t.nodeValue}}(this)},set:function(e){switch(this.nodeType){case h:case S:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),ve=function(e,t,r){e["$$"+t]=r}}}catch(e){}t.DocumentType=ie,t.DOMException=O,t.DOMImplementation=L,t.Element=ee,t.Node=U,t.NodeList=C,t.XMLSerializer=he},function(e,t,r){(function(t,r){ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version v4.2.8+1e68dce6 + */var o;o=function(){"use strict";function e(e){return"function"==typeof e}var o=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},n=0,s=void 0,i=void 0,a=function(e,t){d[n]=e,d[n+1]=t,2===(n+=2)&&(i?i(g):E())},c="undefined"!=typeof window?window:void 0,l=c||{},u=l.MutationObserver||l.WebKitMutationObserver,p="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),h="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function f(){var e=setTimeout;return function(){return e(g,1)}}var d=new Array(1e3);function g(){for(var e=0;e1)for(var r=1;r=t+r||t?new java.lang.String(e,t,r)+"":e}function v(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}h.prototype.parseFromString=function(e,t){var r=this.options,o=new u,n=r.domBuilder||new f,i=r.errorHandler,a=r.locator,l=r.xmlns||{},h=/\/x?html?$/.test(t),d=h?s.HTML_ENTITIES:s.XML_ENTITIES;a&&n.setDocumentLocator(a),o.errorHandler=function(e,t,r){if(!e){if(t instanceof f)return t;e=t}var o={},n=e instanceof Function;function s(t){var s=e[t];!s&&n&&(s=2==e.length?function(r){e(t,r)}:e),o[t]=s&&function(e){s("[xmldom "+t+"]\t"+e+g(r))}||function(){}}return r=r||{},s("warning"),s("error"),s("fatalError"),o}(i,n,a),o.domBuilder=r.domBuilder||n,h&&(l[""]=c.HTML),l.xml=l.xml||c.XML;var m=r.normalizeLineEndings||p;return e&&"string"==typeof e?o.parse(m(e),l,d):o.errorHandler.error("invalid doc source"),n.doc},f.prototype={startDocument:function(){this.doc=(new a).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,r,o){var n=this.doc,s=n.createElementNS(e,r||t),i=o.length;v(this,s),this.currentElement=s,this.locator&&d(this.locator,s);for(var a=0;a",lt:"<",quot:'"'}),t.HTML_ENTITIES=o({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},function(e,t,r){var o=r(1).NAMESPACE,n=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,s=new RegExp("[\\-\\.0-9"+n.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),i=new RegExp("^"+n.source+s.source+"*(?::"+n.source+s.source+"*)?$");function a(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,a)}function c(){}function l(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function u(e,t,r,n,s,i){function a(e,t,o){r.attributeNames.hasOwnProperty(e)&&i.fatalError("Attribute "+e+" redefined"),r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,s),o)}for(var c,l=++t,u=0;;){var p=e.charAt(l);switch(p){case"=":if(1===u)c=e.slice(t,l),u=3;else{if(2!==u)throw new Error("attribute equal must after attrName");u=3}break;case"'":case'"':if(3===u||1===u){if(1===u&&(i.warning('attribute value must after "="'),c=e.slice(t,l)),t=l+1,!((l=e.indexOf(p,t))>0))throw new Error("attribute value no end '"+p+"' match");a(c,h=e.slice(t,l),t-1),u=5}else{if(4!=u)throw new Error('attribute value must after "="');a(c,h=e.slice(t,l),t),i.warning('attribute "'+c+'" missed start quot('+p+")!!"),t=l+1,u=5}break;case"/":switch(u){case 0:r.setTagName(e.slice(t,l));case 5:case 6:case 7:u=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==u&&r.setTagName(e.slice(t,l)),l;case">":switch(u){case 0:r.setTagName(e.slice(t,l));case 5:case 6:case 7:break;case 4:case 1:"/"===(h=e.slice(t,l)).slice(-1)&&(r.closed=!0,h=h.slice(0,-1));case 2:2===u&&(h=c),4==u?(i.warning('attribute "'+h+'" missed quot(")!'),a(c,h,t)):(o.isHTML(n[""])&&h.match(/^(?:disabled|checked|selected)$/i)||i.warning('attribute "'+h+'" missed value!! "'+h+'" instead!!'),a(h,h,t));break;case 3:throw new Error("attribute value missed!!")}return l;case"€":p=" ";default:if(p<=" ")switch(u){case 0:r.setTagName(e.slice(t,l)),u=6;break;case 1:c=e.slice(t,l),u=2;break;case 4:var h=e.slice(t,l);i.warning('attribute "'+h+'" missed quot(")!!'),a(c,h,t);case 5:u=6}else switch(u){case 2:r.tagName;o.isHTML(n[""])&&c.match(/^(?:disabled|checked|selected)$/i)||i.warning('attribute "'+c+'" missed value!! "'+c+'" instead2!!'),a(c,c,t),t=l,u=1;break;case 5:i.warning('attribute space is required"'+c+'"!!');case 6:u=1,t=l;break;case 3:u=4,t=l;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}l++}}function p(e,t,r){for(var n=e.tagName,s=null,i=e.length;i--;){var a=e[i],c=a.qName,l=a.value;if((f=c.indexOf(":"))>0)var u=a.prefix=c.slice(0,f),p=c.slice(f+1),h="xmlns"===u&&p;else p=c,u=null,h="xmlns"===c&&"";a.localName=p,!1!==h&&(null==s&&(s={},d(r,r={})),r[h]=s[h]=l,a.uri=o.XMLNS,t.startPrefixMapping(h,l))}for(i=e.length;i--;){(u=(a=e[i]).prefix)&&("xml"===u&&(a.uri=o.XML),"xmlns"!==u&&(a.uri=r[u||""]))}var f;(f=n.indexOf(":"))>0?(u=e.prefix=n.slice(0,f),p=e.localName=n.slice(f+1)):(u=null,p=e.localName=n);var g=e.uri=r[u||""];if(t.startElement(g,p,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=s,!0;if(t.endElement(g,p,n),s)for(u in s)Object.prototype.hasOwnProperty.call(s,u)&&t.endPrefixMapping(u)}function h(e,t,r,o,n){if(/^(?:script|textarea)$/i.test(r)){var s=e.indexOf("",t),i=e.substring(t+1,s);if(/[&<]/.test(i))return/^script$/i.test(r)?(n.characters(i,0,i.length),s):(i=i.replace(/&#?\w+;/g,o),n.characters(i,0,i.length),s)}return t+1}function f(e,t,r,o){var n=o[r];return null==n&&((n=e.lastIndexOf(""))t?(r.comment(e,t+4,n-t-4),n+3):(o.error("Unclosed comment"),-1):-1;default:if("CDATA["==e.substr(t+3,6)){var n=e.indexOf("]]>",t+9);return r.startCDATA(),r.characters(e,t+9,n-t-9),r.endCDATA(),n+3}var s=function(e,t){var r,o=[],n=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;n.lastIndex=t,n.exec(e);for(;r=n.exec(e);)if(o.push(r),r[1])return o}(e,t),i=s.length;if(i>1&&/!doctype/i.test(s[0][0])){var a=s[1][0],c=!1,l=!1;i>3&&(/^public$/i.test(s[2][0])?(c=s[3][0],l=i>4&&s[4][0]):/^system$/i.test(s[2][0])&&(l=s[3][0]));var u=s[i-1];return r.startDTD(a,c,l),r.endDTD(),u.index+u[0].length}}return-1}function m(e,t,r){var o=e.indexOf("?>",t);if(o){var n=e.substring(t,o).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(n){n[0].length;return r.processingInstruction(n[1],n[2]),o+2}return-1}return-1}function v(){this.attributeNames={}}a.prototype=new Error,a.prototype.name=a.name,c.prototype={parse:function(e,t,r){var n=this.domBuilder;n.startDocument(),d(t,t={}),function(e,t,r,n,s){function i(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(r,t)?r[t]:"#"===t.charAt(0)?function(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}(parseInt(t.substr(1).replace("x","0x"))):(s.error("entity not found:"+e),e)}function c(t){if(t>T){var r=e.substring(T,t).replace(/&#?\w+;/g,i);b&&d(T),n.characters(r,0,t-T),T=t}}function d(t,r){for(;t>=w&&(r=E.exec(e));)y=r.index,w=y+r[0].length,b.lineNumber++;b.columnNumber=t-y+1}var y=0,w=0,E=/.*(?:\r\n?|\n)|.*$/g,b=n.locator,S=[{currentNSMap:t}],R={},T=0;for(;;){try{var _=e.indexOf("<",T);if(_<0){if(!e.substr(T).match(/^\s*$/)){var N=n.doc,A=N.createTextNode(e.substr(T));N.appendChild(A),n.currentElement=A}return}switch(_>T&&c(_),e.charAt(_+1)){case"/":var x=e.indexOf(">",_+3),O=e.substring(_+2,x).replace(/[ \t\n\r]+$/g,""),C=S.pop();x<0?(O=e.substring(_+2).replace(/[\s<].*/,""),s.error("end tag name: "+O+" is not complete:"+C.tagName),x=_+1+O.length):O.match(/\sT?T=x:c(Math.max(_,T)+1)}}(e,t,r,n,this.errorHandler),n.endDocument()}},v.prototype={setTagName:function(e){if(!i.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!i.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=c,t.ParseError=a},function(e,t,r){"use strict";r.r(t),r.d(t,"servicesVersion",(function(){return Qe})),r.d(t,"servicesDate",(function(){return Ze}));var o=r(2),n={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?o.enableAll():o.disableAll();var r=e||"default";return o.getLogger(r)}},s={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),o=r.shift(),n=r,s=this[o];try{s=Array.isArray(n)&&n.length>0?s.replace("%var%",n.join(" - ")):s.replace("%var%","%var% (not specified)")}catch(e){}return s}},i={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=e[o];n||(n=""),r.push(o+"="+n)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var o=e;if(e){if(e.split("?").length-1>=2){var n=e.search(/\?/)+1;o=e.substring(0,n)+e.slice(n).replace(/\?/g,"&")}var s=e.indexOf("?");-1===s&&(o+="?"),-1!==s&&s!==e.length-1&&(o+="&")}return t&&(o+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(o=encodeURIComponent(o)),o},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}},a=r(6),c=r.n(a);function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u,p={call:function(e){var t=n.getLogger("XHR");if(t.trace("[XHR::call()]"),c.a.polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=n.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(o,n){var s="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"===l(e.data)&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!s&&(e.url=i.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var a=null;if("undefined"==typeof window){var c=r(3),u={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&s&&(u={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),c(e.url,u).then((function(e){if(e.ok)o(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;n({message:t,status:r})}})).catch((function(e){n({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(e.method,e.url,!0),a.overrideMimeType=e.content;var p=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),p=window.setTimeout((function(){n({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),s&&(t.trace("data = ",e.data),a.setRequestHeader("Content-type",e.content)),a.onerror=function(e){console.log(e),n(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(e){console.log(e),n(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(e){if(4===a.readyState)if(200===a.status)window.clearTimeout(p),o(a.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;n({message:t,status:r})}};var h=e.data&&s?e.data:null;a.send(h)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(a=new XDomainRequest).open(e.method,e.url),a.overrideMimeType=e.content,e.timeOut>0&&(a.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",e.content),a.onerror=function(){n(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){n(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(e){if(200===a.status)o(a.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;n({message:t,status:r})}};var f=e.data&&s?e.data:null;a.send(f)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(4).DOMParser)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}},h={uuid:(u=Math.floor(Date.now()),function(){return u++}),call:function(e){var t=n.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),o=!1,s=!1,i=e.url.indexOf("callback=");if(-1!==i){o=!0;var a=e.url.indexOf("&",i);-1===a&&(a=e.url.length);var c=e.url.substring(i+9,a);c&&(s=!0,e.callbackName=c,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!o){var l=e.url.indexOf("?");-1===l?e.url=e.url+"?callback=":l===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var u=!!e.callbackName||s;if(s||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!u){var p=this,h=null;e.timeOut>0&&(h=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(h),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,o=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var n=document.documentElement||document.getElementsByTagName("head")[0];null===o?n.appendChild(r):n.replaceChild(r,o)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}},f={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=i.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=i.normalyzeUrl(t.url,{t:(new Date).getTime()})),p.call(t);break;case"JSONP":t.data&&(t.url=i.normalyzeUrl(t.url,t.data)),h.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}};function d(e){if(!(this instanceof d))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=d.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}d.TYPE_SRVERR="SERVICE_ERROR",d.TYPE_USEERR="USAGE_ERROR",d.TYPE_UNKERR="UNKNOWN_ERROR",d.prototype=Object.create(Error.prototype,{constructor:{value:d,writable:!0,configurable:!0}});var g=d,m=r(0);function v(e){if(!(this instanceof v))throw new TypeError(s.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=n.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(s.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(s.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(s.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(s.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(s.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}v.prototype={constructor:v,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,n,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,n,o)}function o(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return n.call(this,new g("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function n(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof g||(t=new g(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,n,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,o=this.request,n=!(!this.options.proxyURL||"XHR"!==this.options.protocol),s={"gp-access-lib":m.version};this.options.apiKey&&(s.apiKey=this.options.apiKey),this.options.serverUrl=i.normalyzeUrl(this.options.serverUrl,s,!1),n&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+i.normalyzeUrl(this.options.serverUrl,this.request,!0),o=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+i.normalyzeUrl(this.options.serverUrl,null,!0),o=this.request));var a=this,c={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:o,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){a.logger.trace("callService::onResponse()");var o=null;if("XHR"===a.options.protocol&&(a.logger.trace("Response XHR",r),o=r),"JSONP"===a.options.protocol){if(a.logger.trace("Response JSON",r),!r)return void e.call(a,new g("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(a,new g({status:r.http.status,message:r.http.error,type:g.TYPE_SRVERR}));o=r.xml,a.options.rawResponse&&(o=r)}else o=r}if("function"==typeof a.options.onBeforeParse){var n=a.options.onBeforeParse(o);"string"==typeof n&&(o=n)}a.response=o,t.call(a,o)},onFailure:function(t){a.logger.trace("callService::onFailure()"),t.type=g.TYPE_SRVERR,e.call(a,new g(t))},onTimeOut:function(){a.logger.trace("callService::onTimeOut()"),e.call(a,new g("TimeOut!"))}};f.send(c)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};var y=v,w={ssl:!0,newUrl:function(e){return(!1===w.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":w.newUrl(this.new_key["elevation-json"]),"elevation-xml":w.newUrl(this.new_key["elevation-xml"]),"profil-json":w.newUrl(this.new_key["profil-json"]),"profil-xml":w.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return w.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;rt||e__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",o="",n=this,s=this.DataObject.getData(),i=0;i0)for(var i=o.getElementsByTagName("parsererror"),a=0;a0){var o=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,o=0;o0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},ye.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=ce.build(r),this.request?t.call(this,this.request):e.call(this,new g(s.getMessage("SERVICE_REQUEST_BUILD")))},ye.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};me.build(r)}else e.call(this,new g(s.getMessage("SERVICE_RESPONSE_EMPTY")))};var we=ye;function Ee(e){return(Ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function be(e){if(!(this instanceof be))throw new TypeError(s.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=E.ReverseGeocode.newUrl()),y.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(s.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),o=0;o0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},be.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=ce.build(r),this.request?t.call(this,this.request):e.call(this,new g(s.getMessage("SERVICE_REQUEST_BUILD")))},be.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};me.build(r)}else e.call(this,new g(s.getMessage("SERVICE_RESPONSE_EMPTY")))},be.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},be.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},be.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}Fe.CLASSNAME="ProcessIsoCurveParam",Fe.prototype={constructor:Fe,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t + + + + + + + + + + + + Namespace: BBox + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: BBox

    + + + + +
    + + +

    + Gp.BBox +

    + + + + +
    +
    + + + + +

    Bounding box object, expressed with four coordinates.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    left + + +Float + + + +

    minimum abscissa

    right + + +Float + + + +

    maximum abscissa

    bottom + + +Float + + + +

    minimum ordinate

    top + + +Float + + + +

    maximum ordinate

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Circle.html b/v3.4.3/jsdoc/Gp.Circle.html new file mode 100644 index 00000000..bf822efc --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Circle.html @@ -0,0 +1,2825 @@ + + + + + + + + + + + + + Namespace: Circle + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Circle

    + + + + +
    + + +

    + Gp.Circle +

    + + + + +
    +
    + + + + +

    Circle object.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    x + + +Float + + + +

    Circle center abscissa.

    y + + +Float + + + +

    Circle center ordinate.

    radius + + +Float + + + +

    Circle radius.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Error.html b/v3.4.3/jsdoc/Gp.Error.html new file mode 100644 index 00000000..b39a9f12 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Error.html @@ -0,0 +1,2964 @@ + + + + + + + + + + + + + Namespace: Error + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Error

    + + + + +
    + + +

    + Gp.Error +

    + + + + +
    +
    + + + + +

    Errors raised by API for one among three reasons : wrong API usage, underlying service error or unknown reason.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    message + + +String + + + +

    Error message

    status + + +Number + + + +

    Error status : when Gp.Error.TYPE_SRVERR, gives the HTTP status of the underlying web service response ; -1 otherwise.

    type + + +String + + + +

    Error type (Gp.Error.TYPE_SRVERR, Gp.Error.TYPE_USEERR or Gp.Error.TYPE_UNKERR).

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

    Members

    + +
    + +
    +
    +

    static,constantGp.Error.TYPE_SRVERRString

    +
    + + +
    +
    + +
    +

    Error raised when underlying geoportal service answers on error.

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

    static,constantGp.Error.TYPE_UNKERRString

    +
    + + +
    +
    + +
    +

    Error raised when API can't perform the job for a reason other than the two other ones.

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

    static,constantGp.Error.TYPE_USEERRString

    +
    + + +
    +
    + +
    +

    Error raised when funcion use is inappropriate

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + +
    + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Point.html b/v3.4.3/jsdoc/Gp.Point.html new file mode 100644 index 00000000..8e612163 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Point.html @@ -0,0 +1,2802 @@ + + + + + + + + + + + + + Namespace: Point + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Point

    + + + + +
    + + +

    + Gp.Point +

    + + + + +
    +
    + + + + +

    Point object.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    x + + +Float + + + +

    Point abscissa

    y + + +Float + + + +

    Point ordinate

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Alti.Elevation.html b/v3.4.3/jsdoc/Gp.Services.Alti.Elevation.html new file mode 100644 index 00000000..98a404db --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Alti.Elevation.html @@ -0,0 +1,2850 @@ + + + + + + + + + + + + + Namespace: Elevation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Elevation

    + + + + +
    + + +

    + Gp.Services.Alti.Elevation +

    + +

    .Alti.

    + + + + +
    +
    + + + + +

    Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if "zonly" parameter wasn't set to true.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    lat + + +Float + + + +

    Point latitude. (only if zonly=false)

    lon + + +Float + + + +

    Point longitude. (only if zonly=false)

    z + + +Float + + + +

    Point elevation.

    acc + + +Float + + + +

    Accuracy of elevation for this point. (only if zonly=false)

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Alti.Measure.html b/v3.4.3/jsdoc/Gp.Services.Alti.Measure.html new file mode 100644 index 00000000..a9cedd49 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Alti.Measure.html @@ -0,0 +1,2850 @@ + + + + + + + + + + + + + Namespace: Measure + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Measure

    + + + + +
    + + +

    + Gp.Services.Alti.Measure +

    + +

    .Alti.

    + + + + +
    +
    + + + + +

    Single measure object returned by underlying web service if measures = true and zonly = false

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    source_name + + +String + + + +

    Name of the source

    source_measure + + +String + + + +

    Name of the measure

    z + + +Float + + + +

    Point elevation.

    acc + + +Float + + + +

    Accuracy of elevation for this point. (only if zonly=false)

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Alti.html b/v3.4.3/jsdoc/Gp.Services.Alti.html new file mode 100644 index 00000000..c2ed1afb --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Alti.html @@ -0,0 +1,3593 @@ + + + + + + + + + + + + + Class: Alti + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: Alti

    + + + + +
    + + +

    + Gp.Services.Alti +

    + + +

    Appel du service d'altimétrie du Géoportail

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

    + + new Alti(options) +

    + + +
    + Services/Alti/Alti.js, line 75 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    positions + + +Array.<Object> + + + + + + + + + + +

    Tableau ({lon:float,lat:float}) contenant les coordonnées des points (CRS:84)
    +dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil).
    +Chaque élément du tableau est un objet JavaScript avec deux attributs : lon et lat, qui sont des flottants.
    +Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine).
    +Maximum 50 éléments.

    outputFormat + + +String + + + + + + + + + + +

    Le format de la réponse du service alti : 'xml' ou 'json'.
    +Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST,
    +ou la valeur du paramètre 'format' dans le cas de la norme WPS.
    +Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST,
    +pour connaître le format dans lequel sera fournie la réponse (pour son traitement).
    +Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'.

    sampling + + +Number + + + + + + + optional + + + + + +

    Nombre de points à utiliser pour déterminer le tracé d'un profil altimétrique, compris entre 2 et 5000.
    +A spécifier lorsqu'on souhaite accéder à cette fonctionnalité.
    +Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique
    +le long duquel le profil doit être calculé.
    +Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis,
    +c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis).
    +Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points).

    api + + +String + + + + + + + optional + + + + + +

    Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS).
    +Par défaut, on utilise l'API REST.

    zonly + + +Boolean + + + + + + + optional + + + + + +

    Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'.
    +Vaut 'false' par défaut.

    resource + + +String + + + + + + + optional + + + + + +

    Resource utilisée pour réaliser le calcul.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    TODO
    +
    +
      +
    • gestion du parma. output et callback
    • + +
    • outputFormat (REST) et format (WPS)
    • + +
    • La reponse JSON peut encapsuler un XML !
    • +
    +
    + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     apiKey : null,
    +     serverUrl : 'http://localhost/service/',
    +     protocol : 'JSONP', // JSONP|XHR
    +     proxyURL : null,
    +     httpMethod : 'GET', // GET|POST
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     // spécifique au service
    +     positions : [{lon:, lat:}, {lon:, lat:}],
    +     outputFormat : 'json' // json|xml
    +     sampling : 3,
    +     api : 'REST', // REST|WPS
    +     zonly : false // false|true,
    +     resource : "resource-par-defaut"
    +  };
    + + + +
    + + +
    + + +

    Extends

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

    Namespaces

    + +
    +
    Elevation
    +
    + +
    Measure
    +
    +
    + + + +

    Members

    + +
    + +
    +
    +

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)
    +FIXME instance ou classe ?

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

    constructor

    +
    + + +
    +
    + +
    +

    Constructeur (alias)

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(error, success) +

    + + +
    + Services/Alti/Alti.js, line 225 +
    + +
    + + +
    +
    + + +
    +

    Analyse de la reponse (overwrite)

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + buildRequest(error, success) +

    + + +
    + Services/Alti/Alti.js, line 194 +
    + +
    + + +
    +
    + + +
    +

    Création de la requête (overwrite)

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.AltiResponse.html b/v3.4.3/jsdoc/Gp.Services.AltiResponse.html new file mode 100644 index 00000000..073403a8 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.AltiResponse.html @@ -0,0 +1,2779 @@ + + + + + + + + + + + + + Namespace: AltiResponse + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: AltiResponse

    + + + + +
    + + +

    + Gp.Services.AltiResponse +

    + + + + +
    +
    + + + + +

    Response object for Gp.Services.getAltitude () invocation when successful. Received as the argument of onSuccess callback function.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    elevations + + +Array.<Gp.Services.Alti.Elevation> + + + +

    Elevations array.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.AutoComplete.SuggestedLocation.html b/v3.4.3/jsdoc/Gp.Services.AutoComplete.SuggestedLocation.html new file mode 100644 index 00000000..d8d488e2 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.AutoComplete.SuggestedLocation.html @@ -0,0 +1,2943 @@ + + + + + + + + + + + + + Namespace: SuggestedLocation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: SuggestedLocation

    + + + + +
    + + +

    + Gp.Services.AutoComplete.SuggestedLocation +

    + +

    .AutoComplete.

    + + + + +
    +
    + + + + +

    Single SuggestedLocation Object returned by underlying web service.
    +Each suggested location represents a street address ("StreetAddress") or a place name ("PositionOfInterest").

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    type + + +String + + + +

    Suggested location type : "StreetAddress" ou "PositionOfInterest"

    position + + +Gp.Point + + + +

    Position of the suggested location given in requested coordinates system.

    commune + + +String + + + +

    Suggested municipality

    fullText + + +String + + + +

    Full text representation of the suggested location.

    postalCode + + +String + + + +

    Suggested location postcode

    classification + + +Integer + + + +

    Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).

    street + + +String + + + +

    Street name of the suggested location ("StreetAddress" only).

    kind + + +String + + + +

    Nature of the suggested location : "prefecture", "monument", "commune", ... for instance ("PositionOfInterest" only).

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.AutoComplete.html b/v3.4.3/jsdoc/Gp.Services.AutoComplete.html new file mode 100644 index 00000000..f66e0cf3 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.AutoComplete.html @@ -0,0 +1,3620 @@ + + + + + + + + + + + + + Class: AutoComplete + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: AutoComplete

    + + + + +
    + + +

    + Gp.Services.AutoComplete +

    + + +

    Appel du service d'autocomplétion du Géoportail :
    +envoi de la requête construite selon les paramètres en options,
    +éventuellement parsing et analyse de la réponse,
    +retour d'une réponse en paramètre de la fonction onSuccess.

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

    + + new AutoComplete(options) +

    + + +
    + Services/AutoComplete/AutoComplete.js, line 61 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    text + + +String + + + + + + + + + + + + +

    La chaîne de caractère à compléter.
    +Cette chaîne n'est pas "URL encodée".
    +C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête.

    type + + +Array.<String> + + + + + + ["StreetAddress"] + + + + + optional + + + + + +

    Type de l'objet recherché.
    +Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'.
    +D'autres types pourront être rajoutés selon l'évolution du service.
    +Par défaut, type = ['StreetAddress'].

    territory + + +String + + + + + + + + + optional + + + + + +

    Limitation de la zone de recherche de localisants.
    +Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE',
    +DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31'
    +Pas de valeur par défaut.
    +La valeur par défaut est donc celle du service.
    +Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié.

    maximumResponses + + +Number + + + + + + 10 + + + + + optional + + + + + +

    Nombre de réponses maximal que l'on souhaite recevoir.
    +Pas de valeur par défaut.
    +La valeur par défaut sera donc celle du service : 10.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     // options communes aux services
    +     apiKey : null,
    +     serverUrl : 'http://localhost/service/',
    +     protocol : 'JSONP', // JSONP|XHR
    +     proxyURL : null,
    +     httpMethod : 'GET', // GET|POST
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     // spécifique au service
    +     text : "",
    +     type : "StreetAddress",
    +     territory : 'METROPOLE',
    +     maximumResponses : 10
    +  };
    + + + +
    + + +
    + + +

    Extends

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

    Namespaces

    + +
    +
    SuggestedLocation
    +
    +
    + + + +

    Members

    + +
    + +
    +
    +

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)
    +FIXME instance ou classe ?

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(error, success) +

    + + +
    + Services/AutoComplete/AutoComplete.js, line 208 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Analyse de la reponse

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback de succès de l'analyse de la réponse

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

    + + buildRequest(error, success) +

    + + +
    + Services/AutoComplete/AutoComplete.js, line 169 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Création de la requête

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + patchOptionConvertor(options_){Object} +

    + + +
    + Services/AutoComplete/AutoComplete.js, line 136 +
    + +
    + + +
    +
    + + +
    +

    Patch pour la convertion des options vers le nouveau formalisme.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options_ + + +Object + + + + + +

    options du service

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.AutoCompleteResponse.html b/v3.4.3/jsdoc/Gp.Services.AutoCompleteResponse.html new file mode 100644 index 00000000..030d0327 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.AutoCompleteResponse.html @@ -0,0 +1,2779 @@ + + + + + + + + + + + + + Namespace: AutoCompleteResponse + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: AutoCompleteResponse

    + + + + +
    + + +

    + Gp.Services.AutoCompleteResponse +

    + + + + +
    +
    + + + + +

    Response object for Gp.Services.autoComplete () invocation when successful. Received as the argument of onSuccess callback function.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    suggestedLocations + + +Array.<Gp.Services.AutoComplete.SuggestedLocation> + + + +

    SuggestedLocations array.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.CommonService.html b/v3.4.3/jsdoc/Gp.Services.CommonService.html new file mode 100644 index 00000000..f9b1c4c1 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.CommonService.html @@ -0,0 +1,3384 @@ + + + + + + + + + + + + + Class: CommonService + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: CommonService

    + + + + +
    + + +

    + Gp.Services.CommonService +

    + + +

    Composant Service

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

    + + new CommonService(options) +

    + + +
    + Services/CommonService.js, line 89 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options communes à tous les services

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    serverUrl + + +String + + + + + + + optional + + + + + +

    URL d'accès au service. Par défaut "https://data.geopf.fr/SERVICE/".
    +Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès.
    +Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré.

    protocol + + +String + + + + + + + optional + + + + + +

    Le protocole à utiliser pour récupérer les informations du service :
    +peut valoir 'JSONP' ou 'XHR'.
    +Par défaut, c'est le protocole XHR qui sera utilisé.
    +Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR).

    ssl + + +Boolean + + + + + + + optional + + + + + +

    Indique si l'on souhaite intérroger les services en https.
    +Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS).
    +Sur un navigateur, le protocole est automatiquement extrait de l'url du site...
    +Par défaut, on utilise le protocole http (ssl=false).

    proxyURL + + +String + + + + + + + optional + + + + + +

    Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR.
    +Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP.

    callbackSuffix + + +String + + + + + + + optional + + + + + +

    Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP.
    +Par défaut, la fonction de callback portera un nom du type "callback"+ID, où ID est soit un identifiant unique généré à chaque requête,
    +soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix="_2", la fonction sera "callback_2 ()".
    +Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu
    +Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'.

    httpMethod + + +String + + + + + + + optional + + + + + +

    La méthode HTTP
    +à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'.
    +Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET.
    +Par défaut, c'est la méthode GET qui est utilisée.

    contentType + + +String + + + + + + + optional + + + + + +

    Content-Type de la requete
    +à utiliser dans le cas d'une requête XHR en mode POST.
    +Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET.
    +Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type.

    timeOut + + +Number + + + + + + + optional + + + + + +

    Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête).
    +Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0).

    rawResponse + + +Boolean + + + + + + + optional + + + + + +

    Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée.
    +(Cf. paramètre « onSuccess » pour plus de détails).

    onSuccess + + +function + + + + + + + optional + + + + + +

    Fonction appelée lorsque le service répond correctement à la requête
    +(code HTTP 200, sans message d'erreur).
    +Cette fonction prend en paramètre la réponse du service,
    +soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ;
    +soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ».

    onFailure + + +function + + + + + + + optional + + + + + +

    Fonction appelée lorsque le service ne répond pas correctement
    +(code HTTP de retour différent de 200 ou pas de réponse).

    onBeforeParse + + +function + + + + + + + optional + + + + + +

    Fonction appelée avant le parsing de la réponse
    +Permet de modifier la réponse avant parsing et la fonction doit retourner une String.
    +Cette fonction prend en paramètre la réponse telle que renvoyée par le service
    +(cad au format json ou xml).
    +Pour le JSONP, si le paramètre "rawResponse" a été précisé avec la valeur "true",
    +la fonction prend en paramètre un Object JavaScript contenant la réponse XML.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     serverUrl : 'http://localhost/service/',
    +     protocol : 'JSONP', // JSONP|XHR
    +     ssl : false,
    +     proxyURL : null,
    +     callbackName : null,
    +     httpMethod : 'GET', // GET|POST
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     onBeforeParse : function (rawResponse) {}
    +  };
    + + + +
    + + +
    + + + + + + + + + + + + +

    Members

    + +
    + +
    +
    +

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + +
    + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Base.html b/v3.4.3/jsdoc/Gp.Services.Config.Base.html new file mode 100644 index 00000000..6472927c --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Base.html @@ -0,0 +1,2730 @@ + + + + + + + + + + + + + Namespace: Base + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Base

    + + + + +
    + + +

    + Gp.Services.Config.Base +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    A base layer

    +

    type {Boolean}

    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Constraint.html b/v3.4.3/jsdoc/Gp.Services.Config.Constraint.html new file mode 100644 index 00000000..40141ada --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Constraint.html @@ -0,0 +1,2873 @@ + + + + + + + + + + + + + Namespace: Constraint + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Constraint

    + + + + +
    + + +

    + Gp.Services.Config.Constraint +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to express a geographical (BBOX, scale) and temporal constraint.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    crs + + +String + + + +

    Coordinates System ID used to express coordinates contraints.

    bbox + + +Gp.BBox + + + +

    Constraint Bounding Box.

    minScaleDenominator + + +Number + + + +

    Minimum scale denominator where constraint applies.

    maxScaleDenominator + + +Number + + + +

    Maximum scale denominator where constraint applies.

    temporalExtent + + +Array.<String> + + + +

    Array expressing the time interval of the constraint [minT, maxT]. Dates are expressed in the ISO-8601 way.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Format.html b/v3.4.3/jsdoc/Gp.Services.Config.Format.html new file mode 100644 index 00000000..9f7766e1 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Format.html @@ -0,0 +1,2804 @@ + + + + + + + + + + + + + Namespace: Format + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Format

    + + + + +
    + + +

    + Gp.Services.Config.Format +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a format to use with Geoportal resources.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    current + + +Boolean + + + +

    If true, then this format is used by default.

    name + + +String + + + +

    Format mime-type.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Layer.html b/v3.4.3/jsdoc/Gp.Services.Config.Layer.html new file mode 100644 index 00000000..4ac51ce0 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Layer.html @@ -0,0 +1,3592 @@ + + + + + + + + + + + + + Namespace: Layer + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Layer

    + + + + +
    + + +

    + Gp.Services.Config.Layer +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe geoportal resource (WMTS, WMS, WFS layers, geocoding resources or elevation service) parameters. Properties may be used or not depending on the resource type.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +String + + + +

    name of the resource to use with the webservice that serves it (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS").

    title + + +String + + + +

    Human readable name for the resource.

    description + + +String + + + +

    Resource description.

    layerId + + +String + + + +

    Unique resource Identifier (eg : "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS")

    quicklookUrl + + +String + + + +

    Image URL for the resource.

    serviceParams + + +Object + + + +

    Informations about the webservice that serves the resource (OpenLS, WFS, WMTS)

    +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    id + + +String + + + +

    Web Service identifier ("OGC:WMTS", "OGC:OPENLS;ReverseGeocode", etc...)

    serverUrl + + +Object + + + +

    Associative array mapping geoportal access key (keys) with their properties (URLs of the web service, with the geoportal access key).

    version + + +String + + + +

    webservice version.

    + +
    defaultProjection + + +String + + + +

    coordinates system ID used by default for the resource (WMS or WFS layer) or of the TileMatrixSet used by the WMTS layer.

    additionalProjections + + +Array.<String> + + + +

    additional coordinates systems IDs availables for the resource, others than the default one (see defaultProjection) (WMS and WFS layers only).

    formats + + +Array.<Gp.Services.Config.Format> + + + +

    Formats availables for the resource.

    legends + + +Array.<Gp.Services.Config.Legend> + + + +

    Informations about legends associated to the resource.

    metadata + + +Array.<Gp.Services.Config.Metadata> + + + +

    Informations about metadata associated to the resource.

    styles + + +Array.<Gp.Services.Config.Style> + + + +

    Informations about styles availables for the resources (WMS, WFS and WMTS only).

    thematics + + +Array.<Gp.Services.Config.Thematic> + + + +

    Informations about thematics associated to the resource.

    globalConstraint + + +Gp.Services.Config.Constraint + + + +

    geographical constraint for the resource.

    constraints + + +Array.<Gp.Services.Config.Constraint> + + + +

    additionnal geographical constraints for the resource.

    originators + + +Array.<Gp.Services.Config.Originator> + + + +

    Informations about originator of the resource.

    wmtsOptions + + +Object + + + +

    Informations associated to WMTS resources.

    +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    tileMatrixSetLink + + +String + + + +

    TileMatrixSet identifier used by the resource (see Gp.Services.Config.TileMatrixSet)

    tileMatrixSetLimits + + +Gp.Services.Config.TileMatrixLimit + + + +

    limits of the resource for that TileMAtrixSet.

    + +
    queryable + + +Boolean + + + +

    true if a getFeatureInfo request may be done for the resource (WMS or WMTS only).

    hidden + + +Boolean + + + +

    true if the resource is not visible.

    isAggregate + + +Boolean + + + +

    true if the resource is an aggregate of other resources (@see aggregatedLayers).

    aggregatedLayers + + +Array.<String> + + + +

    Layers IDs composing the being described aggregated layer.

    apiKeys + + +Array.<String> + + + +

    Array of access keys that grant access to that resource.

    dimensions + + +Object + + + +

    Dimensions informations associated with the resource.

    +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    type + + +String + + + +
    visibilityRange + + +String + + + +
    visibilityMode + + +String + + + +
    noDataValue + + +String + + + +
    geometricType + + +String + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Legend.html b/v3.4.3/jsdoc/Gp.Services.Config.Legend.html new file mode 100644 index 00000000..6b598944 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Legend.html @@ -0,0 +1,2827 @@ + + + + + + + + + + + + + Namespace: Legend + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Legend

    + + + + +
    + + +

    + Gp.Services.Config.Legend +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a legend file associated with a geoportal resource (WMTS, WMS, WFS layers).

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    format + + +String + + + +

    mime-type of the legend file.

    url + + +String + + + +

    legend file URL

    minScaleDenominator + + +Number + + + +

    minimum scale denominator where this legend applies.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Metadata.html b/v3.4.3/jsdoc/Gp.Services.Config.Metadata.html new file mode 100644 index 00000000..a1a9e4dd --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Metadata.html @@ -0,0 +1,2804 @@ + + + + + + + + + + + + + Namespace: Metadata + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Metadata

    + + + + +
    + + +

    + Gp.Services.Config.Metadata +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a metadata file associated with a geoportal resource.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    format + + +String + + + +

    mime-type of the metadata file.

    url + + +String + + + +

    metadata file URL

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Originator.html b/v3.4.3/jsdoc/Gp.Services.Config.Originator.html new file mode 100644 index 00000000..da83bfb4 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Originator.html @@ -0,0 +1,2873 @@ + + + + + + + + + + + + + Namespace: Originator + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Originator

    + + + + +
    + + +

    + Gp.Services.Config.Originator +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe an Originator of geoportal resource.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +String + + + +

    originator name

    attribution + + +String + + + +

    originator full name

    logo + + +String + + + +

    originator logo file URL

    url + + +String + + + +

    originator web site URL

    constraints + + +Array.<Gp.Services.Config.Constraint> + + + +

    where and when the originator applies for the ressource.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Service.html b/v3.4.3/jsdoc/Gp.Services.Config.Service.html new file mode 100644 index 00000000..024cccbd --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Service.html @@ -0,0 +1,2827 @@ + + + + + + + + + + + + + Namespace: Service + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Service

    + + + + +
    + + +

    + Gp.Services.Config.Service +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a web service of the geoportal platform.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    title + + +String + + + +

    Web service name

    serverUrl + + +Object + + + +

    Associative array mapping geoportal access key (keys) with their properties (URLs of the web service, with the geoportal access key).

    version + + +String + + + +

    web service version.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Style.html b/v3.4.3/jsdoc/Gp.Services.Config.Style.html new file mode 100644 index 00000000..0aecdc5b --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Style.html @@ -0,0 +1,2850 @@ + + + + + + + + + + + + + Namespace: Style + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Style

    + + + + +
    + + +

    + Gp.Services.Config.Style +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a style that may be used for a geoportal resource.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +String + + + +

    Style identifier (eg : "normal", "bdparcellaire", ...)

    title + + +String + + + +

    human readable name of the style.

    current + + +Boolean + + + +

    true if this is the default style.

    url + + +String + + + +

    Url Style (eg: vectortile).

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Territory.html b/v3.4.3/jsdoc/Gp.Services.Config.Territory.html new file mode 100644 index 00000000..c35cf5bd --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Territory.html @@ -0,0 +1,3084 @@ + + + + + + + + + + + + + Namespace: Territory + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Territory

    + + + + +
    + + +

    + Gp.Services.Config.Territory +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe properties of a french territory covered by geoportal resources.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    isDefault + + +Boolean + + + +

    if this territory is to use by default.

    defaultCRS + + +String + + + +

    Identifier of the coordinates system to use by default for that territory.

    additionalCRS + + +Array.<String> + + + +

    Identifiers of additional coordinates systems availables for that territory.

    defaultLayers + + +Array.<String> + + + +

    Identifiers of layers to load by default for that territory.

    defaultOptions + + +Object + + + +

    options to use by default for that territory.

    +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    resolution + + +Number + + + +

    resolution to use by default for that territory (in meter per pixel).

    minScaleDenominator + + +Number + + + +

    minimum scaleDenominator accessible for that territory.

    maxScaleDenominator + + +Number + + + +

    maximum scaleDenominator accessible for that territory.

    + +
    geoBBox + + +Gp.BBox + + + +

    Bounding Box of the territory (expressed in geographical coordinates)

    geoCenter + + +Object + + + +

    center of the territory (expressed in geographical coordinates)

    +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    lon + + +Float + + + +

    center longitude

    lat + + +Float + + + +

    center latitude

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.Thematic.html b/v3.4.3/jsdoc/Gp.Services.Config.Thematic.html new file mode 100644 index 00000000..a9943c66 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.Thematic.html @@ -0,0 +1,2730 @@ + + + + + + + + + + + + + Namespace: Thematic + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: Thematic

    + + + + +
    + + +

    + Gp.Services.Config.Thematic +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    A thematic name

    +

    type {String}

    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.TileMatrix.html b/v3.4.3/jsdoc/Gp.Services.Config.TileMatrix.html new file mode 100644 index 00000000..0fca4740 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.TileMatrix.html @@ -0,0 +1,2919 @@ + + + + + + + + + + + + + Namespace: TileMatrix + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: TileMatrix

    + + + + +
    + + +

    + Gp.Services.Config.TileMatrix +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a TileMatrix.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    matrixId + + +String + + + +

    matrix Identifier

    matrixHeight + + +Number + + + +

    Number of tiles from the top to the bottom of the matrix.

    matrixWidth + + +Number + + + +

    Number of tiles from the left to the right of the matrix.

    scaleDenominator + + +Number + + + +

    Scale denominator associated to that matrix.

    tileHeight + + +Number + + + +

    tile height in number of pixels

    tileWidth + + +Number + + + +

    tile width in number of pixels

    topLeftCorner + + +Gp.Point + + + +

    Top Left Corner Point of the matrix expressed in the tileMatrixSet coordinates system.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.TileMatrixLimit.html b/v3.4.3/jsdoc/Gp.Services.Config.TileMatrixLimit.html new file mode 100644 index 00000000..15816c5c --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.TileMatrixLimit.html @@ -0,0 +1,2850 @@ + + + + + + + + + + + + + Namespace: TileMatrixLimit + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: TileMatrixLimit

    + + + + +
    + + +

    + Gp.Services.Config.TileMatrixLimit +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a layer extent on a Tile Matrix.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    minTileCol + + +Number + + + +

    minimum column index where tile can be found on the Tile matrix.

    maxTileCol + + +Number + + + +

    maximum column index where tile can be found on the Tile matrix.

    minTileRow + + +Number + + + +

    minimum row index where tile can be found on the Tile matrix.

    maxTileCol + + +Number + + + +

    maximum row index where tile can be found on the Tile matrix.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.TileMatrixSet.html b/v3.4.3/jsdoc/Gp.Services.Config.TileMatrixSet.html new file mode 100644 index 00000000..153e716f --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.TileMatrixSet.html @@ -0,0 +1,2850 @@ + + + + + + + + + + + + + Namespace: TileMatrixSet + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: TileMatrixSet

    + + + + +
    + + +

    + Gp.Services.Config.TileMatrixSet +

    + +

    .Config.

    + + + + +
    +
    + + + + +

    Object used to describe a TileMatrix set (for WMTS use).

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    matrixIds + + +Array.<String> + + + +

    Array of IDs for each TileMatrix of the set.

    tileMatrices + + +Array.<Gp.Services.Config.TileMatrix> + + + +

    Array of TileMatrix descriptions.

    nativeResolutions + + +Array.<Float> + + + +

    Array of resolutions (in meter per pixel) applying for each TileMatrix of the set.

    projection + + +String + + + +

    Identifier of the Cordinates System used for the tileMatrixSet.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Config.html b/v3.4.3/jsdoc/Gp.Services.Config.html new file mode 100644 index 00000000..39e54b98 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Config.html @@ -0,0 +1,3660 @@ + + + + + + + + + + + + + Class: Config + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: Config

    + + + + +
    + + +

    + Gp.Services.Config +

    + + +

    Recupération de la configuration de clés Géoportail sous forme de JSON

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

    + + new Config(options) +

    + + +
    + Services/Config/Config.js, line 30 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +Sting + + + + + + + + + + + + +

    clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule

    sync + + +Boolean + + + + + + false + + + + + optional + + + + + +

    force le mode synchrone

    customConfigFile + + +String + + + + + + + + + + + + +

    chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     apiKey : "cartes,ortho",
    +     sync : false,
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +  };
    + + + +
    + + +
    + + +

    Extends

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

    Namespaces

    + +
    +
    Base
    +
    + +
    Constraint
    +
    + +
    Format
    +
    + +
    Layer
    +
    + +
    Legend
    +
    + +
    Metadata
    +
    + +
    Originator
    +
    + +
    Service
    +
    + +
    Style
    +
    + +
    Territory
    +
    + +
    Thematic
    +
    + +
    TileMatrix
    +
    + +
    TileMatrixLimit
    +
    + +
    TileMatrixSet
    +
    +
    + + + +

    Members

    + +
    + +
    +
    +

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)

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

    constructor

    +
    + + +
    +
    + +
    +

    Constructeur (alias)

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(error, success) +

    + + +
    + Services/Config/Config.js, line 237 +
    + +
    + + +
    +
    + + +
    +

    Analyse et mise en forme de la réponse en fusionnant les configurations

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + buildRequest(error, success) +

    + + +
    + Services/Config/Config.js, line 91 +
    + +
    + + +
    +
    + + +
    +

    Création de la requête

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + callService(error, success) +

    + + +
    + Services/Config/Config.js, line 113 +
    + +
    + + +
    +
    + + +
    +

    Récupération des configuration

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.DefaultUrl.html b/v3.4.3/jsdoc/Gp.Services.DefaultUrl.html new file mode 100644 index 00000000..a2adc391 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.DefaultUrl.html @@ -0,0 +1,3582 @@ + + + + + + + + + + + + + Namespace: DefaultUrl + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: DefaultUrl

    + + + + +
    + + +

    + Gp.Services.DefaultUrl +

    + + + + +
    +
    + + + + +

    Default Geoportal web services URLs access.

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

    Members

    + +
    + +
    +
    +

    staticGp.Services.DefaultUrl.AltiObject

    +
    + + +
    +
    + +
    +

    Elevation web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns elevation service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols ("elevation-json", "elevation-xml", "profil-json" or "profil-xml").

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

    staticGp.Services.DefaultUrl.AutoCompleteObject

    +
    + + +
    +
    + +
    +

    Autocompletion web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns autocomplete service default urls with or without geoportal access key given as a parameter. The result is a String.

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

    staticGp.Services.DefaultUrl.ConfigObject

    +
    + + +
    +
    + +
    +

    Config web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns config service default urls with or without geoportal access key given as a parameter.

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

    staticGp.Services.DefaultUrl.GeocodeObject

    +
    + + +
    +
    + +
    +

    Geocoding web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.

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

    staticGp.Services.DefaultUrl.ProcessIsoCurveObject

    +
    + + +
    +
    + +
    +

    IsoCurve web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns isocurve service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols ("iso-json" or "iso-xml").

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

    staticGp.Services.DefaultUrl.ReverseGeocodeObject

    +
    + + +
    +
    + +
    +

    Reverse geocoding web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns reverse geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.

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

    staticGp.Services.DefaultUrl.RouteObject

    +
    + + +
    +
    + +
    +

    Routing web service access

    +
    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +function + + + +

    (key) - Returns routing service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols.

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

    staticGp.Services.DefaultUrl.ssl

    +
    + + +
    +
    + +
    +

    if set true, require the use of https protocol

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

    Methods

    + +
    + +
    +
    +

    + + staticnewUrl(path){String} +

    + + +
    + Services/DefaultUrlService.js, line 49 +
    + +
    + + +
    +
    + + +
    +

    base new-url of geoplateforme services (ssl protocol management)

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    path + + +String + + + + + +

    path

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Geocode.GeocodedLocation.html b/v3.4.3/jsdoc/Gp.Services.Geocode.GeocodedLocation.html new file mode 100644 index 00000000..e4676b91 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Geocode.GeocodedLocation.html @@ -0,0 +1,2906 @@ + + + + + + + + + + + + + Namespace: GeocodedLocation + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: GeocodedLocation

    + + + + +
    + + +

    + Gp.Services.Geocode.GeocodedLocation +

    + +

    .Geocode.

    + + + + +
    +
    + + + + +

    Single location object returned by the underlying geocoding web service.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    position + + +Gp.Point + + + +

    Position of the location given in the requested coordinates system.

    type + + +String + + + +

    location type "StreetAddress" (for an address), "PositionOfInterest" (for a place name) or "CadastralParcel" (for cadastral parcel).

    matchType + + +String + + + +

    how geocoding is performed : "street number" (exact address), "street enhanced" (street number calculated by interpolation), "street" (only the street), "city" (only the city).

    accuracy + + +Float + + + +

    Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match).

    placeAttributes + + +Object + + + +

    Associative array matching the following attributes with their values given by the underlying web service :

    +

    *Common attributes : *

    +
      +
    • trueGeometry - the 'real life' geometry if different from 'Point' type.
    • +
    +

    if type === "StreetAddress" :

    +
      +
    • number - Street number.
    • +
    • postalCode - PostCode
    • +
    • street - Street name
    • +
    • city - City
    • +
    • houseNumberInfos - additional street number information
    • +
    • inseeCode - INSEE Code
    • +
    +

    if type === "PositionOfInterest" :

    +
      +
    • type - Place name type
    • +
    • postalCode - PostCode
    • +
    • toponyme - Toponyme
    • +
    • extraFields - additional place name properties
    • +
    • inseeCode - INSEE Code
    • +
    +

    si type = "CadastralParcel" :

    +
      +
    • codeCommuneAbs - when a parcel comes from a city that was absorbed by another, code of that old city. "000" otherwise.
    • +
    • codeArrondissement - arrondissement
    • +
    • identifiant - cadastral parcel code
    • +
    • feuille - Parcel Sheet (eg. "1").
    • +
    • numero - Parcel Number (eg. "0041")
    • +
    • section - Parcel Section (eg. "0D").
    • +
    • nomCommune - Parcel municipality name.
    • +
    • codeCommune - Parcel municipality.
    • +
    • codeDepartement - Parcel Department.
    • +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Geocode.html b/v3.4.3/jsdoc/Gp.Services.Geocode.html new file mode 100644 index 00000000..04371554 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Geocode.html @@ -0,0 +1,3809 @@ + + + + + + + + + + + + + Class: Geocode + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: Geocode

    + + + + +
    + + +

    + Gp.Services.Geocode +

    + + +

    Appel du service de géocodage direct du Géoportail :
    +envoi de la requête construite selon les paramètres en options,
    +éventuellement parsing et analyse de la réponse,
    +retour d'une réponse en paramètre de la fonction onSuccess.

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

    + + new Geocode(options) +

    + + +
    + Services/Geocode/Geocode.js, line 71 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    query + + +String +| + +Object + + + + + + + + + + + + +

    Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée.

    filters + + +Object + + + + + + + + + optional + + + + + +

    Les propriétés possibles de cet objet sont décrites ci-après.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    [prop] + + +String + + + + + + + optional + + + + + +

    Critère supplémentaire pour filtrer la recherche sous la forme
    +d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.
    +Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :
    +"postalCode", "inseeCode", "city".
    +Il permet également de filtrer les toponymes avec les propriétés :
    +"postalCode", "inseeCode", "type".
    +Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :
    +"codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille".

    + +
    index + + +String + + + + + + "StreetAddress" + + + + + optional + + + + + +

    Type de l'objet recherché.
    +Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'
    +pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales.
    +L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'.
    +D'autres types pourront être rajoutés selon l'évolution du service.
    +Par défaut, index = 'StreetAddress'.

    position + + +Object + + + + + + + + + + + + +

    Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    lon + + +Float + + + + + +

    Longitude du point de référence pour le calcul de proximité.

    lat + + +Float + + + + + +

    Latitude du point de référence pour le calcul de proximité.

    + +
    maximumResponses + + +Number + + + + + + + + + optional + + + + + +

    Nombre de réponses maximal que l'on souhaite recevoir.
    +Pas de valeur par défaut.
    +Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20.

    returnTrueGeometry + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.
    +false par défaut.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     apiKey : null,
    +     serverUrl : 'http://localhost/service/',
    +     proxyURL : null,
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     // spécifique au service
    +     position : {lon:, lat:},
    +     index : 'StreetAddress',
    +     query : '10 rue du pont Machin-ville'
    +     (...)
    +  };
    + + + +
    + + +
    + + +

    Extends

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

    Namespaces

    + +
    +
    GeocodedLocation
    +
    +
    + + + +

    Members

    + +
    + +
    +
    +

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)
    +FIXME instance ou classe ?

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(error, success) +

    + + +
    + Services/Geocode/Geocode.js, line 247 +
    + +
    + + +
    +
    + + +
    +

    Analyse de la reponse (overwrite)

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + buildRequest(error, success) +

    + + +
    + Services/Geocode/Geocode.js, line 220 +
    + +
    + + +
    +
    + + +
    +

    Création de la requête (overwrite)

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + patchOptionConvertor(options_){Object} +

    + + +
    + Services/Geocode/Geocode.js, line 143 +
    + +
    + + +
    +
    + + +
    +

    Patch pour la convertion des options vers le nouveau formalisme.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options_ + + +Object + + + + + +

    options du service

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.GeocodeResponse.html b/v3.4.3/jsdoc/Gp.Services.GeocodeResponse.html new file mode 100644 index 00000000..88f96182 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.GeocodeResponse.html @@ -0,0 +1,2779 @@ + + + + + + + + + + + + + Namespace: GeocodeResponse + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: GeocodeResponse

    + + + + +
    + + +

    + Gp.Services.GeocodeResponse +

    + + + + +
    +
    + + + + +

    Response object for Gp.Services.geocode () or Gp.Services.reverseGeocode () invocation when successful. Received as the argument of onSuccess callback function.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    locations + + +Array.<Gp.Services.Geocode.GeocodedLocation> + + + +

    locations array.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.GetConfigInterface.html b/v3.4.3/jsdoc/Gp.Services.GetConfigInterface.html new file mode 100644 index 00000000..98b8fb98 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.GetConfigInterface.html @@ -0,0 +1,4579 @@ + + + + + + + + + + + + + Namespace: GetConfigInterface + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: GetConfigInterface

    + + + + +
    + + +

    + Gp.Services.GetConfigInterface +

    + + + + +
    +
    + + + + +

    Response object for Gp.Services.getConfig () invocation when successful. Received as the argument of onSuccess callback function.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    generalOptions + + +Object + + + +

    General properties for default map configuration resources.

    +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    apiKeys + + +Object + + + +

    Object that associates apiKey (s) with an array of resources IDs availables with that key.

    title + + +String + + + +

    Underlying web service Title.

    defaultGMLGFIStyle + + +String + + + +

    XSL URL used by default to translate an XML GetFeatureInfo response into an HTML array.

    theme + + +String + + + +

    default theme (FIXME : for what ?)

    wgs84Resolutions + + +Array.<Float> + + + +

    geographical resolutions Array for each zoom level of the Geoportal platform from 0 to 21. Expressed in degrees/pixel.

    + +
    layers + + +Object + + + +

    Associative array mapping resources availables IDs (keys) with their properties (values given as Gp.Services.Config.Layer).

    tileMatrixSets + + +Object + + + +

    Associative Array mapping TileMatrixSets IDs (keys) availables with their properties (values given as Gp.Services.Config.TileMatrixSet).

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

    Methods

    + +
    + +
    +
    +

    + + getGlobalConstraints(layerId){Object} +

    + + +
    + Services/Config/ConfigInterface.js, line 304 +
    + +
    + + +
    +
    + + +
    +

    Get global constraints for a given Layer : extent, minScale, maxScale, projection

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    layerId + + +String + + + + + +

    Geoportal layer identifier (e.g. "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS")

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    Returns:
    + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    params + + Object + + + - layer constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    projection + + String + + + - default layer projection
    minScale + + Number + + + - layer min scale denominator
    maxScale + + Number + + + - layer max scale denominator
    extent + + Gp.BBox + + + - layer extent expressed in the layer projection
    + + +
    + + + + + +
    + + + +
    +
    +

    + + getLayerConf(layerId){Object} +

    + + +
    + Services/Config/ConfigInterface.js, line 144 +
    + +
    + + +
    +
    + + +
    +

    Returns a geoportal layer configuration, given its identifier

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    layerId + + +String + + + + + +

    Geoportal layer identifier (e.g. "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS")

    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- Layer configuration +
    + + + + + +
    + + + +
    +
    +

    + + getLayerId(layerName, service){String} +

    + + +
    + Services/Config/ConfigInterface.js, line 75 +
    + +
    + + +
    +
    + + +
    +

    Returns the id of a Geoportal layer with its name and its service.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    layerName + + +String + + + + + +

    name of the layer (ex. "ORTHOIMAGERY.ORTHOPHOTOS")

    service + + +String + + + + + +

    name of the service (ex. "WMS" ou "WMTS")

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +of the layer (ex. "ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS") +
    + + + + + +
    + + + +
    +
    +

    + + getLayerKey(layerId){Array} +

    + + +
    + Services/Config/ConfigInterface.js, line 254 +
    + +
    + + +
    +
    + + +
    +

    Get the contract key(s) associated to a given layer.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    layerId + + +String + + + + + +

    Geoportal layer identifier (e.g. "GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS")

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- array of key(s) associated to the given layer +
    + + + + + +
    + + + +
    +
    +

    + + getLayerParams(layerName, service, apiKey){Object} +

    + + +
    + Services/Config/ConfigInterface.js, line 174 +
    + +
    + + +
    +
    + + +
    +

    Get all parameters needed to display a WMS or WMTS layer given its name, its service and its key

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    layerName + + +String + + + + + + + + + + +

    name of the layer (ex. "ORTHOIMAGERY.ORTHOPHOTOS")

    service + + +String + + + + + + + + + + +

    name of the service (ex. "WMS" ou "WMTS")

    apiKey + + +String + + + + + + + optional + + + + + +

    Contract API key

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    Returns:
    + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    params + + Object + + + - params of the service (WMS or WMTS) for the given layer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + String + + + - Url of the service to reach to display the layer
    version + + String + + + - Version of the service
    styles + + String + + + - Default style of the layer
    format + + String + + + - Default format of the layer
    projection + + String + + + - Default projection of the layer
    minScale + + Number + + + - Min scale denominator of the layer
    maxScale + + Number + + + - Max scale denominator of the layer
    extent + + Gp.BBox + + + - Extent of the layer, in the projection of the layer
    legends + + Array + + + - Array of legends associated to the layer
    title + + Array + + + - Name of the layer, readable by a human
    description + + Array + + + - Description of the layer
    [TMSLink] + + String + + + - Id of the Tile Matrix Set (TMS), in the case of WMTS layer
    [matrixOrigin] + + Gp.Point + + + - Originof the tile matrix (top left corner), in the case of WMTS layer
    [nativeResolutions] + + Array + + + - Array with the resolution of each level of the tile matrix set, in the case of WMTS layer
    [matrixIds] + + Array + + + - Array with the ID of each level of the tile matrix set, in the case of WMTS layer
    + + +
    + + + + + +
    + + + +
    +
    +

    + + getLayersConf(apiKey){Object} +

    + + +
    + Services/Config/ConfigInterface.js, line 125 +
    + +
    + + +
    +
    + + +
    +

    Returns an associative array of Geoportal layers configurations, corresponding to an API contract key.
    +If no key is specified, all layers from configuration are returned.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    apiKey + + +String + + + + + +

    Access key to Geoportal platform

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- Object which properties are layers identifiers. +
    + + + + + +
    + + + +
    +
    +

    + + getLayersId(apiKey){Array} +

    + + +
    + Services/Config/ConfigInterface.js, line 64 +
    + +
    + + +
    +
    + + +
    +

    Returns an array of Geoportal layers identifiers, corresponding to an API contract key.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    apiKey + + +String + + + + + +

    Access key to Geoportal platform

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- Array of geoportal layers identifiers +
    + + + + + +
    + + + +
    +
    +

    + + getTileMatrixSets(){Object} +

    + + +
    + Services/Config/ConfigInterface.js, line 276 +
    + +
    + + +
    +
    + + +
    +

    Returns an associative array of Tile Matrix Sets configurations.

    +
    + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- Object which properties are TMS identifiers +
    + + + + + +
    + + + +
    +
    +

    + + getTMSConf(tmsID){Object} +

    + + +
    + Services/Config/ConfigInterface.js, line 287 +
    + +
    + + +
    +
    + + +
    +

    Returns a Tile Matrix Sets configuration, given its identifier.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    tmsID + + +String + + + + + +

    Tile Matrix Set identifier (e.g. : "PM")

    + + + + +
    + + + + + + + + + + + + + + + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- Tile Matrix Set configuration +
    + + + + + +
    + + + +
    +
    +

    + + isKeyConfLoaded(apiKey){Boolean} +

    + + +
    + Services/Config/ConfigInterface.js, line 48 +
    + +
    + + +
    +
    + + +
    +

    Check if config is loaded for a given key

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    apiKey + + +String + + + + + +

    Access key to Geoportal platform

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +- true if config of the key is already loaded, false otherwise +
    + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.IsoCurveResponse.html b/v3.4.3/jsdoc/Gp.Services.IsoCurveResponse.html new file mode 100644 index 00000000..43d21348 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.IsoCurveResponse.html @@ -0,0 +1,2917 @@ + + + + + + + + + + + + + Namespace: IsoCurveResponse + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: IsoCurveResponse

    + + + + +
    + + +

    + Gp.Services.IsoCurveResponse +

    + + + + +
    +
    + + + + +

    Response object for Gp.Services.isoCurve () invocation when successful. Received as the argument of onSuccess callback function.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    distance + + +Float + + + +

    distance (expressed in meters) used for the request.

    time + + +Float + + + +

    time (expressed in seconds) used for the request.

    geometry + + +Object + + + +

    Geometry (expressed in GeoJSON) of the isocurve.

    id + + +String + + + +

    request id (used by underlying webservice).

    location + + +Gp.Point + + + +

    Position of the start or end point used for the request (expressed in "srs" coordinates system).

    message + + +String + + + +

    message

    srs + + +String + + + +

    Identifier of the coordinates system used for the isocurve.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.ProcessIsoCurve.html b/v3.4.3/jsdoc/Gp.Services.ProcessIsoCurve.html new file mode 100644 index 00000000..25824bae --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.ProcessIsoCurve.html @@ -0,0 +1,4086 @@ + + + + + + + + + + + + + Class: ProcessIsoCurve + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: ProcessIsoCurve

    + + + + +
    + + +

    + Gp.Services.ProcessIsoCurve +

    + + +

    Appel du service d'isochrone/distance du Géoportail :
    +envoi de la requête construite selon les paramètres en options,
    +éventuellement parsing et analyse de la réponse,
    +retour d'une réponse en paramètre de la fonction onSuccess.

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

    + + new ProcessIsoCurve(options) +

    + + +
    + Services/ProcessIsoCurve/ProcessIsoCurve.js, line 101 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    resource + + +String + + + + + + + + + + + + +

    La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr.

    outputFormat + + +String + + + + + + + + + + + + +

    Le format de la réponse du service iso : 'json' uniquement et par défaut.

    position + + +Object + + + + + + + + + + + + +

    Point de départ du calcul.
    +Coordonnées exprimées en longitudes, latitudes (EPSG:4326)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    x + + +Float + + + + + +

    Abcisse du point de départ du calcul d'isochrone/distance.

    y + + +Float + + + + + +

    Ordonnée du point de départ du calcul d'isochrone/distance.

    + +
    srs + + +String + + + + + + + + + + + + +

    Projection.
    +Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et
    +dans lequel la géométrie de la courbe résultante sera exprimée.
    +Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ».

    graph + + +String + + + + + + "voiture" + + + + + optional + + + + + +

    Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »).
    +La valeur par défaut est : «voiture»

    exclusions + + +Array.<String> + + + + + + + + + optional + + + + + +

    DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints.
    +Critères d'exclusions à appliquer pour le calcul.
    +On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte
    +(valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).

    constraints + + +Array.<Object> + + + + + + + + + optional + + + + + +

    Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    constraintType + + +String + + + + + + + optional + + + + + +

    Type de la contrainte. Généralement "banned".

    key + + +String + + + + + + + optional + + + + + +

    Clé de la contrainte. Généralement "wayType".

    operator + + +String + + + + + + + optional + + + + + +

    Opérateur de la contrainte. Généralement "=".

    value + + +String + + + + + + + optional + + + + + +

    Valeur de la contrainte. Généralement "autoroute".

    + +
    method + + +String + + + + + + "time" + + + + + optional + + + + + +

    Méthode utilisée pour le calcul de la courbe iso.
    +Les valeurs possible sont "time" pour un calcul d'isochrone, "distance" pour un calcul d'isodistance.
    +Pas de valeur spécifié équivaut à un calcul d'isochrone.

    distanceUnit + + +String + + + + + + "m" + + + + + optional + + + + + +

    Indique si la distance doit être exprimée en km ou m dans la réponse ("m" or "km").

    timeUnit + + +String + + + + + + "second" + + + + + optional + + + + + +

    Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse ("standard", "second", "minute", "hour"). Il peut-être formatté hh:mm::ss avec la valeur standard.

    time + + +Float + + + + + + + + + + + + +

    Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ».
    +Ce paramètre doit être renseigné si l'option "méthod" a la valeur "time".
    +Si l'option method n'est pas renseignée, ce paramètre doit être renseigné.

    distance + + +Float + + + + + + + + + + + + +

    Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ».
    +Ce paramètre doit être renseigné si l'option "méthod" a la valeur "DISTANCE".
    +Si l'option "method" n'est pas renseignée, ce paramètre sera ignoré.

    reverse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.
    +Par défaut, la valeur « false » est appliquée.

    smoothing + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.
    +Par défaut, la valeur « false » est appliquée.

    holes + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »).
    +Par défaut, la valeur « false » est appliquée.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     // options communes aux services
    +     apiKey : null,
    +     serverUrl : 'http://localhost/service/',
    +     protocol : 'JSONP', // JSONP|XHR
    +     proxyURL : null,
    +     httpMethod : 'GET', // GET|POST
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     // spécifique au service
    +     position : {
    +          x : 2.3242664298058053,
    +          y : 48.86118017324745
    +     },
    +     resource : bdtopo-valhalla,
    +     distance : 200,
    +     [time : ]
    +     method : "distance",
    +     graph : "voiture",
    +     reverse : false
    + };
    + + + +
    + + +
    + + +

    Extends

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

    Members

    + +
    + +
    +
    +

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)
    +FIXME instance ou classe ?

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(onError, onSuccess) +

    + + +
    + Services/ProcessIsoCurve/ProcessIsoCurve.js, line 301 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Analyse de la reponse

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    onError + + +function + + + + + +

    callback des erreurs

    onSuccess + + +function + + + + + +

    callback de succès de l'analyse de la réponse

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

    + + buildRequest(error, success) +

    + + +
    + Services/ProcessIsoCurve/ProcessIsoCurve.js, line 278 +
    + +
    + + +
    +
    + + +
    +

    Création de la requête (overwrite)

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.ReverseGeocode.html b/v3.4.3/jsdoc/Gp.Services.ReverseGeocode.html new file mode 100644 index 00000000..93bd1d61 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.ReverseGeocode.html @@ -0,0 +1,4329 @@ + + + + + + + + + + + + + Class: ReverseGeocode + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: ReverseGeocode

    + + + + +
    + + +

    + Gp.Services.ReverseGeocode +

    + + +

    Appel du service de géocodage inverse du Géoportail :
    +envoi de la requête construite selon les paramètres en options,
    +éventuellement parsing et analyse de la réponse,
    +retour d'une réponse en paramètre de la fonction onSuccess.

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

    + + new ReverseGeocode(options) +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 76 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    position + + +Object + + + + + + + + + + + + +

    Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    lon + + +Float + + + + + +

    Longitude du point de référence pour le calcul de proximité.

    lat + + +Float + + + + + +

    Latitude du point de référence pour le calcul de proximité.

    + +
    filters + + +Object + + + + + + + + + optional + + + + + +

    Les propriétés possibles de cet objet.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    [proprietes du filtre] + + +String + + + + + + + optional + + + + + +

    Critère supplémentaire pour filtrer la recherche sous la forme
    +d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.
    +Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :
    +"postalCode", "inseeCode", "city".
    +Il permet également de filtrer les toponymes avec les propriétés :
    +"postalCode", "inseeCode", "type".
    +Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :
    +"codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille".

    + +
    searchGeometry + + +Object + + + + + + + + + optional + + + + + +

    Emprise dans laquelle on souhaite effectuer la recherche.
    +Les propriétés possibles de cet objet sont décrites ci-après.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    type + + +String + + + + + +

    Type de géometrie (Point|Circle|Linestring|Polygon)

    coordinates + + +Array.<Float> +| + +Array.Array.<Float> + + + + + +

    Coordonnées des points constituant la géométrie.

    radius + + +Float + + + + + +

    Rayon. Paramètre applicable uniquement pour le type 'Circle'.

    + +
    index + + +String + + + + + + "StreetAddress" + + + + + optional + + + + + +

    Type de l'objet recherché.
    +Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'
    +pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche
    +multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'.
    +D'autres types pourront être rajoutés selon l'évolution du service.
    +Par défaut, index = 'StreetAddress'.

    maximumResponses + + +Number + + + + + + + + + optional + + + + + +

    Nombre de réponses maximal que l'on souhaite recevoir.
    +Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s.

    returnTrueGeometry + + +Boolean + + + + + + + + + optional + + + + + +

    Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.
    +false par défaut.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     apiKey : null,
    +     serverUrl : 'http://localhost/service/',
    +     proxyURL : null,
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     // spécifique au service
    +     index : 'StreetAddress',
    +     searchGeometry : {
    +         type : Circle,
    +         coordinates : [48, 2],
    +         radius : 100
    +     },
    +     position : {lon:2 , lat:48.5},
    +     maximumResponses : 25,
    +  };
    + + + +
    + + +
    + + +

    Extends

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

    Members

    + +
    + +
    +
    +

    staticGp.Services.ReverseGeocode.geoEPSG

    +
    + + +
    +
    + +
    +

    Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées.

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

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)
    +FIXME instance ou classe ?

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(error, success) +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 265 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Analyse de la reponse

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + bbox2Json(bbox){Object} +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 287 +
    + +
    + + +
    +
    + + +
    +

    Patch pour la convertion des options vers le nouveau formalisme.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    bbox + + +Array + + + + + +

    bbox

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +au format json + +
    + + + + + +
    + + + +
    +
    +

    + + buildRequest(error, success) +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 237 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Création de la requête

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + circle2Json(circle){Object} +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 306 +
    + +
    + + +
    +
    + + +
    +

    Patch pour la convertion des options vers le nouveau formalisme.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    circle + + +Object + + + + + +

    circle

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +au format json + +
    + + + + + +
    + + + +
    +
    +

    + + patchOptionConvertor(options_){Object} +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 150 +
    + +
    + + +
    +
    + + +
    +

    Patch pour la convertion des options vers le nouveau formalisme.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options_ + + +Object + + + + + +

    options du service

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

    + + polygon2Json(polygon){Object} +

    + + +
    + Services/Geocode/ReverseGeocode.js, line 320 +
    + +
    + + +
    +
    + + +
    +

    Patch pour la convertion des options vers le nouveau formalisme.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    polygon + + +Array + + + + + +

    polygon

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +au format json + +
    + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Route.RouteInstruction.html b/v3.4.3/jsdoc/Gp.Services.Route.RouteInstruction.html new file mode 100644 index 00000000..3f7f026e --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Route.RouteInstruction.html @@ -0,0 +1,2885 @@ + + + + + + + + + + + + + Namespace: RouteInstruction + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: RouteInstruction

    + + + + +
    + + +

    + Gp.Services.Route.RouteInstruction +

    + +

    .Route.

    + + + + +
    +
    + + + + +

    Single Route Instruction object.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    code + + +String + + + +

    Instruction code :

    +
      +
    • "F" : Straight forward
    • +
    • "B" : U-turn
    • +
    • "L" : turn left
    • +
    • "R" : turn right
    • +
    • "BL" : turn left strongly
    • +
    • "BR" : turn right strongly
    • +
    • "FL" : turn lightly to the left
    • +
    • "FR" : turn lightly to the right
    • +
    • "round_about_entry" : round about entry
    • +
    • "round_about_exit" : round about exit
    • +
    instruction + + +String + + + +

    Instruction text : translated code + street name

    geometry + + +Object + + + +

    Geometry (expressed in GeoJSON) of the street.

    distance + + +Float + + + +

    Length of the instruction. Expressed in km or m, depending on distanceUnit parameter.

    duration + + +Float + + + +

    Instruction duration in seconds.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.Route.html b/v3.4.3/jsdoc/Gp.Services.Route.html new file mode 100644 index 00000000..3fa9b973 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.Route.html @@ -0,0 +1,4215 @@ + + + + + + + + + + + + + Class: Route + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Class: Route

    + + + + +
    + + +

    + Gp.Services.Route +

    + + +

    Appel du service d'itinéraire du Géoportail :
    +envoi de la requête construite selon les paramètres en options,
    +éventuellement parsing et analyse de la réponse,
    +retour d'une réponse en paramètre de la fonction onSuccess.

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

    + + new Route(options) +

    + + +
    + Services/Route/Route.js, line 107 +
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    options spécifiques au service (+ les options heritées)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    resource + + +String + + + + + + + + + + + + +

    La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité.

    outputFormat + + +String + + + + + + + + + + + + +

    Le format de la réponse du service itineraire : 'json' uniquement et par défaut.

    routePreference + + +String + + + + + + "fastest" + + + + + optional + + + + + +

    Mode de calcul à utiliser :

    +
      +
    • le plus rapide « fastest »
    • +
    • le plus court « shortest »
      +Par défaut : « fastest ».
    • +
    startPoint + + +Object + + + + + + + + + + + + +

    Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    x + + +Float + + + + + +

    Abcisse du point de départ du calcul d'itinéraire.

    y + + +Float + + + + + +

    Ordonnée du point de départ du calcul d'itinéraire.

    + +
    endPoint + + +Object + + + + + + + + + + + + +

    Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    x + + +Float + + + + + +

    Abcisse du point d'arrivée du calcul d'itinéraire.

    y + + +Float + + + + + +

    Ordonnée du point d'arrivée du calcul d'itinéraire.

    + +
    viaPoints + + +Array.<Object> + + + + + + + + + optional + + + + + +

    Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau.
    +Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float}

    graph + + +String + + + + + + "voiture" + + + + + optional + + + + + +

    Type de graphe utilisé : "Voiture" ou "Pieton".
    +Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non.
    +Par défaut, c'est la valeur "Voiture" qui sera utilisée.

    exclusions + + +Array.<String> + + + + + + + + + optional + + + + + +

    DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre "avoidFeature" d'OpenLS)
    +On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte
    +(valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).
    +Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints

    constraints + + +Array.<Object> + + + + + + + + + optional + + + + + +

    Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    constraintType + + +String + + + + + + + optional + + + + + +

    Type de la contrainte. Généralement "banned".

    key + + +String + + + + + + + optional + + + + + +

    Clé de la contrainte. Généralement "wayType".

    operator + + +String + + + + + + + optional + + + + + +

    Opérateur de la contrainte. Généralement "=".

    value + + +String + + + + + + + optional + + + + + +

    Valeur de la contrainte. Généralement "autoroute".

    + +
    geometryInInstructions + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions.
    +(correspond au paramètre "provideGeometry" d'OpenLS) Par défaut : false.

    provideBbox + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Indique si les instructions doivent être localisées par une bbox dans la réponse.
    +Par défaut : true.

    distanceUnit + + +String + + + + + + "m" + + + + + optional + + + + + +

    Indique si la distance doit être exprimée en km ou m dans la réponse.
    +Par défaut : m.

    timeUnit + + +String + + + + + + "second" + + + + + optional + + + + + +

    Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard.
    +Les valeurs possibles sont "standard", "second", "minute" ou "hour".
    +Par défaut : "standard".

    srs + + +String + + + + + + + + + optional + + + + + +

    Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés.
    +Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'.

    waysAttributes + + +Array.<String> + + + + + + + + + optional + + + + + +

    Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    var options = {
    +     // options communes aux services
    +     apiKey : null,
    +     serverUrl : 'http://localhost/service/',
    +     protocol : 'XHR',
    +     proxyURL : null,
    +     httpMethod : 'GET', // GET|POST
    +     timeOut : 10000, // ms
    +     rawResponse : false, // true|false
    +     scope : null, // this
    +     onSuccess : function (response) {},
    +     onFailure : function (error) {},
    +     // spécifique au service
    +     resource : 'bdtopo'
    +     outputFormat : 'json',
    +     startPoint : {
    +         x : 42.1121,
    +         y : 1.5557
    +     },
    +     endPoint : {
    +         x : 42.1121,
    +         y : 1.5557
    +     },
    +     provideBbox : true,
    +     exclusions : ["Bridge", "Tunnel", "Toll"],
    +     distanceUnit : "km",
    +     graph : "Voiture",
    +     geometryInInstructions : true,
    +     routePreference : "fastest"
    + };
    + + + +
    + + +
    + + +

    Extends

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

    Namespaces

    + +
    +
    RouteInstruction
    +
    +
    + + + +

    Members

    + +
    + +
    +
    +

    CLASSNAME

    +
    + + +
    +
    + +
    +

    Nom de la classe (heritage)

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

    optionsObject

    +
    + + +
    +
    + +
    +

    Options du service

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

    request

    +
    + + +
    +
    + +
    +

    Requête envoyée au service

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

    response

    +
    + + +
    +
    + +
    +

    Reponse du service

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

    innerconstraintTunnel

    +
    + + +
    +
    + +
    +

    Gestion de l'ancien paramètre exclusion

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

    Methods

    + +
    + +
    +
    +

    + + analyzeResponse(error, success) +

    + + +
    + Services/Route/Route.js, line 299 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Analyse de la reponse

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

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

    + + buildRequest(error, success) +

    + + +
    + Services/Route/Route.js, line 264 +
    + +
    + + +
    +
    + + +
    +

    (overwrite)
    +Création de la requête

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    error + + +function + + + + + +

    callback des erreurs

    success + + +function + + + + + +

    callback

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/Gp.Services.RouteResponse.html b/v3.4.3/jsdoc/Gp.Services.RouteResponse.html new file mode 100644 index 00000000..bf7ae238 --- /dev/null +++ b/v3.4.3/jsdoc/Gp.Services.RouteResponse.html @@ -0,0 +1,2871 @@ + + + + + + + + + + + + + Namespace: RouteResponse + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Namespace: RouteResponse

    + + + + +
    + + +

    + Gp.Services.RouteResponse +

    + + + + +
    +
    + + + + +

    Response object for Gp.Services.route () invocation when successful. Received as the argument of onSuccess callback function.

    + + + +
    + + +
    Properties:
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    bbox + + +Gp.BBox + + + +

    Bounding Box of the route. Given when provideBBox parameter is used in function call.

    routeGeometry + + +Object + + + +

    Geometry (expressed in GeoJSON) of the route.

    routeInstructions + + +Array.<Gp.Services.Route.RouteInstruction> + + + +

    Instructions of the route.

    totalDistance + + +String + + + +

    Length of the route. If distanceUnit parameter was set to "km" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by " Km" (e.g. : "19.6 Km"). If distanceUnit parameter was set to "m", totalDistance is a string containing the total distance expressed in meters (e.g. : "19599.14").

    totalTime + + +Float + + + +

    Route duration in seconds.

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.eot b/v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..423bd5d3a20b804f596e04e5cd02fb4f16cfcbc1 GIT binary patch literal 20290 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.ttf b/v3.4.3/jsdoc/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a498ef4e7c8b556fc36f580c5ff524025bb11c84 GIT binary patch literal 41236 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 + + + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Global

    + + + + +
    + + +

    + +

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

    Members

    + +
    + +
    +
    +

    classificationInteger

    +
    + + +
    +
    + +
    +

    Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).

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

    CLASSNAMEString

    +
    + + +
    +
    + +
    +

    Nom de la classe : "GeocodedLocation"

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

    communeString

    +
    + + +
    +
    + +
    +

    Suggested municipality

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

    fullTextString

    +
    + + +
    +
    + +
    +

    Full text representation of the suggested location.

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

    kindString

    +
    + + +
    +
    + +
    +

    Nature of the suggested location : "prefecture", "monument", "commune", ... for instance ("PositionOfInterest" only).

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

    poiString

    +
    + + +
    +
    + +
    +

    Place name of the suggested location ("PositionOfInterest" only).

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

    positionGp.Point

    +
    + + +
    +
    + +
    +

    Position of the suggested location given in requested coordinates system.

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

    postalCodeNumber

    +
    + + +
    +
    + +
    +

    Suggested location postcode

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

    sampling

    +
    + + +
    +
    + +
    +

    Setter/getter pour "sampling"

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

    streetString

    +
    + + +
    +
    + +
    +

    Street name of the suggested location ("StreetAddress" only).

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

    typeString

    +
    + + +
    +
    + +
    +

    Suggested location type : "StreetAddress" ou "PositionOfInterest"

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

    zonly

    +
    + + +
    +
    + +
    +

    Setter/getter pour "zonly"

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + +
    + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/images/entete.png b/v3.4.3/jsdoc/images/entete.png new file mode 100644 index 0000000000000000000000000000000000000000..785651104951086de41c354e8ce645034279da22 GIT binary patch literal 119357 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 literal 0 HcmV?d00001 diff --git a/v3.4.3/jsdoc/images/logoIGNsmall.png b/v3.4.3/jsdoc/images/logoIGNsmall.png new file mode 100644 index 0000000000000000000000000000000000000000..9b33003c3f7ea16300118bb3b7f58a8608b6d73f GIT binary patch literal 1010 zcmVX1^@s6oR$`P0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#lu1NERCwCFm|I9yK@^7fG4s|%O1pRo zOT?}cM3Gq3Q;KL5lyrZ}qR4LaQuNeA5(W`yWnq_>f--#YL5d71$_|xXO+^YT0!vGd z1({lB_fPyMcEdh<&+H@p@S%I0GiR+?Yu2o-&os?A!!V+O34CA}3>s>R0kgp(Fdt0h zct3as{NNS%<+4s8mWTvKv{~q<0cUDJ2WaEZN?^E<2=;;&Fl2_;AZP~L!5D}2 z_JANLR`~7^+2A>7r`XJ;vyV3`+C z_?|RS%X8GFwOt5LgA}goHX+RfJvOOx5@a}}LKdjv+z%i*%)D(jYd>{B{N@EwmDGkF;gPq(29jyT8 z6zx=+Q~<_Xp1*C(ciAsoL9&ak4Xs0}1brTi%P!iwrC&0>gEAEo=Dz`+rr zY&t9=TBMPZn;2oMs=ykr&iE`Bn%!sm8I|`624;aeo&h(F1&u5krj$vScmemzwz)Yo z{HKBYSEj7&1}s;M(0Ops#?h-hqu+I%kq_@on|Uv2;0f?q!N^>V!(U-j z&BQsb1_`>=%+I#OYDl(CMeAeLsRYF!kExZw9!j((kJ;O`YgRK6og}c;GM4D&p1ENY z=KT)y-}0btq~j$tqMW^1riapO^8D0AdTHL{i7h>QO6=#dFv1u#sHAS6^}2&0yzn z3`{phR=rH!PA~0Ds7u}frrA`YTq2^-%~C#&2R4!obW#_a-v*HGWnodRR)d=ktxq~5 zk>rxLBcYdI0~_DJ&Lr5RPdI%7tH2>fK}S!)?l8U8Xbl_W;4H}>` g0ptHE{kH%E00FAFfHR!#!2kdN07*qoM6N<$fmq*#ibJVQ8upoSx*1IXtr@Q5r1 zs=p4xj7}P}D}aKMC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NHH)l7JIrl zhD5Z!ovQ2M94OMT|M#~$Ea?H$#JBLI1RgiwRAOt+GfEL_W|Qa1krHtgCw$pvDE&k5-&hNr=59JDg;D^f!7XH-DdHJsU z8Sbbm8>LMa-sM%`e{?H*5tD}5yY?WtYTcjrrKPVWY_jYfx8-f39X!X?{3bCaO$v + + + + + + + + + + + + Index + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Index

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

    Geoportal Resources Access API Reference

    +

    The Geoportal Resources Access Library provides functions to simply handle geoportal web services usage.

    +

    Usage pattern : For each web service usage, invoque the corresponding function and get response data with onSuccess callback param.

    +

    Example :

    +
    Gp.Services.getConfig({
    +    apiKey : "e4iu7ff4ot440oj40byfkciw",
    +    onSuccess : function(response) {
    +        // response is a Gp.Services.GetConfigResponse object
    +        ...
    +    }
    +}) ;
    +
    +
    +

    Geoportal access key management

    +

    Access to Geoportal resources metadata availables with one ore several keys, using the Geoportal Configuration project.

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.getConfig()Gp.Services.GetConfigResponse
    +

    Elevation web service usage

    +

    Getting elevations in or along of one or several points on french territories using the elevation services of the Geoportal Platform.

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.getAltitude()Gp.Services.AltiResponse
    +

    Geocoding web service usage

    +

    Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the geocoding web service of the Geoportal Platform.

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.geocode()Gp.Services.GeocodeResponse
    +

    Reverse Geocoding web service usage

    +

    Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the reverse geocoding web service of the Geoportal Platform.

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.reverseGeocode()Gp.Services.GeocodeResponse
    +

    Autocompletion web service usage

    +

    Getting suggestions of probable places names or address based on uncomplete texts, using the autocompletion service of the Geoportal Platform

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.autoComplete()Gp.Services.AutoCompleteResponse
    +

    Routing web service usage

    +

    Getting a route from one point to another using the route service of the Geoportal Platform.

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.route()Gp.Services.RouteResponse
    +

    IsoCurve web service usage

    +

    Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using isucurve service of the Geoportal Platform.

    + + + + + + + + + + + + + +
    Function to invoqueResponse Object (onSuccess callback param)
    Gp.Services.isoCurve()Gp.Services.IsoCurveResponse
    +
    + + + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/module-Gp.html b/v3.4.3/jsdoc/module-Gp.html new file mode 100644 index 00000000..d9a86f37 --- /dev/null +++ b/v3.4.3/jsdoc/module-Gp.html @@ -0,0 +1,2871 @@ + + + + + + + + + + + + + Module: Gp + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Module: Gp

    + + + + +
    + + +

    + Gp +

    + + + + +
    +
    + + + + +

    This is the global variable that is exposed in the browser environment.
    +Content is composed of constructor, functions and properties...

    +
    +

    Error()
    +- .TYPE_SRVERR : "SERVICE_ERROR"
    +- .TYPE_UNKERR : "UNKNOWN_ERROR"
    +- .TYPE_USEERR : "USAGE_ERROR"

    +
    +
    +

    Helper
    +- .indent()
    +- .normalyzeParameters()
    +- .normalyzeUrl()

    +
    +
    +

    Protocols.XHR
    +- .call()

    +
    +
    +

    Services (objects)
    +- .Alti
    +- .Elevation()
    +- .AltiResponse()
    +- .AutoComplete
    +- .SuggestedLocation()
    +- .AutoCompleteResponse()
    +- .Config()
    +- .DefaultUrl()
    +- .GeocodeResponse()
    +- .GetConfigResponse()
    +- .IsoCurveResponse()
    +- .Route
    +- .RouteInstruction()
    +- .RouteResponse()

    +
    +
    +

    Services (factory)
    +- .autoComplete()
    +- .geocode()
    +- .getAltitude()
    +- .getConfig()
    +- .isoCurve()
    +- .reverseGeocode()
    +- .route()

    +
    +
    +

    servicesDate : "YYYY-MM-DD"

    +
    +
    +

    servicesVersion : "X.X.X"

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

    Members

    + +
    + +
    +
    +

    static,constantmodule:Gp.servicesDate

    +
    + + +
    +
    + +
    +

    Publication date

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

    static,constantmodule:Gp.servicesVersion

    +
    + + +
    +
    + +
    +

    Version

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + +
    + + + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/module-Helper.html b/v3.4.3/jsdoc/module-Helper.html new file mode 100644 index 00000000..5fbb0b8a --- /dev/null +++ b/v3.4.3/jsdoc/module-Helper.html @@ -0,0 +1,3220 @@ + + + + + + + + + + + + + Module: Helper + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Module: Helper

    + + + + +
    + + +

    + Gp.Helper +

    + + + + +
    +
    + + + + +

    Classe utilitaire

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

    Methods

    + +
    + +
    +
    +

    + + staticindent(n, msg){String} +

    + + +
    + Utils/Helper.js, line 103 +
    + +
    + + +
    +
    + + +
    +

    Indentation d'une chaine

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    n + + +Number + + + + + +

    nombre de tabulation

    msg + + +String + + + + + +

    chaine

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +une chaine indentée +
    + + + + + +
    Example
    + + + +
    Gp.Utils.Helper.indent (2, "message à indenter")
    +// out
    +// ........message à indenter
    + + + +
    + + + +
    +
    +

    + + staticnormalyzeParameters(params){String} +

    + + +
    + Utils/Helper.js, line 9 +
    + +
    + + +
    +
    + + +
    +

    concatenation des parametres key/value dans les urls

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    params + + +Object + + + + + +

    tableau de clef/valeur

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +les paramètres concaténés +
    + + + + + +
    Example
    + + + +
    Gp.Utils.Helper.normalyzeParameters ({
    +        key1:value1,
    +        key2:value2,
    +        key3:value3
    + });
    + // out : "key1=value1&key2=value2&key3=value3"
    + + + +
    + + + +
    +
    +

    + + staticnormalyzeUrl(url, params, encode){String} +

    + + +
    + Utils/Helper.js, line 47 +
    + +
    + + +
    +
    + + +
    +

    Concaténation et encodage des urls.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +String + + + + + +

    url

    params + + +Object +| + +String + + + + + +

    tableau de clef/valeur ou string

    encode + + +Boolean + + + + + +

    true|false, false par defaut

    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    Returns:
    +une url normalisée +
    + + + + + +
    Example
    + + + +
    Gp.Utils.Helper.normalyzeUrl (url, {
    +        key1:value1,
    +        key2=:value2,
    +        key3:value3
    + });
    + // out : "url?key1=value1&key2=value2&key3=value3"
    + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/module-Services.html b/v3.4.3/jsdoc/module-Services.html new file mode 100644 index 00000000..7ab173a5 --- /dev/null +++ b/v3.4.3/jsdoc/module-Services.html @@ -0,0 +1,8343 @@ + + + + + + + + + + + + + Module: Services + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Module: Services

    + + + + +
    + + +

    + Gp.Services +

    + + + + +
    +
    + + + + +

    Geoportal web services invocation namespace.

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

    Methods

    + +
    + +
    +
    +

    + + innerautoComplete(options) +

    + + +
    + Services/Services.js, line 151 +
    + +
    + + +
    +
    + + +
    +

    Getting suggestions of probable places names or address based on uncomplete texts, using the autocompletion service of the Geoportal Platform

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +String + + + + + + + + + + + + +

    Access key to Geoportal platform, obtained here.

    text + + +String + + + + + + + + + + + + +

    Text input to complete.

    filterOptions.type + + +Array.<String> + + + + + + "StreetAddress" + + + + + optional + + + + + +

    Suggestion types to provide : address ("StreetAddress") and/or place name ("PositionOfInterest").

    filterOptions.territory + + +Array.<String> + + + + + + + + + optional + + + + + +

    Places where to limit the search of suggestions : "METROPOLE" (Corsica and metropolitan France), "DOMTOM" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31']

    maximumResponses + + +Number + + + + + + 10 + + + + + optional + + + + + +

    Maximum number of responses.

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.AutoCompleteResponse object as a parameter except if "rawResponse" is set to true.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

    serverUrl + + +String + + + + + + https://data.geopf.fr/geocodage/completion + + + + + optional + + + + + +

    Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.

    ssl + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).

    protocol + + +String + + + + + + XHR + + + + + optional + + + + + +

    Protocol used to handle dialog with web service. Possible values are 'JSONP' (https://en.wikipedia.org/wiki/JSONP) and 'XHR' (https://en.wikipedia.org/wiki/XMLHttpRequest). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.

    proxyURL + + +String + + + + + + + + + optional + + + + + +

    Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.

    callbackSuffix + + +String + + + + + + + + + optional + + + + + +

    Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.

    httpMethod + + +String + + + + + + GET + + + + + optional + + + + + +

    HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    contentType + + +String + + + + + + "application/xml" + + + + + optional + + + + + +

    Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    rawResponse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.

    onBeforeParse + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.

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

    + + innergeocode(options) +

    + + +
    + Services/Services.js, line 65 +
    + +
    + + +
    +
    + + +
    +

    Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the geocoding web service of the Geoportal Platform.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +String + + + + + + + + + + + + +

    Access key to Geoportal platform, obtained here.

    index + + +String + + + + + + "StreetAddress" + + + + + optional + + + + + +

    Geographical identifier type to search. Values currently availables are : "PositionOfInterest" for place names, "StreetAddress" for address search, "CadastralParcel" for Cadastral parcels search, "location" for a multi-index search on "StreetAddress" and "PositionOfInterest". Default is "StreetAddress".

    query + + +String + + + + + + + + + + + + +

    Geographic identifier to locate.

    filters + + +Object + + + + + + + + + optional + + + + + +

    Additional filters to apply to search. The following properties may be given.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    [prop] + + +String + + + + + + + optional + + + + + +

    Additionnal properties to filter search. Properties depends on options.index, and values type should be "String".
    +


    +Properties availables for address search :

    +"postalCode", "inseeCode" and "city".
    +


    +Properties availables for place names search :

    +"postalCode", "inseeCode" and "type".
    +


    +Properties availables for cadastral parcels search :

    +"codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille".

    + +
    maximumResponses + + +Number + + + + + + 20 + + + + + optional + + + + + +

    Maximum number of responses. Default underlying service value applies (20) if not provided.

    returnTrueGeometry + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Set this parameter to true if you wish to have the true geometrie returned.

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.GeocodeResponse object as a parameter except if "rawResponse" is set to true.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

    serverUrl + + +String + + + + + + http (s)://data.geopf.fr/geocodage/search + + + + + optional + + + + + +

    Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.

    ssl + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).

    proxyURL + + +String + + + + + + + + + optional + + + + + +

    Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.

    callbackSuffix + + +String + + + + + + + + + optional + + + + + +

    Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.

    rawResponse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.

    onBeforeParse + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    Example
    + + + +
    Gp.Services.geocode ({
    +    apiKey : "carte",
    +    location : "73 avenue de Paris, Saint-Mandé",
    +    // traitement des resultats
    +    onSuccess  : function (result) {
    +        console.log("found (x:"+result.position.x+", y:"+result.position.y+")") ;
    +    }
    +}) ;
    + + + +
    + + + +
    +
    +

    + + innergetAltitude(options) +

    + + +
    + Services/Services.js, line 33 +
    + +
    + + +
    +
    + + +
    +

    Getting elevations in or along of one or several points on french territories using the elevation services of the Geoportal Platform.

    +Two use cases are availables :

    +
      +
    1. getting elevations of the given points : don't use the options.sampling parameter ;
    2. +
    3. getting a regular set of elevations along the given points : use the options.sampling parameter.
    4. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +String + + + + + + + + + + + + +

    Access key to Geoportal platform, obtained here.

    positions + + +Array.<Object> + + + + + + + + + + + + +

    Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter.

    sampling + + +Number + + + + + + + + + optional + + + + + +

    Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.

    +If not used, only elevations of these positions will be returned.

    zonly + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Set this parameter to true if you only want to have elevations returned without corresponding coordinates.

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.AltiResponse object as a parameter, except if "rawResponse" is set to true.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

    serverUrl + + +String + + + + + + https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json + + + + + optional + + + + + +

    Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.

    ssl + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).

    protocol + + +String + + + + + + XHR + + + + + optional + + + + + +

    Protocol used to handle dialog with web service. Possible values are 'JSONP' (https://en.wikipedia.org/wiki/JSONP) and 'XHR' (https://en.wikipedia.org/wiki/XMLHttpRequest). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.

    proxyURL + + +String + + + + + + + + + optional + + + + + +

    Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.

    callbackSuffix + + +String + + + + + + + + + optional + + + + + +

    Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.

    httpMethod + + +String + + + + + + GET + + + + + optional + + + + + +

    HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    contentType + + +String + + + + + + "application/xml" + + + + + optional + + + + + +

    Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    rawResponse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.

    onBeforeParse + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.

    api + + +String + + + + + + 'REST' + + + + + optional + + + + + +

    What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing.

    outputFormat + + +String + + + + + + 'xml' + + + + + optional + + + + + +

    Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing.

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

    + + innergetConfig(options) +

    + + +
    + Services/Services.js, line 18 +
    + +
    + + +
    +
    + + +
    +

    Access to Geoportal resources metadata availables with one ore several keys

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +String + + + + + + + + + optional + + + + + +

    Access key(s) ("," as separator, no spaces) to Geoportal platform, obtained here

    customConfigFile + + +String + + + + + + + + + optional + + + + + +

    path to a local config file. Overload the apiKey parameter

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.GetConfigResponse object as a parameter except if "rawResponse" parameter is set to true : a String will be returned.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

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

    + + innerisoCurve(options) +

    + + +
    + Services/Services.js, line 215 +
    + +
    + + +
    +
    + + +
    +

    Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the isochrone service of the Geoportal Platform.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +String + + + + + + + + + + + + +

    Access key to Geoportal platform, obtained here.

    resource + + +String + + + + + + + + + + + + +

    Resource used to compute the route. Available values are in the GetCapabilities.

    position + + +Gp.Point + + + + + + + + + + + + +

    Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude).

    graph + + +String + + + + + + "Voiture" + + + + + optional + + + + + +

    User profile to use to compute the isoCurve : "Voiture" (using a vehicule) or "Pieton" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities.

    exclusions + + +Array.<String> + + + + + + + + + optional + + + + + +

    DEPRECATED: use options.constraints. Indicates if route has to avoid some features ("toll", "bridge" or "tunnel").

    constraints + + +Array.<Object> + + + + + + + + + optional + + + + + +

    Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.

    method + + +String + + + + + + "time" + + + + + optional + + + + + +

    Computing method to use : "time" (using a duration as a constraint) or "distance" (using a distance as a constraint). Available values are in the GetCapabilities.

    time + + +Float + + + + + + + + + + + + +

    Maximum duration (expressed in seconds) to use when options.method is set to "time".

    distance + + +Float + + + + + + + + + + + + +

    Maximum distance (expressed in meters) to use when options.method is set to "distance".

    reverse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing.

    distanceUnit + + +String + + + + + + "km" + + + + + optional + + + + + +

    The unit used to provide distances in the response ("m" or "km").

    timeUnit + + +String + + + + + + "second" + + + + + optional + + + + + +

    The unit used to provide duration in the response ("standard", "second", "minute", "hour").

    smoothing + + +Boolean + + + + + + false + + + + + optional + + + + + +

    DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed.

    holes + + +Boolean + + + + + + false + + + + + optional + + + + + +

    DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent.

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.IsoCurveResponse object as a parameter except if "rawResponse" is set to true.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

    outputFormat + + +String + + + + + + 'json' + + + + + optional + + + + + +

    Output format ("json") to use for underlying webService. Only use if you know what you are doing.

    serverUrl + + +String + + + + + + https://data.geopf.fr/navigation/isochrone + + + + + optional + + + + + +

    Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.

    ssl + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).

    protocol + + +String + + + + + + XHR + + + + + optional + + + + + +

    Protocol used to handle dialog with web service. Possible values are 'JSONP' (https://en.wikipedia.org/wiki/JSONP) and 'XHR' (https://en.wikipedia.org/wiki/XMLHttpRequest). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.

    proxyURL + + +String + + + + + + + + + optional + + + + + +

    Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.

    callbackSuffix + + +String + + + + + + + + + optional + + + + + +

    Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.

    httpMethod + + +String + + + + + + GET + + + + + optional + + + + + +

    HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    contentType + + +String + + + + + + "application/xml" + + + + + optional + + + + + +

    Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    rawResponse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.

    onBeforeParse + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.

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

    + + innerreverseGeocode(options) +

    + + +
    + Services/Services.js, line 111 +
    + +
    + + +
    +
    + + +
    +

    Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the reverse geocoding web service of the Geoportal Platform.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    apiKey + + +String + + + + + + + + + + + + +

    Access key to Geoportal platform, obtained here.

    index + + +String + + + + + + "StreetAddress" + + + + + optional + + + + + +

    Geographical identifier type to search. Values currently availables are : "PositionOfInterest" for place names, "StreetAddress" for address search, "CadastralParcel" for Cadastral parcels search, "location" for a multi-index search on "StreetAddress" and "PositionOfInterest". Default is "StreetAddress".

    position + + +Object + + + + + + + + + + + + +

    Reference position where to search geographical identifiers.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    lon + + +Float + + + + + +

    Longitude

    lat + + +Float + + + + + +

    Latitude

    + +
    filters + + +Object + + + + + + + + + optional + + + + + +

    Additional filters to apply to search. The following properties may be given.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    [prop] + + +String + + + + + + + optional + + + + + +

    Additionnal properties to filter search. Properties depends on options.index, and values type should be "String".
    +


    +Properties availables for address search :

    +"postalCode", "inseeCode" and "city".
    +


    +Properties availables for place names search :

    +"postalCode", "inseeCode" and "type".
    +


    +Properties availables for cadastral parcels search :

    +"codeDepartement", "codeCommune", "nomCommune", "codeCommuneAbs", "codeArrondissement", "section", "numero", "feuille".

    + +
    searchGeometry + + +Object + + + + + + + + + optional + + + + + +

    Location where to perform the search.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    type + + +String + + + + + + + + + + +

    Geometry type (Point|Circle|Linestring|Polygon)

    coordinates + + +Array.<Float> +| + +Array.Array.<Float> + + + + + + + + + + +

    Coordinates

    radius + + +Float + + + + + + + optional + + + + + +

    Radius (only for type 'Circle')

    + +
    maximumResponses + + +Number + + + + + + 20 + + + + + optional + + + + + +

    Maximum number of responses. Default underlying service value applies (20) if not provided.

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.GeocodeResponse object as a parameter except if "rawResponse" is set to true.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

    serverUrl + + +String + + + + + + https://data.geopf.fr/geocodage/reverse + + + + + optional + + + + + +

    Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.

    ssl + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).

    proxyURL + + +String + + + + + + + + + optional + + + + + +

    Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.

    callbackSuffix + + +String + + + + + + + + + optional + + + + + +

    Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.

    rawResponse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.

    onBeforeParse + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.

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

    + + innerroute(options) +

    + + +
    + Services/Services.js, line 178 +
    + +
    + + +
    +
    + + +
    +

    Getting a route from one point to another using the route service of the Geoportal Platform.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    options + + +Object + + + + + +

    Options for function call.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    resource + + +String + + + + + + + + + + + + +

    Resource used to compute the route. Available values are in the GetCapabilities.

    apiKey + + +String + + + + + + + + + + + + +

    Access key to Geoportal platform, obtained here.

    routePreference + + +String + + + + + + "fastest" + + + + + optional + + + + + +

    Indicates the way to compute the route : "fastest" (time optimisation) or "shortest" (distance optimisation). Available values are in the GetCapabilities.

    startPoint + + +Gp.Point + + + + + + + + + + + + +

    Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.

    endPoint + + +Gp.Point + + + + + + + + + + + + +

    End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.

    viaPoints + + +Array.<Gp.Point> + + + + + + + + + optional + + + + + +

    Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities.

    graph + + +String + + + + + + "Voiture" + + + + + optional + + + + + +

    User profile to use to compute the route : "Voiture" (using a vehicule) or "Pieton" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities.

    exclusions + + +Array.<String> + + + + + + + + + optional + + + + + +

    DEPRECATED: use options.constraints. Indicates if route has to avoid some features ("toll", "bridge" or "tunnel").

    geometryInInstructions + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Indicates if route geometry has to be also returned with route instructions.

    provideBoundingBox + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Indicates if route instructions has to be localised with a BBOX in the response.

    distanceUnit + + +String + + + + + + "m" + + + + + optional + + + + + +

    The unit used to provide distances in the response ("meter" or "kilometer").

    timeUnit + + +String + + + + + + "second" + + + + + optional + + + + + +

    The unit used to provide duration in the response ("standard", "second", "minute", "hour").

    waysAttributes + + +Array.<String> + + + + + + + + + optional + + + + + +

    Way Attributes to add in the response. Available values are in the GetCapabilities.

    constraints + + +Array.<Object> + + + + + + + + + optional + + + + + +

    Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.

    onSuccess + + +function + + + + + + + + + + + + +

    Callback function for getting successful service response. Takes a Gp.Services.RouteResponse object as a parameter except if "rawResponse" is set to true.

    onFailure + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a Gp.Error object as parameter.

    timeOut + + +Number + + + + + + 0 + + + + + optional + + + + + +

    Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.

    outputFormat + + +String + + + + + + 'json' + + + + + optional + + + + + +

    Output format ("json" or "xml") to use for underlying webService. Only use if you know what you are doing.

    serverUrl + + +String + + + + + + https://data.geopf.fr/navigation/itineraire + + + + + optional + + + + + +

    Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.

    ssl + + +Boolean + + + + + + true + + + + + optional + + + + + +

    Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).

    protocol + + +String + + + + + + XHR + + + + + optional + + + + + +

    Protocol used to handle dialog with web service. Possible values are 'JSONP' (https://en.wikipedia.org/wiki/JSONP) and 'XHR' (https://en.wikipedia.org/wiki/XMLHttpRequest). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.

    proxyURL + + +String + + + + + + + + + optional + + + + + +

    Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.

    callbackSuffix + + +String + + + + + + + + + optional + + + + + +

    Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.

    httpMethod + + +String + + + + + + GET + + + + + optional + + + + + +

    HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    contentType + + +String + + + + + + "application/xml" + + + + + optional + + + + + +

    Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.

    rawResponse + + +Boolean + + + + + + false + + + + + optional + + + + + +

    Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.

    onBeforeParse + + +function + + + + + + + + + optional + + + + + +

    Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/module-XHR.html b/v3.4.3/jsdoc/module-XHR.html new file mode 100644 index 00000000..fc17286e --- /dev/null +++ b/v3.4.3/jsdoc/module-XHR.html @@ -0,0 +1,3137 @@ + + + + + + + + + + + + + Module: XHR + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    Geoportal Resources Access API Reference

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

    Module: XHR

    + + + + +
    + + +

    + Gp.Protocols.XHR +

    + + + + +
    +
    + + + + +

    Ajax Request (use of Promises)

    + + + +
    + + + + + + + + + + + + + + + + + + + +
    See:
    +
    +
      +
    • dependance 'es6-promise'
    • +
    +
    + + + +
    + + + + +
    + + + + + + + + + + + + + + +

    Methods

    + +
    + +
    +
    +

    + + staticcall(settings) +

    + + +
    + Protocols/XHR.js, line 22 +
    + +
    + + +
    +
    + + +
    +

    Interface unique d'envoi d'une requête.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    settings + + +Object + + + + + +

    options generales

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    url + + +String + + + + + +

    url du service

    method + + +String + + + + + +

    GET, POST, PUT, DELETE

    format + + +String + + + + + +

    format de la reponse du service : json, xml ou null (brute)

    data + + +String + + + + + +

    content (post) ou param (get)

    proxy + + +String + + + + + +

    proxy url

    headers + + +Object +| + +String + + + + + +

    (post) ex. referer

    content + + +Object +| + +String + + + + + +

    (post) ex. 'application/json'

    timeOut + + +String + + + + + +

    timeout = 0 par defaut

    scope + + +String + + + + + +

    this

    onResponse + + +function + + + + + +

    callback

    onFailure + + +function + + + + + +

    callback

    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + +
    +
    + +
    + Copyright (c) IGN, released under the CECILL-B license - Geoportal Resources Access - version 2.0.0 +
    + Documentation generated by JSDoc 3.6.11 on Wed Aug 21 2024 19:57:43 GMT+0000 (Coordinated Universal Time) +
    + + + + + + + \ No newline at end of file diff --git a/v3.4.3/jsdoc/scripts/bootstrap.min.js b/v3.4.3/jsdoc/scripts/bootstrap.min.js new file mode 100644 index 00000000..1a6258ef --- /dev/null +++ b/v3.4.3/jsdoc/scripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.0.3 (http://getbootstrap.com) + * Copyright 2013 Twitter, Inc. + * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + */ + +if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file diff --git a/v3.4.3/jsdoc/scripts/jquery.min.js b/v3.4.3/jsdoc/scripts/jquery.min.js new file mode 100644 index 00000000..9a85bd34 --- /dev/null +++ b/v3.4.3/jsdoc/scripts/jquery.min.js @@ -0,0 +1,6 @@ +/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/ +(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t) +};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("